有人知道Microsoft在Paint中使用了哪种alogirhtm来缩小图片尺寸吗?
我正在尝试开发一些软件(供个人使用)以缩小许多图片的大小(使用Java)。在使用Java函数“NestestNeighbor”,“Bilinear”和“Bicubic”后,结果质量较差...我使用了Lanczos算法,该算法给出了更好的结果,但未达到MS Paint结果:/
注意:使用的Paint版本是Windows 7的版本,我使用的Lanczos实现是Millie项目LanczosResamplePlugin.java的版本之一
和内建的Java来自Graphics2D:
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,草在原始文件中确实变尖了(因此Paint结果似乎比Lanczos更好)。
原始图像可以在这里查看:landscape-wallpaper-11a.jpg
Lanczos结果:
vs绘画结果:
另一张下面的图片(个人图片),上面有一些文字。您会注意到,在Lanczos结果中,与在Paint结果中相比,文本的可读性(锐化度)更低。而且,在黑色标题文本和带有白色文本的红色区域之间,在Lanczos结果中存在一些噪点,在Paint结果中不存在。并且在底部,纸上的url在第一个结果上完全模糊/不可读,而在Paint上则可读。
Lanczos结果:
vs绘画结果:
我很奇怪,假设MS使用2种算法:1缩小比例,第2遍以锐化生成的图片?但是,由于最后一个示例中的底部url仍然可读,因此可能不是缩小结果的锐化所导致的...?
谢谢
编辑
好的,我有点愚蠢……图片上的噪音是由于jpeg压缩质量(保存图片时我的Java代码中没有设置)。
下面是png的结果,所以没有噪音。但是结果仍然不可读。
兰佐斯奶酪png
最佳答案
好吧,我想我已经明白了!
实际上,MS Paint(win7)中没有魔术。它必须使用众所周知的Lanczos算法来缩小(或放大?)图像,这似乎是最好的常规重采样算法(似乎在XnView中,我们可以选择重采样算法,这是默认选项)。
因此,我发现了2个其他的Java蕴含,每个蕴含不同的结果:
原始图像:landscape-wallpaper-11a.jpg
来自Milli项目here的
我的第二张结果来自我的个人照片之一:
项目列表3中的结果似乎是最接近“绘画”结果的结果(但不相同)。它具有清晰易读的文本(第二次测试)和锋利的草丛(如原始图像)(第一次测试)。
如前所述,Moreovoer(我的问题的编辑部分)说,噪声是由于保存时的jpeg压缩引起的。上面的结果以PNG格式显示,因此不会受到jpeg伪像压缩的影响。
关于image-processing - 图像缩小算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31873215/