如何在Matlab中找到2个边界之间的相交区域?

时间:2019-02-13 21:22:34

标签: matlab image-processing

我有2个对象,然后在Matlab中使用以下代码计算相交区域:

rect1=im2double(rgb2gray(imread('rect1.png')));
obj1=im2double(rgb2gray(imread('obj1.png')));

[Br, Lr, Nr]=bwboundaries(rect1);
rect1boundary=Br{1};
plot(rect1boundary(:,2), rect1boundary(:,1), '.r'); hold on
[Bo, Lo, No]=bwboundaries(obj1);
obj1boundary=Bo{1};
plot(obj1boundary(:,2), obj1boundary(:,1), '.c')


xv=obj1boundary(:,1); yv=obj1boundary(:,2); 
xq=rect1boundary(:,1); yq=rect1boundary(:,2);
[in,on] = inpolygon(xq, yq, xv, yv);
rect_areain = polyarea(xq(in), yq(in) );
rect_area=polyarea(xq,yq );

输出显示rect_areain是13167,而rect_area是83076。这没有意义,因为看起来原始矩形中大约一半的区域与蓝色多边形重叠(绿色区域下面)。

我希望rect_areain大约是40000。

不仅对于本示例,而且如果红色的对象是对象的任意边界,而不仅仅是矩形,我如何才能正确地获得它?

1 个答案:

答案 0 :(得分:0)

使用polyshape就像@Cris Luengo建议的那样