gpt4 book ai didi

image-processing - imagemagick:删除所有出现的被透明度包围的杂散像素

转载 作者:行者123 更新时间:2023-12-03 23:38:17 24 4
gpt4 key购买 nike

您好!我想从透明图像中删除所有出现的杂散像素。

以下是示例图片,为方便起见放大:

Before Processing

以下是同一张图片,但我希望它在处理后看起来如何:

After Processing

我能想到的描述我想要实现的最佳方式是,应该移除周围像素完全透明的每个像素。将选择器想象成一个 3x3 的网格,网格的中间是操作的像素。

我看了Morphology在 IM 手册中,但它似乎没有为此提供足够好的方法。

ImageMagick 可以做到这一点吗?如果没有,还有其他命令行软件可以实现吗?

最佳答案

在 Imagemagick 中,您可以使用 -connected-components 来移除那些孤立的像素 block 。它们的一侧似乎是 5x5 像素。所以我们将该区域的阈值保持在 26。我们删除了 Alpha channel 中的那些 block ,然后在图像中替换它们。 (注意我们需要使用 8-connected 与 4-connected 区域检测来保留您的其他区域)。

既然你说你的图像被放大了,所以我假设你的孤立区域是 1x1 像素。因此,将 area-threshold 更改为 2,以移除单个像素区域。

输入:

enter image description here

Unix 语法:

convert img.png \
\( -clone 0 -alpha extract -type bilevel \
-define connected-components:mean-color=true \
-define connected-components:area-threshold=26 \
-connected-components 8 \) \
-alpha off -compose copy_opacity -composite \
result.png


enter image description here

Windows 语法:

convert img.png ^
( -clone 0 -alpha extract -type bilevel ^
-define connected-components:mean-color=true ^
-define connected-components:area-threshold=26 ^
-connected-components 8 ) ^
-alpha off -compose copy_opacity -composite ^
result.png


-connected-components

补充:

如果您只想删除小的孤立彩色像素,而不是彩色像素内的任何透明像素,那么没有简单的方法可以做到这一点。这是我想要的增强功能。但是,这是可以做到的。

这是您的图像修改后,左上角的红色 block 有一个透明的中心像素。我在其右侧添加了一条红线,以确保当中心变为透明时它大于 25 像素,以便您可以看到哪个像素具有透明中心。您必须下载并放大此图像才能看到丢失的像素。

enter image description here

4 倍缩放:

enter image description here

方法是在 alpha channel 中找到所有的白色区域,然后列出所有小于 26 像素的区域。然后重新处理图像以按 ID 删除这些区域。

获取 ID 列表

id_list=""
OLDIFS=$IFS
IFS=$'\n'
arr=(`convert img2.png -alpha extract -type bilevel \
-define connected-components:mean-color=true \
-define connected-components:verbose=true \
-connected-components 8 null: | grep "gray(255)" | sed 's/^[ ]*//'`)
echo "${arr[*]}"
num=${#arr[*]}
IFS=$OLDIFS
for ((i=0; i<num; i++)); do
id=`echo "${arr[$i]}" | cut -d' ' -f1 | sed 's/[:]*$//'`
count=`echo "${arr[$i]}" | cut -d' ' -f4`
if [ $count -lt 26 ]; then
id_list="$id_list $id"
fi
done
echo "$id_list"


这是打印的内容

12: 5x5+120+70 122.0,72.0 25 gray(255)
14: 5x5+30+85 32.0,87.0 25 gray(255)
15: 5x5+110+85 112.0,87.0 25 gray(255)
16: 5x5+75+90 77.0,92.0 25 gray(255)
17: 5x5+40+100 42.0,102.0 25 gray(255)
18: 5x5+110+110 112.0,112.0 25 gray(255)
19: 5x5+140+110 142.0,112.0 25 gray(255)
21: 5x5+15+130 17.0,132.0 25 gray(255)
22: 5x5+40+140 42.0,142.0 25 gray(255)
23: 5x5+85+140 87.0,142.0 25 gray(255)
24: 5x5+120+140 122.0,142.0 25 gray(255)
2: 5x5+55+5 57.0,7.0 25 gray(255)
5: 5x5+100+20 102.0,22.0 25 gray(255)
7: 5x5+65+30 67.0,32.0 25 gray(255)
8: 5x5+125+30 127.0,32.0 25 gray(255)
9: 5x5+105+50 107.0,52.0 25 gray(255)
11: 5x5+25+65 27.0,67.0 25 gray(255)

12 14 15 16 17 18 19 21 22 23 24 2 5 7 8 9 11

重新处理以按 ID 删除区域

convert img2.png \
\( -clone 0 -alpha extract -type bilevel \
-define connected-components:mean-color=true \
-define connected-components:remove="$id_list" \
-connected-components 8 -background black -flatten +write tmp.png \) \
-alpha off -compose copy_opacity -composite \
result2.png


enter image description here

4 倍缩放:

enter image description here

关于image-processing - imagemagick:删除所有出现的被透明度包围的杂散像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57139281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com