Image processing 图像降尺度算法
有人知道微软在绘画中使用了哪些alogirhtm来缩小图片的尺寸吗 我正在尝试开发一个小软件(供个人使用)来缩小很多图片的比例(用Java)。使用“内置”java函数作为最近邻、双线性和双三次函数后,结果质量很差。。。我使用了Lanczos算法,该算法可以提供更好的结果,但没有达到MS绘制结果:/ 注意:使用的绘画版本是Windows7的版本,我使用的Lanczos实现是Millie项目的版本 内置java来自Graphics2D:Image processing 图像降尺度算法,image-processing,Image Processing,有人知道微软在绘画中使用了哪些alogirhtm来缩小图片的尺寸吗 我正在尝试开发一个小软件(供个人使用)来缩小很多图片的比例(用Java)。使用“内置”java函数作为最近邻、双线性和双三次函数后,结果质量很差。。。我使用了Lanczos算法,该算法可以提供更好的结果,但没有达到MS绘制结果:/ 注意:使用的绘画版本是Windows7的版本,我使用的Lanczos实现是Millie项目的版本 内置java来自Graphics2D: g2d.setRenderingHint(Render
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);
如果有人有一个想法,以达到同样的质量结果,这将是有益的(为我的结果图片,也为我的知识)
以下是一些结果:
(我不会发布NN、双线性和双三次结果,这些结果的质量非常差)
吼叫一幅风景画(在谷歌图片上找到)。原始文件大小为1680x1050,并且原始文件中的草非常锐利(因此绘制结果似乎比Lanczos更好)
可以在此处查看原始图像:
兰索斯结果:
vs绘制结果:
下面是另一张图片(个人图片),带有一些文字。您可以注意到,在Lanczos result中,文本的可读性(锐化程度)不如在Paint result中。此外,在黑色标题文本和带有白色文本的红色区域之间,Lanczos结果中存在一些噪声,这在绘制结果中不存在。在底部,纸上的url在第一个结果上完全模糊/不可读,在绘制结果上可读
兰索斯结果:
vs绘制结果:
我首先假设微软使用了两种算法:第一种是缩小比例,第二种是锐化结果图片?但由于最后一个示例中的底部url仍然可读,所以它可能不是由于缩小规模后的结果锐化而产生的
谢谢
编辑
好吧,我有点笨。。。图片上的噪声是由于jpeg压缩质量(在保存图片时,我的Java代码中没有设置)
下面是png格式的结果,所以没有噪声。但结果仍然无法像绘制一样可读
兰蔻奶酪png
好的,我想我拿到了 事实上,MS Paint(win7)中没有魔力。它必须使用众所周知的Lanczos算法来调整图像的大小,这似乎是最好的通用重采样算法(在XnView中,我们可以选择重采样算法,这是默认选项) 因此,我发现了另外两种java实现,它们各自给出不同的结果: 原始图像:
Moreovoer,如前所述(编辑我问题的一部分),噪音是由于保存时的jpeg压缩造成的。上面的结果是PNG格式的,因此不受jpeg伪影压缩的影响。与Alex所说的相反,我非常确定Paint使用了GDI+提供的高质量双三次方法,它确实没有使用Zattonaka的实现。您可以通过要求两者将黑白交替扫描线的图像大小减小一条扫描线来判断 在油漆中,黑白扫描线停留在顶部和底部,但在中间褪色成深灰色。 Zattonaka的实现始终保持黑白交替扫描线,但删除一条扫描线。原因在这段代码中:
int bsx = (int)(dx / scale), bsy = (int)(dy / scale);
虽然这在人工条码图像上给出了很好的结果,但它所做的基本上是使用Lanczos预处理阶段进行最近邻缩放。在现实世界中,它的表现会非常糟糕,这与最近邻缩放效果不佳的原因大致相同:它往往会切掉小细节。多亏了Lanczos卷积,Zattonaka的实现并没有直截了当的近邻那么糟糕,但有些图像仍然非常糟糕
如果你正在寻找类似Paint的功能,最好尝试一个好的带预锐化的双三次插值器来抵消缩小的模糊。您可能需要稍微调整一下。MSPaint使用双线性插值,然后使用卷积内核锐化图像: 0.0,-0.125,0.0 -0.125,1.5,-0.125 0.0,-0.125,0.0 命令:
magick image.png -scale 512 -morphology Convolve "3x3: 0.0, -0.125, 0.0 -0.125, 1.5, -0.125 0.0, -0.125, 0.0" image_resized.png
你也有原始图片的链接吗?我把第一张原始图片的链接放在结果的上方。对于第二个文件,我必须找到上传和共享的方法(文件大小为3.5Mo)。win 7 paint无疑是一项改进。有关调整过滤器大小及其参数的良好参考资料,请参阅ImageMagick页面,从我所知,这似乎是最正确的答案(
-scale
,然后卷积),或者至少非常接近。在按比例调整大小时,较小图像尺寸的取整方式有一个显著的区别——例如,如果限制因素是图像高度,那么mspaint有时可能会生成宽度比ImageMagick生成的宽度小1倍的图像。希望我能多次+1,我已经想了很多年了!