我有一个由程序生成的GIF图像,其中每个输出值通过附加的调色板由其颜色表示。我需要替换一个值,即从相邻像素插值的图像颜色。由于我无法更改程序输出,因此需要修改输出图像。生成的图像将以PNG或GIF格式保存。
我可以轻松地提取(遮罩)所有需要重绘的像素,因为它们具有固定的颜色,但是我找不到如何用相邻像素的内插颜色替换imagemagick中一个/所有像素的颜色的解决方案。 有没有办法在imagemagick中做到这一点?
像素的原始值与物理值成正比,因此如果可以对原始值进行插值,然后再通过提供的调色板将其转换为颜色,那就太好了。
所附图像显示了原始图像(左),并在GIMP中进行了手动处理(右)。
答案 0 :(得分:3)
一种技术是用背景替换有问题的颜色,然后结合使用腐蚀和膨胀形态来消除路径。
给出...
pip show networkx
这不是来自最近邻居的真实插值,而是接近的。还要注意边缘的舍入误差。
已更新
或者如弗雷德在评论中指出的那样,只需使用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:
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
另一种方法,但略长一点的方法是将遮罩放入已过滤图像的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
不幸的是,红色和绿色之间的左上方有一些暗的残留物。我尝试同时增加模糊值和过滤器大小,但这似乎无济于事。我不确定为什么。