2017-10-12 130 views
0

我有一个图像,几乎平滑的背景和一些额外的线条。我想将图像从RGB色彩空间转换为LAB色彩空间,然后平均像素的“L”部分。在图像中删除多余的线条

但在转换之前我想删除多余的行或者在某种程度上忽略平均“L”部分中的行像素。有没有任何算法来做到这一点?

下面是我有的图像的一个例子。

enter image description here

+1

你到底想删除你到底要保留什么呢? (请不要回复“额外的线条”。) –

+0

正如你所看到的,背景中有主色。还有一些形状被看作线条(我的意思是暗色像素)。我必须删除这些较暗的部分。 – mohammad

+0

请注意,多余的线条不一定较暗。我想删除主色以外的像素。 – mohammad

回答

1

一种选择是计算梯度(索贝尔例如)和避免做的积累,其中梯度大小是显著。

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

enter image description here

0

我使用ImageMagick的像您的其他问题。

这会给你一个与周围区域相差超过5%的像素的掩码(它是-fx部分中的0.05)。它通过加载石头图像,复制它并模糊副本以消除局部细节。然后计算出原始和模糊复制件之间的绝对差异,如果差异超过5%,否则将它设置为0设置像素1

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 

这将变黑的所有掩蔽像素。它通过加载石头和面具,颠倒面具,然后在每个像素位置选择两个图像中较暗的一个 - 所以它会在任何地方选择黑色,面具是白色的,并且它会在其他地方选择石头:

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

enter image description here

+0

你能解释更多关于算法吗?我将在opencv中编写算法。 – mohammad

+0

我可以试试。你正在努力的步骤是哪一步?顺便尝试在您的问题中添加“OpenCV”标签。 –

0

在ImageMagick的,如果您的像素被忽略透明,你可以使用进制的1x1得到所有非透明像素的平均值!例如,从上面的两个图像:

enter image description here

enter image description here

所以首先把掩模到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