首页 > 解决方案 > 使用从相邻像素插值的图像中的一种颜色替换/重绘所有像素

问题描述

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

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

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

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

原始图像和处理后的图像

标签: imagemagick

解决方案


一种技术是用背景替换有问题的颜色,然后使用侵蚀和扩张形态的组合来去除路径。

鉴于...

输入.png

convert input.png \
        -fill white -fuzz 10% -opaque black \
        -morphology Erode Diamond \
        -morphology Dilate Diamond \
        output.png

输出.png

这不是最近邻居的真正插值,但很接近。还要注意边缘的舍入误差。

边缘舍入误差


更新

或者正如 Fred 在评论中指出的那样,只需使用-morphology Smooth Diamond而不是 Erode + Dilate

convert input.png \
        -fill white -fuzz 10% -opaque black \
        -morphology Smooth Diamond \
        output.png

推荐阅读