Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Imagemagick 使用从相邻像素插值的图像中的一种颜色替换/重新绘制所有像素_Imagemagick - Fatal编程技术网

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

Imagemagick 使用从相邻像素插值的图像中的一种颜色替换/重新绘制所有像素,imagemagick,Imagemagick,我有一个由程序生成的GIF图像,其中每个输出值通过附加的调色板由其颜色表示。我需要替换一个值,即图像中的颜色与相邻像素的插值。因为我不可能改变程序的输出,所以我需要修改输出图像。生成的图像将以PNG或GIF格式保存 我可以很容易地提取(屏蔽)所有需要重新绘制的像素,因为它们具有固定的颜色,但我无法找到如何用相邻像素的插值颜色替换imagemagick中一个/所有像素的颜色的解决方案。 有没有办法在imagemagick中做到这一点 像素的原始值与物理值成比例,因此,如果可以对原始值进行插值,然后

我有一个由程序生成的GIF图像,其中每个输出值通过附加的调色板由其颜色表示。我需要替换一个值,即图像中的颜色与相邻像素的插值。因为我不可能改变程序的输出,所以我需要修改输出图像。生成的图像将以PNG或GIF格式保存

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

像素的原始值与物理值成比例,因此,如果可以对原始值进行插值,然后通过提供的调色板将原始值转换为颜色,这将是一件好事

所附图像显示了原稿(左)和在GIMP中手动处理的原稿(右)


一种技术是用背景替换不合适的颜色,然后使用腐蚀和扩张形态学的组合来移除路径

鉴于

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


已更新

或者,正如弗雷德在评论中指出的那样,只需使用
-形态平滑菱形
而不是腐蚀+扩张

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

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


另一种方法是将遮罩放入过滤图像的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


不幸的是,在红色和绿色之间的左上角有轻微的黑色残留。我尝试增加模糊值和过滤器大小,但这似乎没有帮助。我不知道为什么。

您可能需要一个修复工具。ImageMagick没有这样的功能。您可以通过OpenCV或Skipage找到这一点。如果你提供原始图像的原始分辨率,我可以尝试用ImageMagick中的一些形态学来填充它,但这并不完全是你所需要的平均相邻像素(不包括有问题的像素)。你可以使用中值模糊过滤器来实现这一点。这将用周围像素中最频繁的值替换像素颜色。Gimp 2.10中有一个。根据定义,它不会创建新的颜色,因此结果的颜色将已经在调色板中。腐蚀-扩张组合与使用
-形态学平滑钻石相同
谢谢。我最终使用了以下一组命令(fmw42让我想到了使用合成图像):
convert input.gif-填充白色-不透明黑色-形态学平滑菱形tmp_Smooth.gif
convert input.gif-透明黑色tmp_transparent.gif
<代码>转换tmp_smooth.gif空:tmp_transparent.gif-layers Composite out.gif。
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
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