用相邻像素插值的图像中的一种颜色替换/重新绘制所有像素

时间:2019-05-22 22:17:19

标签: imagemagick

我有一个由程序生成的GIF图像,其中每个输出值通过附加的调色板由其颜色表示。我需要替换一个值,即从相邻像素插值的图像颜色。由于我无法更改程序输出,因此需要修改输出图像。生成的图像将以PNG或GIF格式保存。

我可以轻松地提取(遮罩)所有需要重绘的像素,因为它们具有固定的颜色,但是我找不到如何用相邻像素的内插颜色替换imagemagick中一个/所有像素的颜色的解决方案。 有没有办法在imagemagick中做到这一点?

像素的原始值与物理值成正比,因此如果可以对原始值进行插值,然后再通过提供的调色板将其转换为颜色,那就太好了。

所附图像显示了原始图像(左),并在GIMP中进行了手动处理(右)。

Original and processed image

2 个答案:

答案 0 :(得分:3)

一种技术是用背景替换有问题的颜色,然后结合使用腐蚀和膨胀形态来消除路径。

给出...

input.png

pip show networkx

output.png

这不是来自最近邻居的真实插值,而是接近的。还要注意边缘的舍入误差。

edge rounding errors


已更新

或者如弗雷德在评论中指出的那样,只需使用convert input.png \ -fill white -fuzz 10% -opaque black \ -morphology Erode Diamond \ -morphology Dilate Diamond \ output.png 而不是腐蚀+膨胀

-morphology Smooth Diamond

答案 1 :(得分:2)

在xenoid的建议中添加一些内容,您想要创建一个遮罩图像,并使用该图像将中值滤镜与原始图像合成,以便仅更改线周围的区域。使用emcconville的图像和ImageMagick:

enter image description here

convert img.png \
\( -clone 0 -statistic median 3x3 \) \
\( -clone 0 -fuzz 10% -fill white +opaque black -fill black +opaque white -negate \) \
-compose over -composite \
result.png


enter image description here

另一种方法,但略长一点的方法是将遮罩放入已过滤图像的Alpha通道中,然后将其合成到原始图像上,从而产生完全相同的结果:

convert img.png \
\( -clone 0 -statistic median 3x3 \) \
\( -clone 0 -fuzz 10% -fill white +opaque black -fill black +opaque white -negate \) \
\( -clone 1 -clone 2 -alpha off -compose copy_opacity -composite \) \
-delete 1,2 \
-compose over -composite \
result.png


不幸的是,红色和绿色之间的左上方有一些暗的残留物。我尝试同时增加模糊值和过滤器大小,但这似乎无济于事。我不确定为什么。