如何转换图像背景图案?

时间:2016-01-03 21:23:38

标签: image-processing

在此similar thread上,他们提出了将某些图像的背景颜色转换为透明的解决方案。
但有时背景是简单模式,就像在这种情况下:

Square background pattern

请注意正方形背景图案。

处理图像时,通常需要删除或更改背景,但首先需要检测它(即:更改其颜色或使其透明)。例如,在上面的图片示例中,我想获取

Pattern changed to yellow

如何在图像中检测/更改指定的图案?

接受GUI解决方案。
首选开源解决方案(至少需要免费)。 最简单解决方案将是首选(我希望避免安装数百MB程序)。

  

注意:我正考虑在Photography发布此问题   StackExchange网站,但我宁愿说一个程序员的头脑(我   可能需要编辑几十个这样的图像)更贴近我   想。我不是艺术家。

1 个答案:

答案 0 :(得分:2)

这不是一个完全开发的答案,但它确实在某种程度上考虑一种方法 - 也许其他人想要开发它...

正如你所说,如果指定了你的模式,你知道它是什么 - 好,不是吗?因此,您可以在图像中查找模式的"最小重复单元" 。在你的情况下,这是一个16x16网格:

enter image description here

现在,您可以在图像中搜索该模式。我在命令行使用ImageMagick,但如果您愿意,可以使用其他工具。 ImageMagick安装在大多数Linux发行版上,可免费用于OSX和Windows。所以,我在你的地球图像中搜索那个网格,ImageMagick给我一个输出图像,在两个图像匹配的每个位置的左上角显示白点:

compare -metric ae -dissimilarity-threshold 1.0 -compose src -subimage-search globe.gif grid.png res.png

这样就可以在档案res-1.png

中找到我

enter image description here

现在,白点是图像中找到16x16 "最小重复单位" 的位置,但是在左上角,我将它们向右和向下移动8将像素放到匹配区域的中心,然后我创建一个新的输出图像,其中每个像素是之前存在的16x16网格的最大像素:

convert res-1.png -roll +8+8 -statistic maximum 16x16  z.png

enter image description here

我现在可以反转该掩码然后用它来设置原始图像的不透明度,从而消隐与"最小重复单位" 匹配的区域:

convert globe.gif \( z.png -negate \) -compose copy_opacity -composite q.png

enter image description here

不,它并不完美,但这是一种可以改进的方法......