이미지 처리 도구 상자의 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이 아닌 1로 레이블을 지정하는 것입니다. 따라서이 예제에서는 4 개의 영역에 대해 4 개의 레이블이 있어야합니다. 나는 재귀 적으로 이것을 해결할 수 있다고 생각하지만 어떻게 생겼는지는 확신 할 수 없다. 너는 어떤 생각을 가지고 있니? – user3919259
이미지의 역변환에 대해서도 동일한 절차를 수행하십시오. 그래서'~ L' 함수를 호출하십시오. 또한 4 픽셀 연결을 지정해야합니다. 이 방법은 1의 값이 0이 아닌 픽셀을 분리하는 동안 0 인 값은 관심있는 픽셀이됩니다. 이게 니가 찾고있는거야? 이 경우 내 대답을 편집 해 드리겠습니다. 사실, 네 지역에 네가 있다고 판단 할 때 네가 옳은 대답이라고 믿는다. – rayryeng
@ user3919259 귀하의 의견을 토대로 내 게시물을 편집했습니다. 나는 이것이 당신이 원하는 것이라고 믿습니다. 행운을 빕니다. – rayryeng