2016-12-08 1 views
0

을 제거하면 detectMSERFeatures 메소드가 중복되는 여러 msers를 생성합니다. 겹치는 영역을 제거하는 방법이 있습니까? 감사합니다overlapping MSER-matlab

+0

실제 영역은 픽셀 목록으로 제공됩니다. MSERRegions 객체의 Location 및 Axes 속성에 의해 설명 된 타원 사이에 겹침이 발생한다는 것을 의미한다고 생각합니까? –

+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

당신은 작은 크기의 나머지 타원 (당신이 반환 값의 이미지 내용을 포함하지 않도록하는 방법을 조정 한 가정)이 작업을 수행하는 경우, 그것은 좋은 방법이 아니다

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

하지만 트릭을 수행해야하고, 작은 타원의 크기로 아주 쉽게 교차의 크기를 비교합니다.