Imagemagick:如何将与另一种颜色的像素不相邻的每个像素变白?

问题描述 投票:0回答:1

输入图像已生成,因此每个像素都是精确的颜色。 我对这些颜色的交叉点以及它们定义的对象感兴趣。
我想将仅与相同颜色或已经是白色的像素相邻的每个像素变白。 与另一种颜色的像素相邻的像素未修改。
即,结果应该只是red正方形与green线交叉的点和/或边缘。 我的猜测是,morphology 涉及使用square 内核。 但我不知道方法

之前和之后(使用“橡皮擦”近似) enter image description here 然后
enter image description here

imagemagick morphology
1个回答
0
投票

我还没有完全弄清楚你想要什么,而且这周我手里只有一部 iPhone,所以我会尽力让你接近,希望你能解决剩下的问题。

您似乎想要所有不与白色相邻的边缘。所以让我们找到:

  • 所有与白色相邻的边缘,以及
  • 所有边缘

然后做一些差分。

所以,对于所有与白色相邻的边,让所有非白色的都变成黑色,然后找到边:

magick shapes.png -fill black +opaque white -canny 0x1+30% -negate whiteedges.png

enter image description here

现在所有边缘。将所有内容变成灰色阴影并找到所有边缘:

magick shapes.png -colorspace gray -canny 0x1+30% otheredges.png

enter image description here

现在通过相乘将两者结合起来,但您可以尝试其他混合模式:

magick whiteedges.png otheredges.png -compose multiply -composite result.png

enter image description here


您显然可以向边缘检测图像添加阈值以增亮检测到的边缘。您还可以扩大白色区域以使它们更大/更胖,或者侵蚀它们以使它们更薄。您还可以使用中值滤波器等去除小伪影,但我认为掩模接近您想要的。

如果性能很重要,我们还可以将上述所有内容组合成一个命令。

© www.soinside.com 2019 - 2024. All rights reserved.