使用Python进行分形图像缩放
我现在的情况是,手头有一些分辨率比较低的图片(通过一个API获取,没法得到更高分辨率的图片),而我需要生成高分辨率的图片。
我看过PIL,这个工具在很多方面都很好用……但在放大图片方面就不太行。
它提供了一些常见的缩放算法,包括:
- 最近邻算法
- 双线性插值
- 双立方插值
- 抗锯齿
我想使用分形缩放(参考Jeff在Coding Horror上的文章),但可惜的是,PIL并不支持这种缩放方式。
我进一步在谷歌上搜索,也没有找到其他库可以提供分形图像缩放。
这种东西真的存在吗?还是我真的得下定决心自己写一个分形缩放算法?
我不是专家,但从我现在的角度来看,这看起来学习起来难度挺大的 :(
如果没有这样的库,或许你能给我一些建议,告诉我在哪里可以学习分形压缩算法?
3 个回答
看看这个使用残差密集网络的解决方案:https://github.com/idealo/image-super-resolution
这个项目的文档写得很好,比较容易上手。他们还提供了docker构建和google colab的笔记本。可以查看一下这个文档
基于分形的图像缩放现在还比较少见,大家还没有统一认可的最佳算法。我担心你在常见的图像处理库里找不到这个方法。
而且,这种方法并不总是比双三次插值要好。它可能会产生一些不太好的效果,这对于某些类型的图像来说是不可接受的。就我个人而言,Jeff给出的示例图像在鼻子的右侧等尖锐边缘看起来有点奇怪和不自然。虽然在某些情况下可能会更好,但我不会把它随便应用到我所有的图像上。
(其他一些“高级”的放大技术也是这样,包括更为人知和广泛使用的Lanczos/Sinc方法。)
这里有一些算法,而这些算法在Python中是找不到的。首先,你可以看看这篇论文:
作者是Daniel Glasner、Shai Bagon和Michal Irani,标题是“从单张图像中获取超分辨率”,发表在2009年的IEEE国际计算机视觉会议上,地点是日本京都。
这篇论文的内容非常先进,技术含量高,效果也很不错。如果你能把它实现成Python代码,请一定要分享给大家哦 :)