image - 将低分辨率图像放大到高分辨率图像时,哪种方法/算法可提供最佳输出质量?

标签 image image-processing printing imagemagick resolution

我将尝试尽可能具体。

我正在开展一项邀请函业务,允许人们在线定制他们的邀请函,然后将其打印出来。我正在尝试找出最好的方法来获取他们正在模拟的预览图像并输出它,使其分辨率足以打印。

我知道 svg 是我最好的选择,但问题是我的一半设计不是矢量,而是 300 dpi 光栅图像。

有没有人知道我如何拍摄这些 300 dpi 的图像,将它们缩小以创建预览图像,然后再按比例放大以打印它们?

我曾尝试另存为 PNG 文件,但问题是它们以 72 dpi 的分辨率保存到 Web。

最佳答案

如果您需要将较低分辨率的图像放大,可以使用 ImageMagick 的 convert 命令轻松完成。这非常简单:

convert  input.png  -scale 400%  4x-input.png

但是,有一些非常先进的算法可以提供更好的输出质量,如果您知道如何从命令行将它们付诸行动的话。

考虑以下输入图像(原始文件大小为 7 kByte,尺寸为 108x135 像素):

Original PNG, 'ophthalmologist test chart'

现在将其缩放到像素数的 16 倍(或每个维度 4 倍)...

  1. ...首先使用上面的“直接缩放”命令,

  2. ...然后使用“更好的缩放质量”命令。

比较这两个结果:

Straightforward 400% scaling result Better quality 400% scaling result

还要注意文件大小的差异:

  • 生成的两张图片的大小均为 432x540 像素,
  • 但是“质量更好”的只使用 72 kByte 的磁盘空间,
  • 而“直接”缩放的使用更多:87.5 kByte!

您想查看照片的结果吗?我们开始...

输入照片:

Old man's photo

ImageMagick 的“直接缩放”(第一个)和“更好的质量缩放”(第二个)的结果:

photo scaling 400% straightforward enter image description here

(两个输入测试文件的来源属于 The Weizmann Institute of Science -- Faculty of Mathematics and Computer Science in Israel,他们开发了自己的图像“超分辨率缩放”算法。然而,此处显示的输出是 ImageMagick 的,与魏茨曼研究所的算法无关... )

'命令'

最后,这是为您提供卓越品质的命令。我在 ImageMagick v.'6.7.6-9 2012-05-12 Q16' 上运行它以获得您在上图中看到的结果:

convert                       \
   input.png                  \
  -colorspace RGB             \
  +sigmoidal-contrast 11.6933 \
  -define filter:filter=Sinc  \
  -define filter:window=Jinc  \
  -define filter:lobes=3      \
  -resize 400%                \
  -sigmoidal-contrast 11.6933 \
  -colorspace sRGB            \
   better-quality-enlargement.png

免责声明:此 ImageMagick 命令绝不是我自己的成就。这是Nicolas Robidoux的研究结果谁想出了它。

有关 Nicolas 最近的 ImageMagick 实验、他的解释和考虑以及他的一些替代命令的更多详细信息,您可以在此处找到:

关于image - 将低分辨率图像放大到高分辨率图像时,哪种方法/算法可提供最佳输出质量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7168786/

相关文章:

python - 如何使用高斯混合模型按波长分割图像?

ios - 是否可以在 iOS 中从另一个图像剪切图像?

javascript - 打印到纸张的特定区域 C#

c# - 在打印作业期间更换打印机托盘

.net 在 IE 和 FF 中生成损坏的 jpeg

Android 添加图像到按钮

c# - 自动为图像添加水印

java - 打印 Java 数组的最简单方法是什么?

c++ - 如何用Qt显示图像

javascript - 出现背景图像的问题