我是 Matlab 和图像处理的新手。我正在努力在这样的图像中分离背景和前景
我有数百张这样的图片,在这里找到。通过反复试验,我发现了一个阈值(在 RGB 空间中):红色层始终小于 150,而绿色和蓝色层在背景所在的位置大于 150。
所以如果我的 RGB 图像是I
和我的r
,g
和b
图层是
redMatrix = I(:,:,1);
greenMatrix = I(:,:,2);
blueMatrix = I(:,:,3);
通过查找红色、绿色和蓝色值大于或小于 150 的坐标,我可以获得背景的坐标,例如
[r1 c1] = find(redMatrix < 150);
[r2 c2] = find(greenMatrix > 150);
[r3 c3] = find(blueMatrix > 150);
现在我得到了数千个像素的坐标r1,c1,r2,c2,r3 and c3
。
我的问题:
如何找到共同值,例如红色小于 150 且绿色和蓝色大于 150 的像素坐标?我必须迭代 and 的每个坐标
r1
并c1
检查它们是否出现在r2 c2
并r3 c3
检查它是否是一个共同点。但这将非常昂贵。 这可以在没有循环的情况下实现吗?如果不知何故我想出了像
[commonR commonC]
andcommonR
和commonC
两者都是有序的共同点5000 X 1
,那么要访问 Image 的这个背景像素I
,我必须先访问commonR
然后commonC
再访问I
图像I(commonR(i,1),commonC(i,1))
那也很贵。所以我的问题是这可以在没有循环的情况下完成。
任何帮助,将不胜感激。
我得到了@Science_Fiction 答案的解决方案
只是详细说明他/她的答案
我用了
mask = I(:,:,1) < 150 & I(:,:,2) > 150 & I(:,:,3) > 150;