2016-06-08 2 views
2

이미지와 이미지의 영역 경계를 얻습니다. 예를 들어, 논리적 인 유형의 마스크가 있는데 경계 값은 1이고 다른 픽셀의 경우 값은 0입니다. 테두리로 분할 된 영역에 레이블을 지정하고 세그먼트를 구분하고 레이블을 지정하는 방법을 모르겠습니다. 영역을 연속 경계로 사용합니다.이미지의 영역 경계가 주어지면 이미지 분할을 수행합니다.

경계는 다음과 같습니다 : 위의 그림과 함께

0 0 0 1 0 0 0 1 0 0 
0 0 1 0 0 0 0 1 0 0 
1 1 0 1 0 0 0 1 0 0 
0 0 0 0 1 0 1 0 0 0 

이 확인 될 것 4 개 지역이있을 것입니다.

답변

4

이미지 처리 도구 상자의 bwlabel 기능은 바이너리 마스크에서 0이 아닌 픽셀의 각 연속 영역에 라벨을 지정하는 데 사용해야하는 이상적인 기능입니다. 그러나 픽셀에서 이것을 수행하려면 1로 설정된 "경계"픽셀로 구분 된 픽셀을 사용해야합니다. 따라서 바이너리 마스크의 역함수를 사용하면 간단히 이진 마스크의 역함수를 사용하여 0이 아닌 픽셀. 또한 정의에 따라 영역은 4 픽셀 연결을 사용하여 구분됩니다. bwlabel은 기본적으로 연속 영역을 검색 할 때 8 픽셀 연결을 사용합니다. 즉, N, NE, E, SE, S, SW, W 및 NW 방향을 찾습니다. 수동 마스크 변수 L에 저장된 가정하면 N, E, S 및 W.

의 방향으로 보이는 4 픽셀 연결을 지정하고 싶을 것이다, 단순히 수행

labels = bwlabel(~L, 4); 

labels 출력은 각 픽셀의 멤버쉽을 알려주는 맵입니다. 동일한 멤버십의 지역은 해당 픽셀이 동일한 그룹에 속한다는 것을 알려줍니다.

귀하의 예제를 사용하여, 우리는 얻을 : 제로의

>> L = [0 0 0 1 0 0 0 1 0 0 
     0 0 1 0 0 0 0 1 0 0 
     1 1 0 1 0 0 0 1 0 0 
     0 0 0 0 1 0 1 0 0 0]; 
>> labels = bwlabel(~L, 4) 

labels = 

    1  1  1  0  3  3  3  0  4  4 
    1  1  0  3  3  3  3  0  4  4 
    0  0  2  0  3  3  3  0  4  4 
    2  2  2  2  0  3  0  4  4  4 

각각의 섬은 동일한 ID에 속하는 픽셀이 같은 섬 또는 지역에 속하는 고유 ID가 있습니다. bwlabel을 사용하고 싶지 않고 첫 번째 원칙에서이 작업을 수행하려면 깊이 우선 검색을 사용하여 이전 구성 요소를 참조하여 연결된 구성 요소 영역을 찾으십시오. How to find all connected components in a binary image in Matlab?. 이것은 효율적인 코드가 아니므로 교육 및 연구 목적으로 만 사용해야합니다. 빠른 기능이며 잘 테스트되었으므로 bwlabel을 사용하는 것이 좋습니다. 또한 코드를 수정하여 8 픽셀 연결을 검색하지 않고 4 픽셀 연결 만 검색해야합니다. 코드를 사용하기 전에 입력 값을 반전해야합니다.

+0

답변 해 주셔서 감사합니다. 반면, 내 질문에 연결되어있는 구성 요소에 0이 아닌 1로 레이블을 지정하는 것입니다. 따라서이 예제에서는 4 개의 영역에 대해 4 개의 레이블이 있어야합니다. 나는 재귀 적으로 이것을 해결할 수 있다고 생각하지만 어떻게 생겼는지는 확신 할 수 없다. 너는 어떤 생각을 가지고 있니? – user3919259

+0

이미지의 역변환에 대해서도 동일한 절차를 수행하십시오. 그래서'~ L' 함수를 호출하십시오. 또한 4 픽셀 연결을 지정해야합니다. 이 방법은 1의 값이 0이 아닌 픽셀을 분리하는 동안 0 인 값은 관심있는 픽셀이됩니다. 이게 니가 찾고있는거야? 이 경우 내 대답을 편집 해 드리겠습니다. 사실, 네 지역에 네가 있다고 판단 할 때 네가 옳은 대답이라고 믿는다. – rayryeng

+0

@ user3919259 귀하의 의견을 토대로 내 게시물을 편집했습니다. 나는 이것이 당신이 원하는 것이라고 믿습니다. 행운을 빕니다. – rayryeng

관련 문제