2016-07-12 2 views
0

두 개의 연결된 구성 요소가있는 이진 이미지가 있습니다. 둘 다 상당히 수평이고 하나는 이미지의 상단에 있고 다른 하나는 하단에 있습니다. 내가 할 필요가있는 것은 중력에 대한 가장 낮은 y 값을 갖는 컴포넌트를 취함으로써 (또는 적어도 내가 생각하기에 좋은 방법 인)하고 싶은 최상위 컴포넌트만을 추출하는 것입니다 (MATLAB은 Java를 사용하여 이미지를 표시하기 때문에, 원점은 왼쪽 상단에 있음) 다른 구성 요소를 지우십시오. 지금까지 regionprops을 사용하여 중 심도가 가장 낮은 y 값을 가진 영역을 찾을 수 있었지만 거기에서 원하는 성분으로 다시 바이너리 이미지를 얻는 방법을 모르겠습니다.centroid에서 y 값이 가장 낮은 영역을 얻는 방법

bwconncomp, labelmatrixismember이 유용하지만 잘 사용하는 방법에 대해서는 잘 모르겠습니다.

+0

보관할 구성 요소에 대해 'PixelIdxList''가 있습니까? – beaker

+0

두 구성 요소 모두에 대해 'PixelIdxList'가 있습니다. 'regionprops '의 정보를 사용하여 내가 원하는'PixelIdxList '를 선택하는 방법을 모르겠습니다. – nbingo

답변

1

이것은 내가 방금 만든 해결책이지만, 더 좋거나 더 우아한 것이 있다면 그것에 대해 알고 싶습니다!

P. filtered은 내 이미지입니다

connComp = bwconncomp(filtered); 

props = regionprops(filtered, 'Centroid'); 

justTop = zeros(size(filtered,1), size(filtered,2)); 
if props(1).Centroid(2) > props(2).Centroid(2) 
    justTop(connComp.PixelIdxList{2}) = 1; 
else 
    justTop(connComp.PixelIdxList{1}) = 1; 
end` 
+0

두 개 이상의 영역이있는 경우 (예 : 노이즈 등으로 인해이 방법은 실패합니다. 이를 처리하기 위해서는 아마도 감지 된 영역의 영역을 확인하고 가장 큰 두 영역 만 비교해야 할 것입니다. 그렇지 않으면 이것은 잘 작동합니다! – hbaderts

+0

@hbaderts 감사합니다. 내가 게시 한 이후에 그런 일이 생겨서 그렇게 할 것입니다. 그래도 더 명확하게 해줘서 고마워! – nbingo

+0

도와 드리겠습니다. 여기에 답을 공유해 주셔서 감사 드리며, 앞으로도 같은 문제가있는 사람들을 도울 수 있습니다. – hbaderts

관련 문제