【问题标题】:Image enhancement solution图像增强解决方案
【发布时间】:2015-03-24 01:26:50
【问题描述】:

我有大量以下类型/质量的图片:

我想做的是:

  • 去除噪点(不影响图像的其余部分)
  • 增强线条

无法使用画笔/橡皮擦手动操作,因为图像太多。 可以使用哪些操作/过滤器来增强这些图像?

【问题讨论】:

  • gimp.org 试用 gimp - 这是一个 Photoshop 仿制品
  • @RachelGallen:您是否注意到 OP 写了 “手动操作......不是一种选择”?!?如果您可以概述如何以自动、脚本方式而不是手动方式使用 Gimp,您的评论会更有帮助...

标签: image image-processing imagemagick imagemagick-convert


【解决方案1】:

最简单的方法可能是 ImageMagick。由于需要对大量图片进行操作,所以可以编写一个脚本来实现。

您可以开始使用以下适用于 ImageMagick 的 convert 命令的图像运算符

  • -threshold:
    此运算符对输入图像应用同时的黑白阈值。

  • -blur
    该算子可降低输入图像的噪点和细节级别。

  • -sharpen
    该运算符锐化输入图像。

  • -black-threshold:
    此运算符强制将低于阈值的所有像素变黑,同时保持阈值或高于阈值的所有像素不变。

  • -white-threshold:
    此运算符强制将阈值的所有像素变白,同时保持阈值或阈值以上的所有像素不变。

  • -morphology:
    该运算符可以使用各种'方法' 修改图像。以下是方法dilateerode 的示例(有超过2 打不同的方法可用)。每种方法都可以应用不同的'kernels'。以下是内核 diamondkirsch 的示例(几乎有 3 打不同的内核可用)。

您可以应用其中的一个,或者在一个命令行中应用其中几个的适当组合。尝试几种变体,看看哪种最适合您。

'阈值'

以下是一些命令示例及其输出:

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -threshold 50%                      \
  50pc-threshold.png

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -threshold 85%                      \
  85pc-threshold.png

第一张图片(左侧)显示了第一个命令的输出。第二个图像是第二个命令的结果:

'threshold' 加上 'blur'

为了减少锐利的黑/白边框,您可能希望“让眼睛更容易”并对输出应用一些额外的模糊:

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -threshold 85%                      \
 -blur 2x1                           \
  85pc-threshold+blur-2x1.png

'threshold' 加上 'blur' 加上 'sharpen'

有关输出,请参见下一张图片(左侧)。模糊后,您可以应用另一轮(或两轮)处理:再次锐化。这是一个命令:

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -threshold 85%                      \
 -blur 2x1                           \
 -sharpen 0x3                        \
 -sharpen 0x3                        \
  85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3.png

各自的输出是最后一张图片(右边)。

'white-threshold''black-threshold'

以下两个命令演示了-white-threshold 50%-black-threshold 50%的用法:

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -white-threshold 50%                \
  white-threshold-50pc.png

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -black-threshold 50%                \
  black-threshold-50pc.png

以下两张图片显示了生成的图片:

同上,但阈值不同:

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -white-threshold 85%                \
  white-threshold-85pc.png

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -black-threshold 85%                \
  black-threshold-85pc.png

'black-threshold' 加上 'black-threshold'

结合两个阈值操作:

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -black-threshold 85%                \
 -white-threshold 85%                \
  black-threshold-85pc+white-threshold-85pc.png


convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -white-threshold 85%                \
 -black-threshold 85%                \
  white-threshold-85pc+black-threshold-85pc.png

如果您仔细观察,您会很容易发现最后两个示例命令的输出没有什么不同(并且它们也与第二个命令的输出相同)。

为了可能获得比上述命令更好的结果,您必须对各个参数进行一些变体(不要总是使用85%...)。

额外的'thinning'-morphology

我们可以对当前结果之一应用一些'thinning'。我将选择顶部的第四个图像/命令:

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -threshold 85%                      \
 -blur 2x1                           \
 -sharpen 0x3                        \
 -sharpen 0x3                        \
 -morphology erode diamond           \
  85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+erode+diamond.png

添加的-morphology erode diamond 使用“菱形”形状的“内核”来侵蚀白色区域——这意味着黑色线条变得更粗。您可以在下面的第一张图片中看到这一点。但这不是我们想要的效果。这就是为什么我们在 -morphology 之前应用 -negate 操作,然后在之后应用 -negate 的原因:

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -threshold 85%                      \
 -blur 2x1                           \
 -sharpen 0x3                        \
 -sharpen 0x3                        \
 -negate                             \
 -morphology erode diamond           \
 -negate                             \
  85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+negate+erode+diamond.png

两个输出图像如下:

我们可以使用dilate(扩大白色)来代替erode(侵蚀白色):

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -threshold 85%                      \
 -blur 2x1                           \
 -sharpen 0x3                        \
 -sharpen 0x3                        \
 -morphology dilate diamond          \
  85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+dilate+diamond.png

要查看所有内置内核形状的列表,请运行 convert -list kernel。我们可以用“kirsch”来代替菱形形态内核:

convert                              \
  http://i.stack.imgur.com/15lOG.png \
 -threshold 85%                      \
 -blur 2x1                           \
 -sharpen 0x3                        \
 -sharpen 0x3                        \
 -morphology dilate kirsch           \
  85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+dilate+kirsch.png

要获得所有可用内核的完整功能集,您可以试试这个:

for i in $(convert -list kernel); do    \
   convert                              \
     http://i.stack.imgur.com/15lOG.png  \
    -threshold 85%                       \
    -blur 2x1                            \
    -sharpen 0x3                         \
    -sharpen 0x3                         \
    -morphology dilate ${i}              \
     85pc-threshold+blur-2x1+sharpen-0x3+sharpen-0x3+dilate+${i}-kernel.png \
done

要了解有关各种 -morphology 操作的更多信息,请参阅此处:ImageMagick Examples -- Morphology of Shapes。要获取形态学内核的完整列表,请运行 convert -list morphology



ImageMagick 中有更多可用的处理选项。您应该自己探索它们...从这里开始了解它们:

  1. ImageMagick Command-Line Options
  2. ImageMagick Usage Examples
  3. ImageMagick Usage Examples -- Reference Index

【讨论】:

  • 这很好,但是现在输出中的线条看起来很粗。有没有其他选项可以让它更接近原作?
  • 你自己玩过参数吗?或者您是否正在等待一个现成的命令行,由一个不知道您的想法的人设计以获得可接受的结果?!? (您至少可以添加一个示例结果图像,说明您在手动操作时所获得的结果......)
  • 带有合理建议的好答案!有我的投票。您可以尝试在输出文件名之前添加-morphology erode octagonthin 轮廓,或者使用octagon:3 以获得更好的效果。
  • @MarkSetchell:请随时编辑我的答案——或者更好:使用此附加操作添加您自己的答案。顺便说一句,我想如果没有额外的-negate,简单地添加-morphology erode 是行不通的。 octagon 的内核可能太大,无法在此处使用。 (如果您添加答案,我会将其推荐给 OP 以“接受”:-)
  • 除了拼写错误,我通常不会干扰或编辑其他人的答案,尤其是你的答案 :-) 我不在我的电脑前,当我建议形态变薄/侵蚀时尝试在评论说线条太粗之后帮助OP,所以它更像是一个想法/建议而不是任何东西。干得好,感谢您抽出宝贵的时间来整合它 - 让我们希望您的幸运 OP 接受它,因为它是一个很好的答案。
猜你喜欢
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多