首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用Matlab中的by边界可以区分不同的边界吗?

利用Matlab中的by边界可以区分不同的边界吗?
EN

Stack Overflow用户
提问于 2013-09-23 19:33:00
回答 1查看 818关注 0票数 0

我有一个灰度图像,其中有黑色,灰色和白色区域,我要做的是找出每个边界的长度和位置。函数to边界工作得很好,但是我想问是否有一种方法来区分不同的边界,例如,是否有一种方法将黑/灰、白/灰和黑/白的边界分别分组。

提前感谢您的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-24 11:08:02

bwboundaries自动将图像转换为二进制,因此无法直接找到白色/灰色的边界。

从您的图像创建三个二进制图像:

代码语言:javascript
复制
I1 = I>0; %both white/grey are 1, black is 0
I2 = I==gvalue; %grey = 1, rest 0
I3 = I==wvalue; %white = 1, rest 0

然后,如果为这些图像取BW边界(称为B1, B2, B3),您将得到如下非常简单的示例:

从这一点(我希望)直观地看到,黑色和白色之间的边界,不包括任何灰色的边界,都是在B1和B3 (右手侧图像)的交汇处找到的,等等。

如何有效地定位这些交叉口是另一回事,而且也可能取决于你是否知道你的图像的性质--例如,白色和灰色物体通常是分开的,重叠的--是否可能有一个灰色物体完全被白色包围,等等。最基本的情况是,您可以遍历所找到的各种边界,并使用intersect和/或setdiff。一个问题是,用这种方法,B2/B3中的边界应该是白色/灰色的边界被一个像素互相抵消,所以我找到了一个非常简化的情况的方法是:

代码语言:javascript
复制
%Determine the grey/black and white/black intersections:
B_gb = intersect(B1{1},B2{1},'rows');
B_wb = intersect(B1{1},B3{1},'rows');

%Set the white/grey intersection using setdiff and one of the boundaries we just found
B_gw = setdiff(B2{1},B_gb,'rows');

对于较大规模的情况,我建议首先确定哪些边界(如果有的话)在三个边界集中的任意两个中完全复制。例如,如果您有一个与任何灰色区域不重叠的黑色背景下的白色区域,就会出现这种情况。

看看你的实际图像,另一种选择是,在获得了三个二值图像后,使用像精明这样的边缘查找器。但是,这不会给出单个边界段的长度。

所有三种产品的BW1 = edge(I1,'canny'); %等

然后,三组边(w/b、g/b、w/g)可通过以下方法找到:

所有三种产品的GB = BW2&BW3; %等

由于这些只是BW图像,所以可以使用以下方法提取绘图位置:

[y x] = find(GB); %和重复

最终结果:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18967320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档