2016-12-08 4 views
0

Метод detectMSERFeatures дает несколько сообщений, которые перекрываются. Есть ли способ удалить перекрывающиеся области? СпасибоУдалить перекрывающиеся MSERs-matlab

+0

Фактические регионы указаны как список пикселей. Я полагаю, вы имеете в виду, что перекрытие происходит между эллипсами, описанными свойствами Location и Axes объекта MSERRegions? –

+0

да. Я хочу удалить все эллипсы, содержащиеся в большом эллипсе. –

+0

Содержится или перекрывается? Что делать, если небольшие участки двух областей перекрываются? –

ответ

0

Существует реализация, которая позволяет вам получить построенную область под эллипсом в 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 

Ellipses

с регионами теперь сортируется по сумме оси, которые более или менее пропорциональны размеру, который они занимают, вы можете перебирать их и использовать код из 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); 

First Ellipse

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

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

это не хороший подход, но он должен сделать трюк.