화소 연결성

컴퓨터비전/영상처리 2014. 10. 9. 23:04

각각의 화소에 대한 연결성은 어떻게 표시해야 할까?

이진영상으로 아래 그림과 같은 영상이 들어왔다고 했을때


                [그림1 이진영상]


                 [그림2 4-연결성]


                 [그림3 8-연결성]


연결요소를 찾아 번호를 붙이려면 범람채움(flood fill)알고리즘을 사용한다. 

아래 제시된 코드는 4연결성 flood-fill 알고리즘이다.

만약 8-연결성 flood-fill 알고리즘으로 바꾸려면 flood_fill4함수에 대각선 4방향을 추가하여 8번 호출하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
Flood fill(4-연결성 버전)
입력 : 이진영상 b(j,i), 0≤j≤M-1, 0≤i≤N-1
출력 : 번호를 매긴 영상 I(j,i), 0≤j≤M-1, 0≤i≤N-1
*/
 
b를 I로 복사한다. 이때 0은 0, 1은 -1로 복사 // -1은 아직 번호를 안붙였음을 의미
I의 탐색 경계 설정(이미지 크기), j = 0, j = M-1, i = 0, i = N-1인 화소를 0으로 설정
 
label = 1;
for(j=1 to M-2)
  for(i=1 to N-2)
     if(I(j,i) == -1) { // 번호를 아직 안붙였을 때
        flood_fill4(I, j, i, label);
        label++;
     }
    
    
// 4-연결성 flood-fill 함수
function flood_fill4(l, j, i, label) {
   if(l(j,i) == -1) { // 번호를 안붙인 화소이면
     l(j, i) = label;
     flood_fill(l, j, i-1, label); // left    
     flood_fill(l, j, i+1, label); // right
     flood_fill(l, j-1, i, label); // top
     flood_fill(l, j+1, i, label); // bottom
    }
}
 


출처 : 컴퓨터비전(오일석)

'컴퓨터비전/영상처리' 카테고리의 다른 글

bilateral filter  (0) 2014.10.10
영상처리의 기본연산  (0) 2014.10.10
이진영상  (0) 2014.10.09
히스토그램  (0) 2014.10.09
영상처리란 무엇인가?  (0) 2014.10.09