【发布时间】:2013-01-03 14:54:04
【问题描述】:
我是 Matlab 和图像处理的新手。我正在努力在这样的图像中分离背景和前景
我有数百张这样的图片,找到here。通过反复试验,我发现了一个阈值(在 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 的像素坐标? 我必须迭代
r1和c1的每个坐标,并检查它们是否出现在r2 c2和r3 c3中以检查它是否是一个共同点。但这将非常昂贵。 这可以在没有循环的情况下实现?-
如果我以某种方式想出了
[commonR commonC]和commonR和commonC之类的共同点5000 X 1,那么要访问图像I的这个背景像素,我必须先访问@987654339 @ 然后commonC然后访问图片I喜欢I(commonR(i,1),commonC(i,1))
那也太贵了。所以我的问题是这可以在没有循环的情况下完成。
任何帮助将不胜感激。
我得到了@Science_Fiction 答案的解决方案
只是详细说明他/她的答案
我用过
mask = I(:,:,1) < 150 & I(:,:,2) > 150 & I(:,:,3) > 150;
【问题讨论】:
标签: image matlab image-processing