Как найти область пересечения между 2 границами в Matlab? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть 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 голосов
/ 14 февраля 2019

с использованием polyshape работал как @Cris Luengo предложил

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...