Replace/repaint 图像中所有具有一种颜色的像素,并从相邻像素进行插值
Replace/repaint all pixels with one color in image with interpolated from neighboring pixels
我有一个由程序生成的 GIF 图像,其中每个输出值都通过附加的调色板由其颜色表示。我需要替换一个值,即从图像中插入相邻像素的颜色。由于我无法更改程序输出,因此我需要修改输出图像。生成的图像将以 PNG 或 GIF 格式保存。
我可以轻松提取(屏蔽)所有需要重新绘制的像素,因为它们具有固定颜色,但我无法找到如何用来自相邻像素。
有没有办法在 imagemagick 中做到这一点?
像素的原始值与物理值成正比,因此如果可以对原始值进行插值,然后通过提供的调色板将其转换为颜色,那就太好了。
所附图像显示了原始图像(左)和在 GIMP 中手动处理的图像(右)。
一种技术是用背景替换有问题的颜色,然后结合使用腐蚀和扩张形态来移除路径。
鉴于...
convert input.png \
-fill white -fuzz 10% -opaque black \
-morphology Erode Diamond \
-morphology Dilate Diamond \
output.png
这不是真正的最近邻插值,但很接近。还要注意边缘的舍入误差。
已更新
或者正如 Fred 在评论中指出的那样,只需使用 -morphology Smooth Diamond
而不是 Erode + Dilate
convert input.png \
-fill white -fuzz 10% -opaque black \
-morphology Smooth Diamond \
output.png
为 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
不幸的是,左上角的红色和绿色之间有轻微的暗残留。我尝试增加模糊值和过滤器大小,但这似乎没有帮助。我不知道为什么。
我有一个由程序生成的 GIF 图像,其中每个输出值都通过附加的调色板由其颜色表示。我需要替换一个值,即从图像中插入相邻像素的颜色。由于我无法更改程序输出,因此我需要修改输出图像。生成的图像将以 PNG 或 GIF 格式保存。
我可以轻松提取(屏蔽)所有需要重新绘制的像素,因为它们具有固定颜色,但我无法找到如何用来自相邻像素。 有没有办法在 imagemagick 中做到这一点?
像素的原始值与物理值成正比,因此如果可以对原始值进行插值,然后通过提供的调色板将其转换为颜色,那就太好了。
所附图像显示了原始图像(左)和在 GIMP 中手动处理的图像(右)。
一种技术是用背景替换有问题的颜色,然后结合使用腐蚀和扩张形态来移除路径。
鉴于...
convert input.png \
-fill white -fuzz 10% -opaque black \
-morphology Erode Diamond \
-morphology Dilate Diamond \
output.png
这不是真正的最近邻插值,但很接近。还要注意边缘的舍入误差。
已更新
或者正如 Fred 在评论中指出的那样,只需使用 -morphology Smooth Diamond
而不是 Erode + Dilate
convert input.png \
-fill white -fuzz 10% -opaque black \
-morphology Smooth Diamond \
output.png
为 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
不幸的是,左上角的红色和绿色之间有轻微的暗残留。我尝试增加模糊值和过滤器大小,但这似乎没有帮助。我不知道为什么。