delete extra lines in image

时间:2017-10-12 09:57:47

标签: algorithm opencv image-processing

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.

enter image description here

3 个答案:

答案 0 :(得分:1)

一个选项是计算梯度(例如Sobel)并避免在梯度幅度显着的情况下进行积累。

在@Paul的评论之后,看到阈值水平对计算平均值的影响将会很有趣。

enter image description here

答案 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

enter image description here

尝试更改0.05并查看您的想法。

这将告诉您掩码中有多少像素为白色。它依赖于像素亮度之和除以像素数的平均值,并且知道所有像素都是01

convert mask.png -format "%[fx:int(mean*w*h)]" info:
6155

这会使所有蒙版像素变黑。它的工作原理是加载石头和面具,翻转面具然后,在每个像素位置,选择两个图像的较暗 - 所以它将选择黑色到处面具是白色的,它将选择其他地方的石头:< / p>

convert stone.jpg \( mask.png -negate \) -compose darken -composite nolines.png

enter image description here

答案 2 :(得分:0)

在ImageMagick中,如果使像素被忽略为透明,则可以使用-scale 1x1!获得所有非透明像素的平均值。例如,从上面的两张图片中可以看出:

enter image description here

enter image description here

首先将遮罩放入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

enter image description here

或者我们可以重新着色原始图像:

convert image.jpg -fill "srgb(231,214,198)" -colorize 100 newimage.png

enter image description here