Удалить перекрывающиеся MSER-Matlab

Метод deteMSERFeatures выдает несколько msers, которые перекрываются. Есть ли способ удалить перекрывающиеся регионы? Спасибо

1 ответ

В FileExchange есть реализация, которая позволяет извлекать построенную область под эллипсом.

Я кратко рассмотрел его, и вам, возможно, придется немного его отрегулировать или использовать его немного в стиле фанк:

I = imread('cameraman.tif');
regions = detectMSERFeatures(I);

imshow(I)
hold on;
plot(regions);

[~,idx] = sort(sum(regions.Axes,2),'descend');

sortedAxes = regions.Axes(idx,:)/2; %division for later use in ellipseMatrix
sortedLocations = regions.Location(idx,:);
sortedOrientations = rad2deg(regions.Orientation(idx,:)); %degree for later use in ellipseMatrix

Эллипс

Теперь, когда регионы отсортированы в соответствии с суммой осей, которая более или менее пропорциональна размеру, который они занимают, вы можете перебирать их и использовать код из FileExchange для получения их соответствующих двоичных карт. Вам придется изменить код, чтобы он не возвращал изображение вместе с ним, но это должно быть довольно просто. Один пример того, как это назвать:

i=1;
x0 = sortedLocations(i,1);
y0 = sortedLocations(i,2);
a = sortedAxes(i,1);
b = sortedAxes(i,2);
theta = sortedOrientations(i);

I2 = ellipseMatrix(x0,y0,a,b,theta,I',128,128,2)';


figure;
subplot(1,2,1);
imshow(I2);

subplot(1,2,2);
imshow(I2);
hold on;
plot(regions);

Первый Эллипс

Если вы сделаете это для оставшихся эллипсов меньшего размера (при условии, что вы настроили метод, чтобы не включать содержимое изображения в возвращаемые значения), и сравните размеры пересечений довольно легко с размером меньшего эллипса:

intersection = EllipseMap1 & EllipseMap2;
sizeOfIntersection = sum(intersetion(:));
sizeOfSmallerEllipse = sum(EllipseMap2(:));

Это не очень хороший подход, но он должен помочь.

Другие вопросы по тегам