我有一个图像,几乎平滑的背景和一些额外的线条。我想将图像从RGB色彩空间转换为LAB色彩空间,然后平均像素的“L”部分。在图像中删除多余的线条
但在转换之前我想删除多余的行或者在某种程度上忽略平均“L”部分中的行像素。有没有任何算法来做到这一点?
下面是我有的图像的一个例子。
我有一个图像,几乎平滑的背景和一些额外的线条。我想将图像从RGB色彩空间转换为LAB色彩空间,然后平均像素的“L”部分。在图像中删除多余的线条
但在转换之前我想删除多余的行或者在某种程度上忽略平均“L”部分中的行像素。有没有任何算法来做到这一点?
下面是我有的图像的一个例子。
我使用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
实验与改变0.05
看看你怎么看。
这将告诉你有多少像素在面具是白色的。它依赖于像素亮度的像素的数量,并知道的所有像素划分的平均值为总和要么0
或1
:
convert mask.png -format "%[fx:int(mean*w*h)]" info:
6155
这将变黑的所有掩蔽像素。它通过加载石头和面具,颠倒面具,然后在每个像素位置选择两个图像中较暗的一个 - 所以它会在任何地方选择黑色,面具是白色的,并且它会在其他地方选择石头:
convert stone.jpg \(mask.png -negate \) -compose darken -composite nolines.png
你能解释更多关于算法吗?我将在opencv中编写算法。 – mohammad
我可以试试。你正在努力的步骤是哪一步?顺便尝试在您的问题中添加“OpenCV”标签。 –
在ImageMagick的,如果您的像素被忽略透明,你可以使用进制的1x1得到所有非透明像素的平均值!例如,从上面的两个图像:
所以首先把掩模到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
你到底想删除你到底要保留什么呢? (请不要回复“额外的线条”。) –
正如你所看到的,背景中有主色。还有一些形状被看作线条(我的意思是暗色像素)。我必须删除这些较暗的部分。 – mohammad
请注意,多余的线条不一定较暗。我想删除主色以外的像素。 – mohammad