I have an image with nearly smooth background with some extra lines on it. I want to convert the image from RGB color space to LAB color space and then average the "L" part of pixels.
But before converting I want to delete extra lines or somehow ignore lines pixels in averaging the "L" part. Is there any algorithm to do this?
Below is an example of the images I have.
答案 0 :(得分:1)
答案 1 :(得分:0)
我正在使用 ImageMagick ,就像你的另一个问题一样。
这将为您提供一个掩码,显示与周围区域相差5%以上的所有像素(它是0.05
部分中的-fx
)。它的工作原理是加载石头图像,复制它并模糊副本以删除本地细节。然后计算原始和模糊副本之间的绝对差异,如果差异超过5%,则将像素设置为1
,否则将其设置为0
:
convert stone.jpg -colorspace gray \( +clone -blur x10 \) -fx "abs(u-v)>0.05?1:0" mask.png
尝试更改0.05
并查看您的想法。
这将告诉您掩码中有多少像素为白色。它依赖于像素亮度之和除以像素数的平均值,并且知道所有像素都是0
或1
:
convert mask.png -format "%[fx:int(mean*w*h)]" info:
6155
这会使所有蒙版像素变黑。它的工作原理是加载石头和面具,翻转面具然后,在每个像素位置,选择两个图像的较暗 - 所以它将选择黑色到处面具是白色的,它将选择其他地方的石头:< / p>
convert stone.jpg \( mask.png -negate \) -compose darken -composite nolines.png
答案 2 :(得分:0)
在ImageMagick中,如果使像素被忽略为透明,则可以使用-scale 1x1!获得所有非透明像素的平均值。例如,从上面的两张图片中可以看出:
首先将遮罩放入Alpha通道,然后将结果缩放到一个像素,关闭alpha并获得像素颜色:
convert image.jpg mask.png -alpha off -compose copy_opacity -composite -scale 1x1! -alpha off -format "%[pixel:u.p{0,0}]" info:
srgb(231,214,198)
要检查,让我们制作样本:
convert -size 100x100 xc:"srgb(231,214,198)" swatch.png
或者我们可以重新着色原始图像:
convert image.jpg -fill "srgb(231,214,198)" -colorize 100 newimage.png