У меня есть 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.
Как я могу правильно получить это, не только для этого примера, но также, если красный объект был произвольной границей объекта, а не просто прямоугольной формы?