11장 표현과 묘사
개요
제 10장에서 논의한 방법들을 이용해서 영상을 영역들로 분할하고 나면, 그 다음 단계는 대개 분할된 “비가공(raw)” 화소들의 집합을 후속 컴퓨터 처리에 적합한 형태로 표현(represent)하고 묘사(describe)하는 것이다. 영역을 표현하는 데에는 다음의 두 가지 기본적인 선택이 있다: (1) 영역을 그의 외부 특성(경계) 또는 (2) 내부 특성(영역을 구성하는 화소들)으로 표현할 수 있다. 그러나, 표현 방식의 선택은 단지 데이타를 컴퓨터에 쓸모 있게 만드는 작업에 불과하다. 그 다음 작업은 선정된 표현에 기반해서 영역을 묘사하는 것이다. 예를 들어, 영역은 그 경계에 의해 표현될 수 있으며, 경계는 경계의 길이와 오목상(concavity)의 수와 같은 특징들로 묘사될 수 있다.
외부 표현은 모양 특성에 관심이 있을 경우에 선택된다. 내부 표현은 칼라와 질감 같은 영역 속성에 주로 초점이 맞춰져 있을 때 선택된다. 흔히 같은 응용에 두 유형의 표현이 모두 사용된다. 어느 경우든, 묘사자(descriptor)로 선택된 특징들은 크기, 이동, 회전의 변화에 대해 가능한 한 둔감해야 한다. 대체로 이 장에서 논의될 묘사자들은 이 속성들 중 하나 이상을 만족시킨다.
11.1. 배경
9.4절의 논의를 참고해서 S로 영상 화소들의 부분집합을 나타내자. 두 화소 p와 q는, 만일 둘 사이에 S의 화소들만으로 구성되는 경로가 존재한다면, 둘이 S에서 연결(connected)되어 있다고 말한다. S의 임의의 화소 p에 대해, 그에 연결된 S 안의 화소들의 집합을 연결 성분(connected component)이라고 부른다. 만일 이들이 하나의 연결 성분만을 가지면, S를 연결 집합(connected set)이라고 부른다. 어떤 영상의 화소들의 부분집합 R은, 만일 R이 연결 집합(connected set)이면, 그 영상의 영역(region)이라고 불린다.
영역의 경계(boundary, border 또는 contour)는 그 영역에 있지 않은 하나 이상의 이웃을 갖는 그 영역의 화소 집합이다. 9.12절의 논의에서와 같이 경계 또는 영역의 점들을 전경 점들이라고 부른다; 그렇지 않은 것들은 배경 점들이다. 먼저 우리는 이진 영상에 관심이 있으므로, 전경 점들을 1, 배경 점들을 0으로 표현한다. 이 장에서 나중에 화소들이 그레이스케일 또는 다중 스펙트럼 값을 갖는 걸 허용한다. 앞의 개념을 이용해서, 구멍(hole)을 연결된 전경 화소 경계로 둘러싸인 배경 영역으로 정의한다.
[측주] 영상처리 응용에서 연결 성분들이 보통 한 성분만을 가지므로, 연결 성분이란 용어는 일반적으로 한 영역을 가리키는데 사용된다.
앞 문단에서 주어진 정의로부터, 경계는 어떤 연결된 점들의 집합이다. 경계에 있는 점들이 시계 방향 또는 반시계 방향의 시퀀스를 형성하면 정렬(ordered)되어 있다고 말한다. 경계 점 각각이 4-인접하지 않은 딱 두 개의 1값의 이웃들을 갖는다면, 이 경계가 최소 연결(minimally connected)되어 있다고 말한다. 내부 점(interior point)은 경계 점을 제외한, 영역 안에 있는 점으로 정의된다.
이 장의 일부 함수들은 입력으로 이진 또는 수치 배열을 받는다. 1.7.7절의 논의로부터, MATLAB의 이진 영상이 구체적으로 0과 1의 논리 배열을 가리킴을 기억한다. 수치 배열은 표 1.1에 정의된 수치 클래스(uint8, double 등)가 모두 가능하다. 또한 수치 배열 f가 함수 logical(f)에 의해 논리 배열로 전환된다는 것도 기억하라. 이 함수는 f의 모든 0값을 0(거짓), 모든 다른 값을 1(참)로 설정한다. 이진 영상 전용으로 설계된 툴박스 함수들은 모든 비이진(non-binary) 입력에 대해 이 전환을 자동으로 수행한다. 이진 입력 전용 함수들 간의 구분을 시도하려고 번거로운 표기를 도입하기 보다는, 맥락을 특정 함수가 받아들이는 입력 유형에 관한 가이드로 삼는 게 더 낫다. 궁금할 때는 그 함수의 도움말 페이지를 참고한다. 일반적으로 결과의 클래스에 관해서는 명확히 한다.
11.1.1 영역 및 그들의 경계를 추출하기 위한 함수들
9.4절에의 논의와 같이, 툴박스 함수 bwlabel은 이진 영상의 모든 연결 성분(영역)을 계산한다. 편의상 그 문법을 여기에 반복한다:
[L, num] = bwlabel(f, conn)
여기서 f는 입력 영상, conn은 원하는 연결성(4 또는 8(디폴트)), num은 발견된 연결 성분 수, L은 각 연결 성분에 1부터 num까지의 고유한 정수를 배정하는 레이블 매트릭스이다. 그림 9.19의 논의로부터, 사용된 연결성의 값이 검출된 영역 수에 영향을 줄 수 있음을 기억하라.
다음 문법의 함수 bwperim
...
은 이진 영상 g를 반환하는데, f의 모든 영역의 둘레(경계) 화소들만을 포함한다. IPT의 대부분의 함수들과 달리, 이 특정 함수의 파라미터 conn은 배경의 연결성을 규정한다: 4(디폴트) 또는 8. 따라서, 4-연결 영역 경계를 구하려면, conn을 8로 지정한다. 역으로, 8-연결 경계는 conn을 4로 지정해서 구한다. 11.1.2절에서 논의되는 함수 imfill도 이 특성을 가진다.
bwperim이 경계를 포함하는 이진 영상을 만드는 반면, boundaries 함수는 이진 영상 f의 모든 영역의 경계의 실제 좌표들을 추출한다. 그 문법은
...
이며, 여기서 conn은 경계 자체에 대한 것이며, 값은 4 또는 8(디폴트)이다. 파라미터 options는 ‘holes'와 ’noholes' 값을 가질 수 있다. 첫째 번 옵션을 사용하면 영역 및 구멍의 경계들을 추출한다. 내재된 영역을 포함하는 영역들(툴박스에서 부모와 자식 영역들로 부른다)의 경계도 추출된다. 둘째 번 옵션은 영역들과 그들의 자식들의 경계만을 추출한다. 만일 f와 conn의 값만이 파라미터로 포함되어 있으면, ‘holes'가 options의 디폴트로 사용된다. 만일 호출에 f만 사용하면, 8과 'holes'가 디폴트로 사용된다. 영역들이 B에 먼저 나열되며, 구멍들은 그 다음이다(아래의 세 번째 문법은 영역과 구멍의 수를 찾는데 사용된다).
[측주] p. 553. 다른 문법 형태는 bwboundaries의 도움말 페이지를 참고한다.
출력 B는 P x 1 쎌 배열로서, 여기서 P는 객체(그리고 구멍--만일 그렇게 명시되었다면) 수이다. 쎌 배열의 각 쎌은 np x 2개 매트릭스를 포함하는데, 그 행들은 경계 화소들의 행 및 열 좌표들이며, np는 해당 영역의 경계 화소 수이다. 각 경계의 좌표들은 시계 방향으로 정렬되며, 경계의 마지막 점은 첫 점과 같아서, 닫힌 경계를 제공한다. B가 쎌 배열임을 명심하고, 함수 flipud를 사용해서 경계 B{k}의 답사 순서를 시계 방향에서 반시계 방향으로 바꾸자(거꾸로도):
...
[측주] p. 553. 쎌 배열에 관한 설명은 1.7.8절을 참고한다.
[측주] 함수 flipud에 관한 설명은 4.11.6절을 참고한다.
boundaries 함수의 또 다른 유용한 문법은
...
이다. 이 경우 L은 f의 각 요소(그게 영역이든 구멍이든)를 서로 다른 정수로 레이블링하는 레이블 매트릭스(f와 같은 크기)이다. 배경 화소는 0으로 레이블링된다. 영역과 구멍 수는 max(L(:))에 의해 제공된다.
끝으로, 문법
...
은 발견된 영역 수(NR)와, 부모-자식-구멍 종속성을 포함하는 성긴 논리 매트릭스 A를 반환한다; 즉, B{k}로 둘러싸인 가장 가까운 경계는
...
으로 주어지며, 마찬가지로 B{k}를 에워싸는 가장 가까운 경계는
...
으로 주어진다(매트릭스 A는 예제 11.1에서 더 자세히 설명된다). B의 처음 NR개 엔트리는 영역들이며, 나머지 엔트리들(만일 있으면)은 구멍들이다. 구멍 수는 numel(B) - NR로 계산된다.
[측주] 함수 find는 4.2.2절에 설명되어 있다.
[측주] cat 연산자의 설명에 관해서는 6.1.1절을 참고한다. 또한 예제 11.13도 본다.
관심 경계들을 포함하는 이진 영상을 만들고 표시할 수 있다면 좋을 것이다. np x 2 좌표 배열 형태의 이진 영상 b가 주어졌을 때(여기서 np는 앞에서와 같이 점들의 수), 다음 주문형 함수(리스팅은 부록 C를 참고):
...
는 b의 좌표들에서는 1이고 배경은 0인 M x N 크기의 이진 영상 g를 만든다. 보통 M = size(f, 1) 그리고 N = size(f, 2)이며, 여기서 f는 b가 얻어진 영상이다. 이렇게 해서 g와 f가 공간적으로 정합된다. 만일 M과 N이 생략되면, g는 경계를 에워싸되 원래 좌표 값들은 유지하는 최소 이진 영상이다.
boundaries 함수가 여러 경계를 찾는다면, 쎌 배열 B의 요소들을 이어서, 함수 bound2im용 모든 좌표들을 단일 좌표 배열 b로 가져올 수 있다:
...
여기서 1은 첫 (수직) 차원 방향으로의 접합을 나타낸다. 다음 예제는 boundaries 함수의 결과의 시각화를 도와주는 bound2im의 사용법을 예시한다.
예제 11.1: boundaries 함수와 bound2im을 사용하기.
그림 11.1(a)의 영상 f는 영역, 구멍, 자식, 자식 안의 구멍을 포함하고 있다. 명령
...
는 디폴트 8-연결성을 이용해서 영역들의 경계를 추출한다. 명령
...
는 두 개의 경계를 찾았음을 나타낸다. 그림 11.1(b)가 이 경계들을 포함하는 이진 영상을 보여준다; 이 영상은 다음 명령들로 얻었다:
...
[그림 11.1] (a) 두 개의 영역(1값 화소들)과 두 개의 구멍을 포함하는 원래 배열. (b) 함수 boundaries를 사용해서 추출되고 함수 bound2im을 사용해서 영상으로 표시된 영역들의 경계. (c) 영역들과 가장 안쪽 구멍의 경계들.
명령
...
는 디폴트인 8-연결성으로 모든 영역과 구멍의 경계를 추출한다. 추출된 전체 영역과 구멍 경계 수는
...
으로 제공되며, 구멍 수는
...
이다. 영역들 그리고/또는 구멍들의 경계를 표시하기 위해서 함수 bound2im을 L과 함께 사용할 수 있다. 예를 들어,
...
은 영역들의 경계와 마지막 구멍의 경계의 1을 포함하는 이진 영상이다. 그러면, 명령
...
은 그림 11.1(c)가 보여주듯이 번호가 붙은 경계들을 표시한다. 만일, 그 대신에, 모든 번호 붙은 경계를 표시하기를 원했다면, 명령
...
을 사용했을 것이다. 더 큰 영상들에 대해서는, 경계들을 칼라-코딩하면 시각화에 도움이 된다(bwboundaries의 도움말 페이지가 이와 관련된 예제들을 보여준다).
끝으로, 매트릭스 A를 잠깐 들여다보자. 예를 들어 B{1}으로 둘러싸인 경계들의 수는
...
이며, B{1}을 둘러싸는 경계들의 수는 B{1}이 최외곽 경계이므로, 예상대로
...
이다. A의 요소들은
...
이다. 성긴 매트릭스의 표현에서는, 이것은 요소 (3, 1), (4, 2), (2, 3)이 1임을 의미한다; 다른 모든 요소들을 0이다. 전체 매트릭스를 봄으로써 이를 알 수 있다:
>> full(A)...
열 k를 아래로 읽을 때, 행 n의 1은 B{k}에 의해 둘러싸인 가장 가까운 경계가 경계 번호 n임을 나타낸다. 행 1을 읽을 때, 열 m의 1은 B{k}를 둘러싸는 가장 가까운 경계가 경계 m임을 나타낸다. 이 표기가 영역 경계와 구멍 경계를 구분하지 않음을 유념한다. 예를 들어, 경계 2(A의 둘째 열)는, 우리가 알고 있기로, 가장 안쪽 구멍의 경계인 경계 4(A의 넷째 행)를 에워싼다.
11.1.2 이 장에서 사용되는 추가적인 몇 가지 MATLAB과 IPT 함수들
함수 imfill은 9.5.2절에서 간략하게 언급했다. 이 함수는 이진 영상 입력과 밝기 영상 입력에 대해서 다르게 수행하므로, 이 절에서 표기를 명확하게 하기 위해서, fB와 fI로 이진 영상과 밝기 영상을 각각 나타내기로 한다. 출력이 이진 영상이면 gB로 표기하고; 아니면 g로 표기한다. 문법
[명령]
이, locations에 규정된 점들로부터 시작해서, 입력 이진 영상 fB의 배경 화소들에 대해flood-fill(홍수 채우기) 연산을 수행한다(즉, 배경 화소들을 1로 바꾼다). 이 파라미터는 벡터가 될 수 있으며(L은 위치 수), 이 경우 시작 좌표 위치들의 선형 인덱스(1.7.8절을 참고한다)들을 포함한다. 또한 파라미터 locations는 nLx2 매트릭스가 될 수 있으며, 이 경우 각 행은 fB의 시작 위치들 중 하나에 대한 2-D 좌표를 포함한다. 함수 bwperim에서 그렇듯이, 파라미터 conn은 배경 화소들에 사용될 연결성을 규정한다: 4(디폴트) 또는 8. 만일 location과 conn이 모두 입력 인자에서 생략되면, 명령
gB = imfill(fB)
는 이진 영상 fB를 화면에 표시해서, 사용자가 마우스를 사용해서 시작 위치들을 선택하게 한다. 왼쪽 마우스 버튼을 클릭해서 점들을 추가한다. Backspace 또는 Delete를 누르면 앞서 선택된 점이 제거된다. 쉬프트-클릭, 또는 우측-클릭, 또는 더블-클릭은 최종 점을 선택하고, 채우기(fill) 연산을 시작한다. Retrun을 누르면 점을 추가하지 않고 선택을 끝낸다.
다음 문법을 사용하면
[명령]
입력 이진 영상의 구멍들을 채운다. 파라미터 conn은 위에서와 같다.
문법
...
은 입력 밝기 영상 fI의 구멍들을 채운다. 이 문법에서 구멍은 더 밝은 화소들로 둘러싸인 어두운 화소 영역이며, 파라미터 'holes'는 사용되지 않는다.
함수 find는 특정 객체를 구성하는 화소들의 좌표 벡터를 반환하기 위해서, bwlabel과 함께 사용될 수 있다. 예를 들어,
[gB, num] = bwlabel (fB)
가 둘 이상의 연결 영역 (즉, num>1)을 제공한다면, 다음 명령을 사용해서 두 번째 영역의 좌표들을 얻는다.
[명령]
앞에서 언급했듯이, 영역 또는 경계의 2-D 좌표들은 이 장에서는 배열의 형태로 정리되며, 여기서 각 열은 좌표 쌍, 는 영역 또는 경계 점들의 수이다. 어떤 경우에는 이 배열들을 정렬할 필요가 있다. 함수 sortrows를 이 목적에 사용할 수 있다:
[명령]
이 함수는 S의 행들을 오름차순으로 정렬한다. 인자 S는 매트릭스 또는 열 벡터이어야 한다. 이 장에서는, sortrows는 배열로만 사용된다. 만일 몇몇 행들의 첫 번째 좌표가 같다면, 두 번째 좌표의 오름차순으로 정렬된다. S의 행들을 정렬해서 중복 행들을 제거하려면, 다음 문법의 함수 unique를 사용한다:
[명령]
여기서, z는 중복 행이 없는 정렬된 배열이고, m과 n은 z = S(m, :)과 S = z(n, :)에서와 같다. 예를 들어, 만일 S = [1 2; 6 5; 1 2; 4 3]이면, z = [ 1 2; 4 3; 6 5], m = [3; 4; 2], n = [1; 3; 1; 2]이다. z가 오름차순으로 정렬되며, m은 원래 배열의 어떤 행들이 보존되었는가를 나타낸다.
배열의 행들을 상, 하, 옆으로 이동(shift)시킬 필요가 있으면, 함수 circshift를 사용한다:
[명령]
여기서, ud는 S를 상향 또는 하향 이동시키는 요소들의 수이다. ud가 양이면, 이동은 하향이며; 아니면 상향이다. 마찬가지로, lr이 양이면, 배열은 우측으로 lr 요소만큼 이동되고; 아니면 좌측으로 이동된다. 상향과 하향 이동만이 필요하면, 더 간단한 문법
[명령]
을 사용할 수 있다. S가 영상이면, circshift는 영상이 두루마리처럼 돌아가는(wrap around) 익숙한 스크롤링(상향과 하향) 또는 패닝(우측과 좌측)에 지나지 않는다.
11.1.3 몇 가지 기본적인 유틸리티 M-함수
영역과 경계 간에 전환하고, 경계점들을 인접한 좌표 체인으로 정렬시키고, 표현과 묘사를 간략히 하기 위해서 경계를 서브샘플링 하는 것 같은 작업들은, 이 장에서 자주 사용되는 대표적인 프로세스들이다. 다음 주문형 유틸리티 M-함수들이 이들 목적을 위해 사용된다. 이 장의 중심 주제를 벗어나지 않도록 하기 위해서, 이들 함수의 문법만을 검토한다. 각각의 주문형 함수에 대한 문서화된 코드는 부록 C에 수록되어 있다. 앞에서 언급했듯이, 경계는 각 행이 2-D 좌표쌍을 나타내는 배열로 표현된다.
함수 bound2eight은 문법
[명령]
을 가지며, 경계 b에서 4-연결되는 데 필요한 화소들을 제거해서 경계가 8-연결되게 한다. 입력 b는 시계 방향 또는 반시계 방향으로 순서대로 정렬된 화소들의 닫혀 있고, 연결되어 있는 집합이어야 한다. 같은 조건들이 함수 bound2four에 적용된다:
[명령]
이 함수는 대각선 연결이 있는 곳에 새로운 경계 화소를 삽입해서 화소들이 4-연결 되는 출력 경계를 제공한다.
함수
...
은 (단일) 경계 b를 줄 간격이 gridsep 화소인 그리드로 서브샘플링한다. 출력 s는 b 보다 작은 수의 점들을 갖는 경계이며, 이 점 수는 gridsep의 값에 의해 결정된다. 출력 su는 좌표들의 변이가 1이 되도록 스케일링된 경계 점들의 집합이다. 이것은 11.2.1절의 논의에서와 같이, 체인 코드를 사용하는 경계 코딩에 유용하다. 앞의 세 함수들에서 b의 점들은 시계 또는 반시계 방향으로 정렬되어야 한다(출력은 입력과 같은 순서이다). 만일 b의 점들이 순서대로 정렬되어 있지 않으면(그러나 완전 연결된 경계의 점들임), 다음 명령들을 사용해서 b를 시계 방향 시퀀스로 전환할 수 있다:
...
즉, 경계를 이진 영상으로 전환하고, boundaries 함수를 사용해서 경계를 시계 방향 시퀀스로 추출한다. 만일 반시계 방향 시퀀스가 필요하면, 앞서 언급했듯이 b = flipud(b)로 놓는다.
경계가 bsubsamp로 서브샘플링될 때, 그 점들은 연결이 더 이상 유지되지 않는다. 이들을 다음과 같이 해서 다시 연결할 수 있다.
[명령]
여기서, s(:, 1)과 s(:, 2)는 각각 서브샘플링된 경계의 수평 및 수직 좌표들이다. s의 점들은 시계 또는 반시계 방향으로 정렬되어 있어야 한다. 출력 z의 행들은 s의 점들을 직선 선분들로 연결해서 만든 연결된 경계의 좌표들이다(아래의 함수 intline을 참고한다). 출력 z의 좌표들은 s의 좌표들과 같은 방향이다.
함수 connectpoly는 s가 얻어진 원래 경계 b보다 일반적으로 묘사하기에 더 쉬운, 완전 연결된 다각형 경계를 만드는데 유용하다. 함수 connectpoly는 또한 11.2.3절에서 논의되는 함수 im2minperpoly 같은 다각형의 꼭지점들만 생성하는 함수들과 함께 사용될 때도 유용하다.
두 점을 지나는 직선의 정수 좌표들을 계산하는 것은 경계를 다룰 때 기본 툴이 된다. 툴박스 함수 intline가 이 목적에 잘 맞는다. 그 문법은
[명령]
이며, 여기서, (x1, y1), (x2, y2)는 연결될 두 점의 정수 좌표들이다. 출력 x와 y는 두 점을 연결하는 직선의 정수 및 좌표들을 포함하는 열벡터들이다.
[측주] intline은 문서화되어 있지 않은 IPT 유틸리티 함수이다. 코드는 부록 C에 수록되어 있다.
11.2 표현
이 장의 시작 부에서 언급한 대로, 제 10장에서 논의한 분할 기법들은 일반적으로 경계화소들 또는 영역에 포함된 화소들 형태의 비가공 데이타를 제공한다. 이들 데이타가 때때로 묘사자를 얻는데 직접 사용되기도 하지만(영역의 질감을 계산할 때와 같이), 실제에서는 묘사자를 계산하는데 훨씬 더 유용한 표현으로 데이타를 간결화하는 방책을 사용한다. 이 절에서 다양한 표현 방법의 구현에 관해서 논의한다.
11.2.1 체인 코드
체인 코드(chain code)는 경계를 특정 길이와 방향의 연결된 직선 선분 시퀀스로 표현하는 데 사용된다. 보통 이 표현은 선분들의 4 또는 8 연결성에 기반한다. 각 선분의 방향은 그림 11.2(a)와 (b)에 나타낸 것들과 같이 번호화 방식을 사용해서 코드화된다. 이 방식에 기반하는 체인 코드를 프리먼 체인 코드(Freeman chain code)라고 부른다.
경계의 체인 코드는 시작점에 따라 달라진다. 그러나, 코드를 원형 방향 번호 시퀀스로 다뤄서 결과 번호 시퀀스가 최소 길이 정수를 형성하도록 시작점을 재정의한다면, 시작점에 의해 코드를 정규화할 수 있다. 코드 자체 대신에 체인 코드의 차분(difference)을 이용해서 회전에 대해 정규화[그림 11.2(a)와 (b)의 코드들에 대해 또는 증분으로]할 수 있다. 이 차분은 코드의 두 인접 요소를 분리하는 방향 변화(그림 11.2에서 반시계 방향으로)의 횟수를 세어서 구한다. 예를 들면, 4-방향 체인 코드 10103322의 1차 차분은 3133030이다. 코드를 원형 시퀀스로 다루면, 차분의 첫 요소는 체인의 마지막 요소와 첫 번 째 요소 간의 변이를 이용해서 계산된다; 앞의 코드에 대해 결과는 33133030이 된다. 임의의 회전 각도에 대한 정규화는 장축(major axis)(11.3.2절 참고) 또는 그의 주성분 벡터(principal-component vector)(11.5절의 끝 참고)와 같은 어떤 우세한 특징을 기준으로 경계의 방향을 맞춤으로써 달성된다.
[그림]
그림 11.2 (a) 4-방향 체인 코드와 (b) 8-방향 체인 코드에 대한 방향 번호.
다음 문법을 갖는 fchcode 함수는
[명령]
배열 b에 저장된 정렬된 경계점들로 구성된 크기의 집합에 대한 프리먼 체인 코드를 계산한다. 출력 c는 다음 필드들을 갖는 구조체이며, 괄호 속 숫자들은 배열 크기를 나타낸다:
c.fcc = 프리먼 체인 코드 ()
c.diff = 코드 c.fcc의 1차 차분 ()
c.mm = 최소 크기의 정수 ()
c.diffmm = 코드 c.mm의 1차 차분 ()
c.x0y0 = 코드의 시작 좌표 ()
파라미터 conn은 코드의 연결성을 지정한다; 그 값은 4 또는 8(디폴트)이다. 값 4는 경계에 대각선 변이가 없을 때만 유효하다. 파라미터 dir는 출력 코드의 방향을 지정한다. 만일 ‘same'으로 지정되면, 코드는 b의 점들과 방향이 같다. ’reverse'를 사용하면, 코드가 반대 방향으로 놓이게 된다. 디폴트는 ‘same'이다. 따라서, c = fchcode(b, conn)라고 쓰면 디폴트 방향을 사용하며, c = fchcode(b)는 디폴트 연결성 및 방향을 사용한다.
예제 11.2 프리먼 체인 코드와 몇 가지 변형.
■ 그림 11.3(a)는 반사(specular) 노이즈에 묻힌 원형 획의 570x570 크기의 영상 f를 보여준다. 이 예제의 목표는 객체 바깥 경계에 대한 체인 코드와 1차 차분을 구하는 것이다. 그림 11.2(a)를 보면 객체에 붙어 있는 노이즈 조각들로 인해서 경계가 매우 불규칙적으로 되어서 객체의 전체적인 모양을 제대로 묘사하지 못할 게 분명해 보인다. 노이즈 낀 경계를 다룰 때는 스무딩을 꼭 거친다. 그림 11.3(b)는 평균 마스크를 사용한 결과 g를 보여준다:
>>[명령]
그런 후, 문턱처리에 의해 그림 11.3(c)의 이진 영상을 얻었다.
>>[명령]
gB의 (바깥) 경계는 앞 절에서 논의한 boundaries 함수를 이용해서 계산되었다:
>>[명령]
11.1.1절의 예시에서와 같이, 우리는 가장 긴 경계에 관심이 있다(그림 11.3(c)의 내부 점도 경계를 갖고 있다):
>>[명령]
그림 11.3(d)의 경계 영상은 다음 명령들로 생성했다:
>>[명령]
b의 체인 코드를 직접 얻으려 하면 경계의 전체적인 모양을 나타내는데 필요하지 않은 작은 변화들을 갖는 긴 시퀀스를 얻게 될 것이다. 그래서, 체인 코드 처리에서 항상 그렇게 하듯이, 앞 절에서 논의한 bsubsamp 함수를 이용해서 경계를 서브샘플링한다:
>>[명령]
[측주] p. 563. 함수 문법 D = cellfun('fname', C)는 함수 'fname'을 쎌 배열 C의 모든 요소에 적용하고, 그 결과를 double 배열 D에 반환한다.
함수 문법 [C, I] = max(A)는 벡터 A의 최대 값(또는 매트릭스 A의 열들의 최대값들)을 찾아서, 최대값(들)은 행 벡터 C에, 그리고 최대값(들)의 인덱스들은 벡터 I에 반환한다.
[그림]
그림 11.3 (a) 노이즈 낀 영상. (b) 평균 마스크로 스무드된 영상. (c) 문턱처리된 영상. (d) 이진 영상의 경계. (e) 서브샘플링된 경계. (f) 연결된 (e)의 점들.
격자 간격은 영상 폭의 약 10%를 사용했다. 결과 점들을 영상으로 표시할 수 있다(그림 11.3(e)):
>>[명령]
또는 연결 시퀀스(그림 11.2(f))로 표시하려면, 명령들
>>[명령]
을 사용한다. 체인 코딩의 목적을 위해 그림 11.3(d)가 아니라 이 표현을 사용하는 이점은 두 그림을 비교해 보면 명확하다. 체인 코드는 스케일링된 시퀀스 su로부터 얻어진다:
>>[명령]
이 명령은 다음 출력들을 만든다:
>>[명령]
c.fcc, 그림 11.3(f), c.x0y0를 조사해 보면, 코드가 그림의 왼쪽에서 시작해서 원래 경계의 좌표들과 같은 방향인 시계 방향으로 진행하는 것을 알 수 있다.
■
11.2.2 최단 둘레 다각형을 이용하는 다각형 근사화
디지털 경계는 다각형에 의해 임의의 정확도로 근사화될 수 있다. 닫힌 경계에 대해서, 이 근사화는 다각형의 변 수가 경계의 점 수와 같고, 각 꼭지점이 경계의 점과 일치할 때 정확하게 된다. 다각형 근사화의 목표는 가능한 최소한의 꼭지점 수를 사용해서 주어진 경계의 모양의 정수(essence)를 포착하는 것이다. 이 문제는 일반적으로 간단하지 않으며, 시간-소모적 반복 검색으로 돌변할 수 있다. 그렇지만, 영상처리 작업에 적합한 적당한 복잡도의 근사화 기법들이 있다. 이들 중 가장 강력한 것들 중 하나는 다음 논의에서 정의되는 것과 같이 경계를 최단 둘레 다각형(minimum-perimeter polygon, MPP)으로 표현한다.
기초
MPP를 계산하는 알고리듬을 만들기 위한 직관적으로 매력적인 접근법은, 그림 11.4(b)에서와 같이 경계(그림 11.4(a))를 이어진 쎌들의 집합으로 포위하는 것이다. 경계를 고무줄로 생각해 보자. 고무줄은 수축 가능하므로, 쎌들에 의해 정의되는 바운딩(bounding, 가두는) 영역의 안쪽과 바깥쪽 벽들에 의해 제한될 것이다. 궁극적으로, 그림 11.4(c)가 보여주듯이, 이 수축이 쎌 띠가 에워싸는 영역의 둘레에 선을 긋는 최단 둘레 다각형의 모양을 만든다. 이 그림에서 MPP의 모든 꼭지점이 쎌들의 안쪽 아니면 바깥쪽 벽의 코너들과 일치함을 주목한다.
[그림]
그림 11.4 (a) 객체 경계(흑색 곡선). (b) 쎌들(회색)에 의해 포위된 경계. (c) 경계가 수축할 수 있게 허용해서 얻은 최단 둘레 다각형. (c)의 다각형의 꼭지점들은 회색 영역의 안쪽(inner) 및 바깥쪽(outer) 벽들의 코너들에 의해 생성된다.
쎌들의 크기가 다각형 근사화의 정확도를 결정한다. 극단적인 경우에, 만일 각 (정사각형) 쎌의 크기가 경계의 디지털 표현에서의 한 화소에 해당한다면, MPP의 각 꼭지점과 원래 경계의 최근접 점 간의 최대 오차는 √2d가 될 것이다. 여기서 d는 화소 간 가능한 최소 거리(즉, 원래 샘플링 그리드의 해상도에 의해 설정되는 화소 간 거리)이다. 이 오차는 다각형 근사화의 각 쎌이 샘플링된 경계의 해당 화소를 중심으로 하게 만들면 반으로 줄어들 수 있다. 그 목적은 주어진 응용에서 수용 가능한 가장 큰 쎌 크기를 사용하는 것이며, 그래서 꼭지점 수가 가장 작은 MPP들을 만드는 것이다. 이 절에서의 목표는 이 MPP 꼭지점들을 찾아내기 위한 절차를 체계화하고 구현하는 것이다.
방금 설명된 쎌 접근법은 원래 경계에 의해 둘러싸인 객체의 모양을, 그림 11.4(b)의 쎌들의 안쪽 벽을 테두리 선으로 하는 영역의 모양으로 축소한다. 그림 11.5(a)가 이 모양을 진한 회색으로 보여준다. 에지가 4-연결 직선 선분들로 구성됨을 알 수 있다. 이 에지를 반시계 방향으로 따라간다고 하자. 이때 만나는 각각의 꺾어지는 곳은 볼록 아니면 오목 꼭지점일 것이며, 꼭지점의 각도는 4-연결 에지의 내각이다. 그림 11.5(b)에 볼록 꼭지점들은 백색, 오목 꼭지점들은 흑색 점들로 표시되어 있다. 이들이 쎌들의 안쪽 벽의 꼭지점들이며, 안쪽 벽의 모든 꼭지점들이, 바깥 벽에 상응하는 “거울(mirror)” 꼭지점을 가짐을 주목한다. 거울 꼭지점은 꼭지점의 대각선 반대쪽에 위치한다. 그림 11.5(c)가 모든 오목 꼭지점들의 거울들을 보여주며, 참고를 위해 그림 11.4(c)의 MPP가 중첩되어 있다. MPP의 꼭지점들이 안쪽 벽의 볼록 꼭지점들(백색 점) 아니면 바깥쪽 벽의 오목 꼭지점들의 거울들(흑색 점)과 일치함을 주목한다. 조금만 생각해보면 안쪽 벽의 볼록 꼭지점과 바깥쪽 벽의 오목 꼭지점만이 MPP의 꼭지점이 될 수 있음을 알 수 있을 것이다. 따라서, 우리의 알고리듬은 이 꼭지점들에만 초점을 맞추면 된다.
[그림 11.5] (a) 쎌들(그림 11.4 참고)로 원래 경계를 에워싼 결과 영역(진한 회색). (b) 진한 회색 영역의 경계를 반시계 방향으로 따라가서 얻어진 볼록(백색 점들)과 오목(흑색 점들) 꼭지점들. (c) 바운딩 영역의 바깥쪽 벽의 대각선 거울 위치로 쫓겨난 오목 꼭지점들(흑색 점들). 참고를 위해 MPP(흑색 곡선)를 중첩시켰다.
[측주] p. 566
볼록 꼭지점은 범위가 0° < θ < 180°인 각도 θ를 정의하는 세 점 쌍의 중앙 점이다; 마찬가지로, 오목 꼭지점의 각도는 범위 180° < θ < 360°에 있다. 각도 180°는 축퇴 꼭지점(직선)을 정의하며, MPP의 꼭지점이 될 수 없다.
MPP를 찾아내기 위한 알고리듬
경계를 둘러싸는 쎌들의 집합을 쎌 복합체(cell complex)라고 부른다. 우리가 고려하는 경계들은 자체 교차하지 않는다고 가정하며, 이는 단순 연결 쎌 복합체의 조건이다. 이 가정에 기반하고, 백색(W)과 흑색(B)으로 각각 볼록과 거울 반사 오목(mirrored concave)을 나타내서, 다음과 같은 관찰 사항들을 기술한다:
1. 단순 연결 쎌 복합체에 의해 바운딩되는 MPP는 자체 교차하지 않는다.
2. MPP의 모든 볼록 꼭지점은 W 꼭지점이나, 경계의 모든 W 꼭지점이 MPP의 꼭지점인 것은 아니다.
3. MPP의 모든 거울 반사 오목 꼭지점은 B 꼭지점이나, 경계의 모든 B 꼭지점이 MPP의 꼭지점인 것은 아니다.
4. 모든 B 꼭지점은 MPP 위 또는 바깥에 있으며, 모든 W 꼭지점은 MPP 위 또는 안에 있다.
5. 쎌 복합체에 포함된 꼭지점 시퀀스의 맨 위, 맨 왼쪽 꼭지점은 항상 MPP의 W 꼭지점이다.
이 주장들은 공식적으로 증명될 수 있다(Sklansky et al. [1972]; Sloboda et al.
[1998]; Klette와 Rosenfeld [2004]). 그러나, 우리 목적에 대해 이들이 옳다는 것은 분명하므로, 여기서는 증명에 관해 생각하지 않겠다. 그림 11.5의 진한 회색 영역의 꼭지점들의 각도들과 달리, MPP의 꼭지점들에 의해 지탱되는 각도들은 반드시 90°의 배수일 필요가 없다.
다음의 논의에서, 우리는 세 점 쌍의 방향을 계산할 필요가 있다. 세 점 쌍 (a, b, c)를 고려하고, 이 점들의 좌표들을 a = (xa, ya), b = (xb, yb), c = (xc, yc)라고 놓자. 이 점들을 다음과 같이 매트릭스의 행으로 배치하면,
...
매트릭스 분석으로부터 다음과 같은 결론이 나온다.
... > 0만일 (a, b, c)가 반시계 방향 시퀀스이면
= 0만일 점들이 공선상에 있으면
< 0만일 (a, b, c)가 시계 방향 시퀀스이면
여기서 det(A)는 A의 행렬식이며, 시계 방향 또는 반시계 방향 이동은 우수 좌표계(right-handed coordinate system)를 따른다. 예를 들어, 우수 영상 좌표계(그림 1.2)(원점이 좌·상단에 있고, 양 x-축은 수직 아래로 향하고, 양 y-축은 수평으로 우측으로 향한다)를 사용하면, a = (3, 4), b = (2, 3), c = (3, 2) 시퀀스는 반시계 방향에 있으며, det(A) > 0이 될 것이다.
[측주] 그림 1.2에 정의된 좌표계를 가정하면, 반시계 방향으로 다각형의 경계를 따라갈 때, 진행 방향의 우측에 있는 모든 점은 다각형 바깥에 있다. 진행 방향의 좌측에 있는 모든 점은 다각형 안에 있다.
다음 정의
sgn(a, b, c) ≡ det(A)
를 사용하면, 반시계 방향 시퀀스에 대해 sgn(a, b, c) > 0, 시계 방향 시퀀스에 대해 sgn(a, b, c) < 0, 점들이 공선상에 있을 때 sgn(a, b, c) = 0이다. 기하적으로 sgn(a, b, c) > 0은 점 c가 점 a와 b를 지나는 직선의 양 측(positive side)에 놓여 있음을 의미한다; sgn(a, b, c) < 0은 점 c가 그 선의 음 측에 놓여 있음을 의미한다; sgn(a, b, c) = 0은 점 c가 그 선 위에 있음을 나타낸다.
MPP 알고리듬을 위한 데이타를 준비하기 위해서, 행들이 각 꼭지점의 좌표들인 목록을 만들고, 꼭지점이 W 또는 B인지를 기록한다. 오목 꼭지점들은 그림 11.5(c)에서와 같이 거울에 비춰져야 하며; 꼭지점들은 정렬되어 있어야 하며; 꼭지점 시퀀스의 첫 꼭지점은 맨 위, 맨 왼쪽 꼭지점이어야 한다. 우리는 다섯 번째 속성으로부터 이것이 MPP의 W 꼭지점임을 알고 있다. V0로 이 꼭지점을 나타내자. 꼭지점들이 반시계 방향으로 배열되어 있다고 가정한다. MPP들을 찾아내기 위한 알고리듬은 두 개의 “크롤러(crawler)" 점을 사용한다: 백색 크롤러(WC)와 흑색 크롤러(BC). Wc는 볼록(W) 꼭지점들을 따라 크롤(crawl)하며, Bc는 거울에 비춰진 오목(B) 꼭지점들을 따라 크롤한다. 이들 두 크롤러 점들, 발견된 마지막 MPP 꼭지점, 조사중인 꼭지점이 이 절차를 구현하는데 필요한 전부이다.
[측주] 꼭지점들의 목록을 정렬하는 절차에 관해서는 11.1.3절을 참고한다.
Wc = Bc = V0로 놓고 시작하자. 그 다음, 알고리듬의 모든 단계에서, VL로는 발견된 마지막 MPP 꼭지점을 나타내고, VK로는 조사 중인 현재 꼭지점을 나타내자. VL, Vk, 두 크롤러 점들 간에 세 조건이 존재할 수 있다:
(a)Vk는 (VL, Wc) 쌍을 지나는 선의 양 측에 놓인다; 즉, sgn(V ,W ,V ) > 0.
(b)Vk는 (VL, Wc) 쌍을 지나는 선의 음 측에 놓이거나 그와 공선상에 있다; 즉, sgn(V ,W ,V ) ≤ 0. 동시에, Vk는 (VL, Bc)를 지나는 선의 양 측에 놓이거나, 그와 공선상에 있다; 즉, sgn(V ,W ,V ) ≥ 0.
(c) Vk는 (VL, BC) 쌍을 지나는 선의 음 측에 놓인다; 즉, sgn(V ,W ,V ) <0.
만일 조건 (a)가 성립하면, 그 다음 MPP 꼭지점은 Vc이며 VL = Wc로 놓는다; 그런 후 Wc = Bc = VL로 설전해서 알고리듬을 다시 초기화하고, VL 후의 다음 꼭지점을 갖고 계속한다.
만일 조건 (b)가 성립하면, Vk는 후보 MPP 꼭지점이 된다. 이 경우, 만일 Vk가 볼록(즉, W 꼭지점)이면 Wc = Vk로 설정한다; 아니면, Bc = Vk로 설정하고 목록의 다음 꼭지점을 갖고 계속한다.
만일 조건 (c)가 성립하면, 다음 MPP 꼭지점은 Bc이며 VL = Bc로 놓는다; 그런 후 Wc = Bc = VL로 설정해서 알고리듬을 재 초기화하고, VL 후의 다음 꼭지점을 갖고 계속한다.
알고리듬은 첫 꼭지점에 다시 도달해서 다각형의 모든 꼭지점을 처리했으면 종료된다. 이 알고리듬이 단순 연결 쎌 복합체에 의해 에워싸인 다각형의 모든 MPP 꼭지점을 찾아낸다는 것이 증명되었다(Sloboda et al. [1998]; Klette와 Rosenfeld [2004]).
MPP 알고리듬 구현에 사용되는 M-함수들
경계를 포위하는 쎌 집합체를 얻기 위한 첫 단계로서 10.4.3절에서 소개한 함수 qtdecomp를 사용한다. 여느 때처럼, 관심 영역 B가 1로, 배경이 0으로 구성되어 있다고 본다. 우리는 다음 문법에 관심이 있다:
[명령]
여기서, Q는 사분 트리를 포함하는 성긴(sparse) 매트릭스이다. 만일 Q(k, m)가 0이 아니면, (k, m)은 분해에서 블록의 좌·상단 코너이며 블록의 크기는 Q(k, m)이다.
블록은 블록 요소들의 최대값에서 최소값을 빼서 threshold보다 크면 분열된다. 입력 영상의 클래스에 관계없이 이 파라미터의 값은 0과 1사이로 지정된다. 앞의 문법을 이용하면, 함수 qtdecomp는 mindim보다 작거나 maxdim보다 큰 블록을 만들지 않을 것이다. maxdim보다 큰 블록은 문턱치 조건을 만족하지 않더라도 분열된다. 비율 maxdim/mindim은 2의 멱승이어야 한다. 두 값 중 하나만 지정되면(대괄호 없이), 이 함수는 이 값을 mindim으로 가정한다. 이 절에서는 이 형태로 사용된다.
영상 B의 크기는 비율 K/mindim이 2의 정수 승이 되는 KK이어야 한다. K가 가질 수 있는 가장 작은 값이 B의 최대 크기임이 분명하다. 크기 요건은 일반적으로 함수 padarray에 ‘post' 옵션을 사용해서 B를 0으로 패딩하면 충족된다. 예를 들어, B의 크기가 화소라고 하고, mindim = 3으로 설정하자. 파라미터 K는 K>=max(size(B))와 K/mindim=2^p, 또는 K=mindim*(2^p) 조건들을 만족시켜야 한다. p에 대해서 풀면 p=8이고, 이 경우 K=768이다.
사분 트리 분해에서 블록 값들을 얻기 위해서 10.4.3절에서 논의한 함수 qtgetblk를 사용한다:
[명령]
여기서, vals는 B의 사분 트리 분해의 mindimmindim 블록들의 값들을 포함하는 배열이고, Q는 qtdecomp에 의해 반환되는 성긴 매트릭스이다. 파라미터 r과 c는 블록들의 좌측 상단 코너의 행과 열의 좌표들을 포함하는 벡터들이다.
예제 11.3: 영역의 경계를 에워싸는 쎌 복합체를 얻기.
■ 그림 11.6(a)의 영상을 참고하고, mindim = 2로 지정한다고 하자. 이 영상은 크기가 32x32이며, 지정된 mindim 값에 대해 추가 패딩이 필요하지 않다는 것은 쉽게 확인된다. 이 영역의 4-연결 경계는 다음 명령으로 얻어졌다:
...
그림 11.6(b)가 결과를 보여준다. g가 여전히 영상이며, 이제 4-연결 경계만을 포함하고 있음을 주목한다.
[측주] p. 569.
11.1.1절의 논의에서, 4-연결 경계들을 얻으려면 배경에 대해 8-연결성을 지정한다는 것을 기억하라.
그림 11.6(c)는 g의 사분 트리 분해를 보여주는데, 다음 명령으로 얻었다:
...
여기서 0은 블록들이, 그들이 포함하는 혼재된 1과 0과 무관하게, 지정된 최소 크기 로 분열되도록 문턱치로 사용되었다(이러한 각 블록은 0부터 4개 사이의 화소를 가질 수 있다). 보다 큰 크기의 블록들이 많이 있지만, 이들이 모두 동질적(homogeneous)임을 주목한다.
그 다음, 크기가 인 모든 블록의 값들과 좌측 상단 코너의 좌표들을 추출하기 위해서 qtgetblk(g, Q, 2)를 사용했다. 그런 후, 값이 1인 화소를 적어도 하나를 포함하는 모든 블록을 qtsetblk를 사용해서 1로 채웠다. 우리가 gF로 표기하는 이 결과를 그림 11.6(d)가 보여준다. 이 영상의 진한 쎌들이 쎌 복합체를 구성한다.
그림 11.6(e)는 쎌 복합체로 바운딩된 영역을 회색으로 보여준다. 이 영역은 다음 명령으로 얻어졌다.
>>[명령]
우리는 이 영역의 4-연결 경계에 관심이 있고, 다음 명령들에 의해 얻는다.
>>[명령]
그림 11.6(f)가 결과를 보여준다. 이 그림의 방향 번호는 경계의 프리먼 체인 코드의 일부이며, 함수 fchcode로 얻었다.
■
[그림 11.6] (a) 원래 영상(작은 정사각형은 개별 화소를 나타낸다). (b)4-연결 경계. (c) 크기가 2(x2 화소)인 정사각형 블록들을 사용한 사분 트리 분해. (d) 값이 1인 요소를 하나라도 포함한 모든 2x2 크기 블록을 1로 채운 결과. (e) (d)의 안쪽 영역. (f)boundaries 함수를 사용해서 얻은 4-연결 경계 점들. 표시된 번호는 체인 코드의 일부이다.
때로는 어떤 점이 다각형 경계의 안 또는 바깥에 놓여있는지를 결정할 필요가 있다. 함수 inpolygon가 이 목적에 사용될 수 있다:
[명령]
여기서, X와 Y는 시험 대상 점들의 및 좌표들을 포함하는 벡터들이고, xv와 yv는 시계 또는 반시계 방향의 시퀀스로 배열된 다각형 꼭지점들의 및 의 좌표들을 포함하는 벡터들이다. 출력 IN은 조사되는 점 수와 길이가 같은 벡터이다. 그 값들은 다각형의 내부 또는 경계에 있는 점들에 대해서는 1, 경계 바깥 점들에 대해서는 0이다.
MPP 계산용 M-함수
MPP 알고리듬은 주문형 함수 minperpoly로 구현되고, 그 코드는 부록 C에 수록되어 있다. 문법은
[명령]
이며, 여기서 f는 단일 영역 또는 경계를 포함하는 입력 이진 영상이고, cellsize는 경계를 포위하는데 사용되는 쎌 복합체의 정사각 쎌들의 크기를 규정한다. 열 벡터 X와 Y는 각각 MPP 꼭지점들의 및 좌표들을 포함한다. 출력 R은 쎌 복합체로 둘러싸인 영역의 이진 영상이다(예: 그림 11.6(e)).
예제 11.4: 함수 im2minperpoly 사용하기.
■ 그림 11.7(a)는 단풍잎의 이진 영상 f를 보여주며, 그림 11.7(b)는 다음 명령으로 얻은 경계이다.
>>[명령]
이것은 이 예제에서 다양한 MPP들이 비교되는 기준 경계이다. 그림 11.7(c)는 다음 명령들에 의한 결과이다.
>>[명령]
비슷하게, 그림 11.7(d)부터 (f)는 3, 4, 8 크기의 정사각형 쎌들을 사용해서 얻은 MPP들를 보여준다. 보다 큰 쎌들을 사용했을 때 가는 줄기는 해상도가 더 낮기 때문에 없어진다. 잎의 두 번째 주요 모양 특성은 세 개의 주엽 집합이다. 이들은 그림 11.7(f)가 보여주듯이 크기가 8인 쎌들에 대해서도 적당히 잘 보존된다. 쎌 크기를 10 그리고 16으로 더 증가시켜도 그림 11.8(a)과 (b)가 보여주듯이 이 특징은 여전히 보존된다. 그러나, 그림 11.8(c)와 (d)가 보여주듯이 20 이상의 값일 때는 이 특성이 상실된다.
■
[그림]
그림 11.7 (a) 크기가 312 x 312 화소인 원 영상. (b) 4-연결 경계. (c) 크기가 2인 정사각형 바운딩 쎌을 이용해서 얻은 MPP. (d)~(f) 각각 크기가 3, 4, 8인 정사각형 쎌을 이용해서 얻은 MPP들.
[그림]
그림 11.8 더 큰 크기 (a) 10, (b) 16, (c) 20, (d) 32의 바운딩 정사각형 쎌로 얻은 MPP들.
11.2.3 시그니처
시그니처(signature, 서명)는 경계에 대한 1차원 함수 표현이며, 다양한 방법으로 생성할 수 있다. 가장 간단한 방법 중 하나는 그림 11.9에서와 같이 내부 점(예: 중심점)에서부터 경계까지의 거리를 각도의 함수로 그리는 것이다. 그러나, 시그니처가 어떻게 생성되든 기본 아이디어는 경계 표현을 원래의 2-D 경계보다 묘사하기에 더 쉬운 1-D 함수로 줄이는 것이다. 원점에서 경계까지 잇는 벡터가 경계와 한번만 교차해서 각도 증가에 따라 유일한 값을 갖는 함수가 보장될 때만, 시그니처를 사용해야 한다. 자체 교차점을 갖는 경계들과, (일반적으로) 깊고 좁은 오목상 또는 얇고 긴 돌출을 갖는 경계들을 배제시킨다.
방금 설명한 접근 방법으로 생성된 시그니처는 이동에 대해 불변이지만, 회전과 스케일링에 영향을 받는다. 회전에 대한 정규화는 시그니처를 생성할 때 모양의 방향과 무관하게 똑 같은 시작점을 선택하는 방법을 찾음으로써 달성될 수 있다. 이렇게 하기 위한 한 방법은 벡터의 원점에서 가장 멀리 떨어진 점을 시작점으로 선택하는 것이다(11.3.1절 참고). 단, 이 점은 유일하고 각 관심 모양(shape of interest)에 대해 회전 변화에 상당히 독립적이어야 한다.
[그림]
그림 11.9 (a)와 (b) 원형과 정사각형 객체들. (c)와 (d) 각각에 대한 거리-대-각도 시그니처들.
또 다른 방법은 주 고유축(eigen axis)(예제 11.5 참고) 상의 점을 선택하는 것이다. 이 방법은 계산량이 더 많지만, 모든 윤곽점들을 사용해서 고유축들의 방향이 결정되기 때문에 더 견고하다. 또 다른 방법은 경계의 체인 코드를 얻어서 11.1.2절에서 검토한 방법을 사용하는 것이다--단, 이때 회전이 그림 11.1에 정의된 코드 방향들의 이산 각도로 근사화될 수 있다고 가정한다.
두 축에 대한 스케일링이 균일하고, 샘플링이 같은 간격으로 취해진다고 가정할 때, 모양의 크기가 바뀌면 해당 시그니처의 크기 값이 따라서 바뀐다. 이 종속성을 정규화시키는 한 방법은 항상 같은 범위의 값들, 예를 들어 [0, 1]을 스팬(span)하도록 모든 함수들을 스케일링하는 것이다. 이 방법의 주된 장점은 간단하다는 것이지만, 전체 함수들에 대한 스케일링이 단지 최소값과 최대값 두 값에만 기반하기 때문에 잠재적으로 심각한 단점을 갖고 있다. 모양에 노이즈가 낀 경우, 이 노이즈는 객체에 따라 다른 에러 소스가 될 수 있다. 더 견고한 접근 방법은 각 샘플을 시그니처의 분산으로 나누는 것이다--단, 분산은 그림 11.9(a)에서와 같은 0이 아니고 계산을 곤란하게 만들 정도로 작은 값이 아니라고 가정한다. 분산을 사용하면 크기 변화에 반비례하는, 마치 자동 이득 제어가 하는 것 같이 작용하는 가변 스케일링 계수를 생성한다. 어떠한 방법을 사용하든지 기본 아이디어는 파형의 근본 모양을 보존하면서 크기에 대한 종속성을 제거하는 것임을 명심한다.
함수 signature(부록 C 참고)가 경계의 시그니처를 찾아낸다. 그 문법은
[명령]
이며, 여기서 b는 배열로서, 그 행들은 시계 또는 반시계 방향으로 정렬된 경계점들의 x 및 y 좌표들을 포함하고 있다. 입력의 (x0, y0)는 경계까지의 거리가 측정되는 점의 좌표 쌍이다. 만일 x0와 y0가 인자에 포함되지 않으면, signature는 디폴트로 경계의 중심 좌표들을 사용한다. 시그니처의 진폭(즉, (x0, y0)로부터 경계까지의 거리)이 각도의 함수로서 dist에 출력된다. dist와 angle 배열들의 최대 크기는 360 x 1로서, 이는 최대 해상도가 1도임을 나타낸다. 함수 signature의 입력은, 예를 들어 앞에서 검토한 boundaries 함수를 이용해서 얻어진, 한 화소 두께의 경계여야 한다. 앞에서와 같이 경계가 폐곡선이라고 가정한다.
[그림]
그림 11.10 극좌표와 데카르트 좌표 사이의 전환을 수행하기 위해 MATLAB에서 사용하는 축 관례.
함수 signature는 MATLAB 함수 cart2pol을 사용해서 데카르트 좌표를 극좌표로 전환한다. 그 문법은
[명령]
이며, 여기서 X와 Y는 데카르트 점들의 좌표들을 포함하고 있는 벡터들이다. 벡터 THETA와 RHO는 극좌표의 해당 각도와 길이를 포함한다. THETA와 RHO는 X와 Y와 같은 크기를 가진다. 그림 11.10은 좌표 전환을 위해 MATLAB이 사용하는 관례를 보여준다. 이 함수의 MATLAB 좌표 (X, Y)는 영상 좌표 (x, y)와 X = y, Y = -x의 관계가 있음을 유념한다[그림 1.2(a) 참고].
함수 pol2cart는 다음과 같이 다시 데카르트 좌표로 전환하는 데 사용된다:
[명령]
예제 11.6: 시그니처.
■ 그림 11.11(a)와 (b)는 각각 불규칙한 정사각형과 삼각형을 포함하는 두 영상 fsq와 ftr을 보여준다. 그림 11.11(c)는 다음 명령들로 얻은 정사각형의 시그니처를 보여준다.
>>[명령]
비슷한 명령들로 그림 11.11(d)의 플롯을 얻었다. 단순히 두 시그니처의 뚜렷한 피크 수를 세는 것만으로 두 경계의 근본 모양을 구분하기에 충분하다.
■
[그림]
그림 11.11 (a)~(b) 불규칙한 정사각형과 삼각형의 경계들. (c)~(d) 해당 시그니처들.
11.2.4 경계 조각(Boundary Segments)
경계를 조각으로 분해하면 경계의 복잡도가 줄어들며, 일반적으로 묘사 과정을 간단화시킨다. 이 접근 방법은 경계가 모양 정보를 수반하는 하나 이상의 뚜렷한 오목상을 포함할 때 매력적이다. 이 경우 경계로 포위된 영역의 볼록 깍지(convex hull)을 사용하는 방법은 경계의 견고한 분해를 위한 강력한 도구에 해당된다.
임의의 집합 S의 볼록 깍지 H는 S를 포함하는 가장 작은 볼록 집합이다. 집합 차이 H-S를 집합 의 볼록 결핍(convex deficiency)(D)이라고 부른다. 이 개념들이 경계를 의미 있는 조각들로 나누는 데 어떻게 사용되는지를 알아보기 위해서, 객체(집합 )와 그의 볼록 결핍(음영 영역)을 보여주는 그림 11.12(a)를 고려하자. 영역 경계는 의 윤곽선을 따라가면서 볼록 결핍 성분 안으로 진입하거나 그로부터 나오는 천이가 일어나는 점들을 표시해서 나눌 수 있다. 그림 11.12(b)는 이 경우의 결과를 보여준다. 원칙적으로, 이 방식은 영역의 크기와 방향에 대해 독립적이다. 실제 문제에서는, 이 유형의 처리는 “무의미한” 오목상의 수를 줄이기 위해서 일반적으로 과감한 스무딩이 먼저 수행된다. 방금 설명한 방식으로 볼록 깍지를 구하고 경계 분해를 구현하는데 필요한 MATLAB 도구들이 11.4.1절에서 논의되는 함수 regionprops에 포함되어 있다.
[그림]
그림 11.12 (a) 영역 와 그 볼록 결핍(음영). (b) 나뉜 경계.
11.2.5 골격
평탄한 영역의 구조적 모양을 표현하기 위한 중요한 접근 방법은 그를 그래프로 줄이는 것이다. 이 축소는 세선화(thinning; 골격화(skeletonizing)라고도 불림) 알고리듬에 의해 영역의 골격(skeleton)을 얻음으로써 달성될 수 있다.
영역의 골격은 중간축 변환(medial axis transformation, MAT)을 통해서 정의될 수 있다. 경계 를 갖는 영역 의 MAT는 다음과 같다. 의 각 점 에 대해서, 에 있는 가장 가까운 이웃을 찾는다. 만일 가 둘 이상의 그런 이웃을 가진다면, 의 중간축(골격)에 속한다고 말한다.
비록 영역의 MAT가 직관적 개념이기는 하지만, 이 정의를 직접 구현하는 것은 영역의 모든 내부 점에서부터 경계상의 모든 점까지의 거리를 계산해야 하므로 계산상 비용이 많이 든다. 계산 효율을 높이기 위한, 영역의 중간축 표현의 근사화를 시도하는 수많은 알고리듬이 제안되어 왔다.
9.3.4절에서 언급했듯이 IPT는 이진 영상 B의 모든 영역들의 골격을 다음과 같은 문법의 함수 bwmorph를 사용해서 생성한다:
[명령]
이 함수는 객체의 경계 화소들을 제거하지만, 객체들이 떨어지게 하지는 않는다.
예제 11.7: 영역의 골격 계산하기.
■ 그림 11.13(a)는 인간 염색체의 전형적인 모양의 344 x 270 영상 f를 보여준다. 이 영상은 30,000배 배율로 확대된 전자 현미경 영상으로부터 분리되었다. 이 예제의 목표는 염색체의 골격을 계산하는 것이다.
분명히, 이 프로세스의 첫 단계는 쓸모없는 디테일 배경으로부터 염색체를 분리하는 것이다. 한 가지 접근 방법은 영상을 스무딩하고 문턱처리하는 것이다. 그림 11.13(b)가 sig = 15인 25×25 가우스 공간 마스크로 f를 스무딩한 결과를 보여준다:
>>[명령]
그 다음, 스무딩된 영상을 문턱처리한다:
>>[명령]
여기서 문턱처리 량을 50% 증가시키기 위해서 자동 계산된 문턱치 graythresh(g)에 1.5를 곱했다. 이에 대한 추론은, 문턱치를 증가시키면 경계에서 제거되는 데이타 량이 증가되며, 따라서 노이즈를 더 줄인다는 것이다. 그림 11.13(d)의 골격을 다음 명령으로 얻었다.
[그림]
그림 11.13 (a) 분리된 인간 염색체. (b) sig = 15인 25×25 가우스 평균 마스크로 스무딩된 영상. (c) 문턱처리된 영상. (d) 골격. (e) 잔가지 제거를 8회 적용한 후의 골격. (f) 잔가지 제거를 7회 더 적용한 결과.
>>[명령]
골격의 잔가지들이 다음 명령으로 줄어들었다.
>>[명령]
여기서 연산을 8회 반복했으며, 이 경우 이 값은 sig 값의 약 절반과 같다. 몇 개의 작은 잔가지들은 여전히 골격에 남아있다. 그러나, 앞의 함수를 7회 더 적용(sig 값만큼 채우기 위해)해서 그림 11.13(f)의 결과를 얻었으며, 이 결과는 입력에 대한 적당한 골격 표현이다. 경험적으로, 가우스 스무딩 마스크의 sig 값은 잔가지 제거 알고리듬을 적용할 횟수를 선택하기 위한 좋은 지표가 된다.
■
11.3 경계 묘사자
이 절에서는 영역 경계를 다룰 때 유용한 여러 묘사자(descriptor)들을 검토한다. 곧 밝혀지듯이, 이들 중 다수가 영역에도 적용 가능하며, 툴박스의 묘사자들을 그룹으로 나누는 것은 그들의 적용성과 관련해서는 차이가 없다. 그러므로, 여기에 소개하는 개념들의 일부는 11.4절에서 영역 묘사자들을 논의할 때 다시 언급된다.
[측주] 묘사자를 특징으로도 부른다.
11.3.1 몇 가지 간단한 묘사자
경계의 길이는 그의 가장 간단한 묘사자들 중 하나이다. 4-연결 경계의 길이는 1만큼 뺀 경계의 화소 수로 정의된다. 경계가 8-연결되어 있다면, 수직과 수평 이행(transition)을 1로, 대각선 이행을 로 센다.(이 묘사자는 11.4절에서 검토되는 regionprops로 계산될 수 있다.)
11.2.1절에서 소개한 함수 bwperim을 사용해서 영상 f에 포함된 객체들의 경계를 추출한다:
[명령]
여기서 g는 f의 객체들의 경계를 포함하는 이진 영상이다. 우리의 관심사인 2-D 연결성을 위해서 conn은 4-연결 또는 8-연결(디폴트) 중 원하는 연결에 따라 4 또는 8일 수 있다(이 연결성 값들의 해석에 관해서는 예제 11.3의 측주를 참고한다). f의 객체들은 영상 클래스와 일치하는 어떠한 화소 값도 가질 수 있으나, 모든 배경 화소는 0이어야 한다. 정의에 의해, 둘레 화소들은 0이 아니며, 적어도 하나의 0이 아닌 다른 화소와 연결되어 있다.
경계의 지름(diameter)은 가장 멀리 떨어진 두 경계 점 간의 유클리드 거리로 정의된다. 이 점들은 원형 또는 정사각형에서와 같이 항상 유일한 것은 아니나, 만일 지름이 유용한 묘사자가 되려면 가장 멀리 떨어진 점들이 단 한 쌍인 경계에 가장 잘 적용된다고 가정한다. 이 점들을 연결하는 선분을 경계의 장축(major axis)이라고 부른다. 경계의 단축(minor axis)은 장축에 수직이며, 그 길이는 경계와 두 축의 교차점인 바깥쪽 네 점을 지나는 상자가 경계를 완전히 포위하게 하는 선으로 정의된다. 이 상자를 기본 직사각형(basic rectangle)이라 부르고, 장축 대 단축 비를 경계의 이심율(eccentricity)이라고 부른다.
주문형 함수 diameter(리스팅은 부록 C를 참고)는 다음의 문법을 사용해서 경계 또는 영역의 지름, 장축, 단축, 기본 직사각형을 계산한다.
[명령]
여기서 L은 레이블 매트릭스(9.4절)이고 s는 다음 필드들을 갖는 구조체이다:
s.Diameter 스칼라. 경계 또는 영역의 임의의 두 화소 간 최대 거리
s.MajorAxis 2×2 매트릭스. 행들은 경계 또는 영역의 장축의 끝점들의 행과 열 좌표들로 구성.
s.MinorAxis 2×2 매트릭스. 행들은 경계 또는 영역의 단축의 끝점들의 행과 열 좌표들로 구성.
s.BasicRectangle 4×2 매트릭스. 각 행은 기본 직사각형의 꼭지점의 행과 열의 좌표들로 구성.
11.3.2 모양 수
보통 4-방향 프리먼 체인 코드(11.2.1절 참고)에 기반하는 경계의 모양 수(shape number)는 최소 크기의 1차 차분으로 정의된다(Bribiesca와 Guzman[1980], Bribiesca [1981]). 모양 수의 차수(order)는 표현의 자리 수로 정의된다. 그래서, 경계의 모양 수는 11.2.1절에서 논의한 함수 fchcode의 파라미터 c.diffmm으로 제공되며, 모양 수의 차수는 length(c.diffmm)로 제공된다.
[그림]
그림 11.14 모양 수의 생성 단계.
11.2.1절에서 설명했듯이, 4-방향 프리먼 체인 코드는 최소 크기의 정수를 사용함으로써 시작점에 둔감해질 수 있고, 코드의 1차 차분을 사용함으로써 의 정수 배의 회전에도 둔감해질 수 있다. 그래서, 모양 수는 시작점과 의 정수 배의 회전에 둔감하다. 임의의 회전에 대한 정규화에 사용되는 방법은 그림 11.14에 예시되어 있다. 그 절차는 장축에 좌표축의 하나를 정렬하고 나서 회전된 그림에 기반한 4-코드를 추출하는 것이다. x-축은 주문형 함수 x2majoraxis(부록 C 참고)를 사용해서 영역 또는 경계의 장축과 정렬될 수 있다. 이 함수의 문법은 다음과 같다:
...
여기서 A = s.MajorAxis는 함수 diameter에서 오며, B는 입력 (이진) 영상 또는 경계 목록이다. (이전과 같이, 경계가 연결된 폐곡선이라고 가정한다.) 출력 C는 입력과 같은 형태를 가진다(즉, 이진 영상 또는 좌표 시퀀스). 가능한 정수화 오차(round-off error) 때문에, 회전에 의해 끊긴 경계 시퀀스가 될 수 있으므로, 점들을 다시 연결(bwmorph나 connectpoly 등을 사용)하기 위한 후처리가 필요할 수 있다.
모양 수를 계산하는 M-함수를 구현하는 데 필요한 툴들을 이미 검토했다. 그들은 경계를 추출하는 함수 boundaries, 장축을 찾아내는 함수 diameter, 샘플링 그리드의 해상도를 줄이는 함수 bsubsamp, 4-방향 프리먼 코드를 추출하는 함수 fchcode로 구성된다.
11.3.3 푸리에 묘사자
그림 11.15는 -평면의 -점 디지털 경계를 보여준다. 임의의 점 에서 시작해서, 예를 들어 반시계 방향으로 경계를 따라가면 좌표 쌍 을 만난다. 이 좌표들은 와 의 형태로 표현될 수 있다. 이 표기를 사용하면 경계 자체를 에 대해 좌표 시퀀스 로 나타낼 수 있다. 게다가, 각 좌표 쌍을 다음과 같은 복소수로 다룰 수 있다.
[수식]
[그림]
허수축
실수축
그림 11.15 디지털 경계와 그의 복소 시퀀스 표현. 점 (x0, y0)(임의로 선정됨)은 시작점이다. 점 (x1, y1)은 시퀀스에서 그 다음 반시계 방향 점이다.
3.1절로부터, 1-D 시퀀스 의 이산 푸리에 변환(discrete Fourier transform, DFT)을 에 대해
[수식]
로 쓸 수 있다. 복소 계수 를 경계의 푸리에 묘사자(Fourier descriptor)라고 부른다. 이들 계수의 역 푸리에 변환은 를 복구한다. 즉, 에 대해
[수식]
이다. 그런데, 이 역을 계산하는데 모든 푸리에 계수를 사용하는 대신에 첫 개의 계수들만 사용한다고 하자. 이것은 에 대한 앞의 공식에서 에 대해 으로 놓는 것과 등가이다. 그 결과는 에 대한 다음의 근사화이다:
[수식]
여기서, 이다. 비록 의 각 원소를 얻기 위해 단 개의 항들만 사용하더라도 의 범위는 여전히 0부터 까지이다. 즉, 근사화 경계에는 같은 수의 점들이 존재하지만, 각 점을 재구성하는 데는 그만큼이 다 사용되지 않는다. 제 3장으로부터 고주파 항들은 상세한 디테일을 나타내고, 저주파 성분들은 전체 모양을 결정함을 기억하라. 그래서, 가 줄어듦에 따라 경계의 디테일 손실이 증가한다.
다음 함수 frdescp는 경계 s의 푸리에 묘사자를 계산한다. 비슷한 방법으로, 푸리에 묘사자들의 집합이 주어지면, 함수 ifrdescp는 지정된 수의 묘사자들을 사용해서 그 역을 계산해서 공간 폐곡선을 제공한다.
[소스 코드]
함수 ifrdescp는 다음과 같다:
[소스 코드]
예제 11.8: 푸리에 묘사자.
■ 그림 11.16(a)는 그림 11.13(c)와 유사하나, sigma = 9인 15×15 크기의 가우스 마스크를 사용하고 0.7에서 문턱처리해서 얻은 이진 영상 f를 보여준다. 목표는 묘사자 수의 축소가 경계의 모양에 미치는 효과를 예시하기 위해서 지나치게 부드럽지 않은 영상을 만드는 것이었다. 그림 11.16(b)의 영상은 다음 명령으로 생성되었다:
>>[명령]
그림 11.16(b)는 영상 bim을 보여준다. 이 경계에는 1090개의 점이 있다. 그 다음, 푸리에 묘사자들을 계산했고,
...
1090개의 묘사자들 중 약 50%를 사용해서 역을 얻었다:
...
[그림]
그림 11.16 (a) 이진 영상. (b) 함수 bwboundaries를 사용해서 추출된 경계. 이 경계에는 1090개의 점이 있다.
영상 s546im[그림 11.17(a)]은 그림 11.16(b)의 원래 경계와 거의 비슷함을 보여준다. 원래의 경계에서 아래로 향한 뾰족한 끝에 위치한 한 화소로 된 만곡과 같이 몇 개의 미세한 디테일은 손실되었지만, 모든 실질적 용도를 위해서는 두 경계가 동일하다. 그림 11.17(b)부터 (f)까지는 총 1090개의 묘사자 중 각각 10%, 5%, 2.5%, 1.25%, 0.7%에 해당하는 110, 56, 28, 14, 8개의 묘사자를 사용해서 얻은 결과들을 보여준다. 110개의 묘사자를 이용해서 얻은 결과[그림 11.17(c)]는 경계가 약간 더 스무딩되었지만, 역시 전반적인 모양은 오리지널과 매우 가깝다. 그림 11.17(e)는 총 개수의 1.25%에 불과한 14개 묘사자로 얻은 결과도 경계의 주요 특징들을 그대로 유지하고 있음을 보여준다. 그림 11.17(f)의 결과는 경계의 주요 특징들(4개의 긴 돌출부)이 손실되었으므로 받아들일 수 없는 왜곡을 보여준다. 묘사자 수를 4개와 2개로 더욱 감소시키면 타원, 그리고 최종적으로는 원이 될 것이다.
[그림]
그림 11.17 (a)-(f) 총 1090개의 푸리에 묘사자 중 546, 110, 56, 28, 14, 8개의 묘사자를 사용해서 재구성된 경계.
그림 11.17의 일부 경계는 화소 값의 정수화 오차로 인해 한 화소 틈을 가진다. 푸리에 묘사자를 사용할 때 흔히 발생하는 이 작은 틈은 함수 bwmorph에 ‘bridge' 옵션을 사용해서 메울 수 있다.
■
앞에서 언급했듯이, 묘사자는 이동, 회전, 스케일 변화에 가능한 한 둔감해야 한다. 점들이 처리되는 순서에 따라 결과가 달라지는 경우, 묘사자들이 시작점에 둔감해야 한다는 제한 조건이 추가된다. 푸리에 묘사자는 이들 기하적 변화에 직접적으로 둔감하지는 않으나, 이런 파라미터들의 변화는 묘사자들에 관한 간단한 변환과 관련될 수 있다(Gonzalez and Woods [2008] 참고).
11.3.4 통계적 적률
1차원 경계 표현(예: 경계 조각과 시그니처 파형)의 모양은 평균, 분산, 고차 적률과 같은 통계적 적률을 이용해서 정량적으로 묘사될 수 있다. 디지털 경계 조각을 보여주는 그림 11.18(a)와, 임의의 변수 에 대한 1차원 함수 로 표현된 조각을 보여주는 그림 11.18(b)를 고려하자. 이 함수는 “장(major)”축을 만들기 위해서 조각의 두 끝점을 연결한 후, 11.3.2절에서 논의한 함수 x2majoraxis를 사용해서 장축을 축에 정렬시켜서 얻어졌다.
[그림]
그림 11.18 (a) 경계 조각. (b) 1차원 함수로서의 표현.
의 모양을 묘사하기 위한 한 접근법은 단위 영역으로 정규화시켜 히스토그램으로 취급하는 것이다. 즉, 를 값 가 발생할 확률로 취급하는 것이다. 이 경우, 은 랜덤 변수로 간주되고, 적률은
[수식]
이고, 여기서
[수식]
는 평균 값이다. 여기서, 는 경계 점 수이고, μ(n)은 g의 모양과 관련된다. 예를 들면, 2차 적률 μ2는 의 평균값에 관한 곡선의 퍼진 정도를 나타내고, 3차 적률 μ3는 평균을 기준으로 한 대칭성을 측정한다. 통계적 적률은 함수 statmoments(4.2.4절 참고)로 계산된다.
우리가 달성한 것은 묘사 작업을 1차원 함수로 줄이는 것이다. 다른 기법들에 비해 적률의 매력은 구현이 간단하며, 경계 모양의 “물리적” 해석도 수반한다는 것이다. 회전에 대한 이 접근 방법의 둔감성은 그림 11.18에서 명확히 드러난다. 크기 정규화는 와 값의 범위를 스케일링함으로써 달성될 수 있다.
11.3.5 코너
이제까지 검토된 경계 묘사자들은 특성상 전역적이다. 영상 추적과 객체 인식 같은 응용들에 널리 쓰이는 지역적 경계 묘사자인 코너를 검출하기 위한 두 가지 접근법들을 전개함으로써, 경계 묘사자에 관한 우리의 논의를 결론짓는다. 다음 두 방법은 IPT에 의해 지원된다.
해리스-스티븐 코너 검출기
해리스-스티븐 코너 검출기(Harris와 Stephens[1988])는 Moravec[1980]이 제안한 기본적인 기법을 개선한 것이다. Moravec의 접근 방식은 영상의 지역 창을 고찰하며, 다양한 방향으로 약간씩 창을 이동시켜서 생기는 영상 밝기의 평균 변화를 계산한다. 세 경우가 감안되어야 한다:
- 만일 창에 의해 포위된 영상 영역의 밝기가 대략 일정하다면, 모든 이동에 의해 평균 밝기에 작은 변화가 생길 것이다.
- 만일 창이 에지에 걸쳐지면, 에지를 따라 이동할 때는 작은 변화가 생길 것이나, 에지에 수직으로 이동하면 큰 변화가 생길 것이다.
- 만일 창이 놓인 영역에 코너가 포함된다면, 모든 이동에 대해 큰 변화가 생길 것이다. 따라서, 모든 이동에 대한 최소 변화가 큰(지정된 문턱치에 관해) 때를 찾아내면 코너를 검출할 수 있다.
이 개념들은 다음과 같이 수학적으로 표현될 수 있다. w(x, y)로 모든 요소가 음이 아닌(즉, 모든 계수가 1/9인 3x3 마스크) 공간 평균(스무딩) 마스크를 나타내자. 그러면, 2.4절과 2.5절을 참고해서, 영상 f(x, y)의 임의의 좌표 (x, y)에서의 평균 밝기 변화 E(x, y)를
...
으로 정의할 수 있다. 여기서 (s, t)의 값들은 w와 대괄호 안의 식에 해당하는 영역이 겹치는 값들이다. 해석에 의해, E(x, y) ≥ 0임을 알 수 있다.
기초 수학 해석으로부터 점 (x, y)에 관한 실수 함수 f(x, y)의 테일러 급수 전개가 다음과 같이 주어짐을 기억하라.
...
작은 이동(즉, 작은 x, y 값)에 대해서는, 이 전개를 선형 항들만을 사용해서 근사화할 수 있으며, 이 경우 E를 다음과 같이 쓸 수 있다.
...
해리스-스티븐 코너 검출기는 마스크로 [-1 0 1]T와 [-1 0 1]을 사용하는 다음의 공간 필터링에 의해서 편미분을 근사화한다:
...
그러면, 다음과 같이 쓸 수 있다.
...
앞 공식의 합산 표현은 마스크 w(x, y)와 표시된 항들(2.4절 참고)의 코릴레이션이므로, E(x, y)을 다음과 같이 쓸 수 있다.
...
여기서
...
이다. E(x, y)를 다음과 같이 벡터-매트릭스 형태로 쓸 수 있다.
...
여기서
...
이다. 이 매트릭스의 요소들은 평균 마스크 w로 스팬(span)되는 부영상 영역에 대한 필터링된(평균화된) 수직 및 수평 미분들이다.
C가 대칭이므로, 좌표 축들의 회전에 의해 대각선화 될 수 있다(11.5절 끝의 논의를 참고한다):
...
여기서 λ1과 λ2는 C의 고유값들로서 다음으로 주어진다.
...
해리스-스티븐 코너 검출기는 이 고유값들의 속성에 기반한다(λ1 ≥ λ2임을 주목한다).
[측주] 매트릭스의 고유값을 얻는데 사용되는 절차에 관해서는 기초 매트릭스에 관한 Noble과 Daniel[1988]이나 다른 책을 보도록 한다.
먼저, C의 요소들이 정의된 방식 때문에 고유값들이 모두 지역 미분들의 평균값에 비례함을 주목한다. 또한, 다음과 같은 이유로 고유값들은 모두 음수가 아니다. 앞에 설명했듯이 E(x, y) ≥ 0이다. 그러면 [x y]C[x y]T ≥ 0이며, 이것은 이 이차 형태가 양 준정부호(positive semidefinite)임을 의미한다. 이것은 다시 C의 고유값들이 음수가 아님을 의미한다. 11.5절에서 보겠듯이, 고유값들이 주 데이타 확산 방향을 가리키는 고유 벡터들의 크기에 비례한다는 것을 확인함으로써, 우리는 똑 같은 결론에 도달할 수 있다. 예를 들어, 밝기가 일정한 영역에서는 고유값들이 모두 0이다. 한 화소 두께의 선에 대해서는 한 고유값은 0, 다른 것은 양이 될 것이다. 다른 모든 형태(코너를 포함해서)에 대해, 고유값들이 모두 양이 될 것이다. 이 관찰들은 이상적 지역 영상 패턴에 기반하는 다음 결론들로 이끈다:
(a) 만일 w로 둘러싸인 영역의 밝기가 일정하다면, 모든 미분이 0이고, C는 null 매트릭스이고, λ1= λ2 = 0이다.
(b) 만일 w가 이상적인 흑색과 백색 에지를 포함한다면, λ1 > 0, λ2 = 0, 그리고 λ1과 관련된 고유벡터는 영상 기울기에 평행하다.
(c) 만일 w가 백색 배경의 흑색 정사각형의 한 코너를 포함한다면(또는 그 반대), 두 개의 주 데이타 확산 방향이 있으며, λ1 ≥ λ2 > 0이다.
실수 영상 데이타를 다룰 때는, “만일 w로 둘러싸인 영역이 거의 일정하다면, 고유값은 모두 작을 것이다”와 “만일 w로 둘러싸인 영역이 에지를 포함한다면, 한 고유값은 크고 다른 것은 작을 것이다” 같은 덜 정확한 표현을 사용한다. 비슷하게, 코너를 다룰 때는, 우리는 두 개의 “큰” 고유값을 찾는다. “작은” 또는 “큰” 같은 용어들은 지정된 문턱치를 기준으로 한다.
해리스와 스티븐의 공헌의 핵심은 Moravec의 오리지널 아이디어를 공식화하고 확장시키기 위해 방금 소개된 개념들을 사용한 것이었다. 또한, Moravec은 상수 평균 마스크를 사용한 반면, 해리스와 스티븐은 마스크 아래 영상의 중앙부를 강조하는 가우스 마스크를 제안했다:
...
그들은 또한 다음의 응답 함수를 소개했다.
...
여기서 Det는 C의 행렬식이다.
...
Tr 은 C의 trace
...
이며, k는 감도 파라미터(그 값의 범위는 아래에서 논의된다)이다. 이 결과들을 이용해서 R을 직접 a, b, c에 의해 표현할 수 있다:
...
요소 a, b, c에 의한 이 공식화를 이용하면 창의 각 이동에 대해 고유값들을 직접 계산하지 않아도 되는 약간의 이점이 있다.
함수 R은 그의 값이, 평탄한 영역에서는 낮고, 코너에 대해서는 양이고, 선에 대해서는 음이 되도록 구성되었다. 이를 보여주기 위한 가장 간단한 방법은 R을 고유값들에 의해 전개하는 것이다:
...
그러면, 예를 들어, 앞에서 논의된 세 가지 이상적인 경우들을 고려할 때, 다음을 알 수 있다: 일정한 영역에서 고유값들이 모두 0이고, 따라서 R = 0; 에지를 포함하는 영역에서는 고유값 중 하나가 0이 될 것이고, 따라서 R < 0; 창에 대칭적으로 위치하는 이상적인 코너에 대해서는 두 고유값이 같을 것이고 R > 0. 이 문장들은 0 < k < 0.25일 때만 성립하므로, 추가적인 정보가 없을 때, 이것은 감도 파라미터 값을 위한 좋은 선정 범위이다.
해리스-스티븐 검출기는 다음과 같이 요약될 수 있다. 이 알고리듬을 배열 연산을 사용해서 구현할 수 있다는 사실을 강조하기 위해 MATLAB 표기를 사용하겠다:
1. 파라미터 k와 가우스 스무딩 함수 w의 값들을 지정한다.
2. 필터 마스크 ws = [−.1 0 1]'와 wt = [−.1 0 1]에 의해 입력 영상 f를 각각 필터링해서 미분 영상 fs와 ft를 계산한다. fst = fs. * ft를 얻는다.
3. 평균 마스크 w로 fs, ft, fst를 각각 필터링해서 계수 배열 A, B, C를 얻는다. 임의의 점에서의 이 배열들의 각 요소들은 앞에서 정의된 a, b, c 파라미터들이다.
4. 척도 R을 계산한다:
...
이 검출기의 성능을 예제 11.8에서 예시한다.
최소-고유값 코너 검출기
이 절에서 논의되는 방법은 앞에서 검토된 속성 (c)에 기반한다. Cd의 고유값들이 λ1 ≥ λ2로 정렬되어 있다고 가정하면, T가 음이 아닌 규정된 문턱치이고 λ2(최소 고유값)가 앞에서 제공된 해석적 공식에 의해 계산될 때, 최소-고유값 코너 검출기는
...
이면, 지역 미분이 계산된 창의 중앙 위치에서 코너가 발견된 것으로 본다. 비록 이 방법이 분명히 해리스-스티븐을 발전시킨 결과이지만, 이것은, 당당하게, 코너 검출을 위한 견고한 접근법으로서 받아들여져 왔다(예로서, Shi and Tomasi [1994], and Trucco and Verri [1998]를 참고한다). 두 기법을 다음 절에서 예시한다.
함수 cornermetric
해리스-스티븐과 최소-고유값 검출기들은 함수 cornermetric에 의해 IPT에 구현되어 있다. 문법은 다음과 같다.
...
여기서
- f는 입력 영상이다.
- method는 'Harris' 또는 'MinimumEigenvalue'이다.
- param1은 'FilterCoefficients'이다.
- val1은 1-D 공간 필터 마스크의 계수들을 포함하는 벡터로서, 이로부터 이 함수가 앞에서 검토된 해당 2-D 정사각형 필터 w를 생성한다. 만일 param1, val1이 호출에 포함되어 있지 않으면, 이 함수는 fspecial('gaussian', [1 5], 1.5)을 사용해서 디폴트인 5x5 가우스 필터를 만들어서 이 1-D 필터의 계수들을 생성한다.
- param2는 해리스 검출기에만 해당되는 'SensitivityFactor'이다.
- val2는 앞에서 설명된 감도 계수 k의 값이다. 그 값의 범위는 0 < k < 0.25이다. 디폴트 값은 0.04이다.
cornermetric의 출력은 입력 영상과 같은 크기의 배열이다. 배열의 각 점의 값은 해리스 옵션의 경우 해당 척도 R이고, 최소-고유값 옵션에 대해서는 가장 작은 고유값에 해당한다. 우리의 관심은 코너에 있으므로, 어느 옵션이든지, 출력 (비가공) 배열 C를 더욱 처리해서, 지정된 문턱치와 관련해서 어느 점들이 유효한 코너들을 나타내고 있는지를 결정할 필요가 있다. 문턱치 검사를 통과하는 점들을 코너 점이라고 부른다. 다음의 주문형 함수(코드는 부록 C를 참고한다)를 이 점들을 검출하는데 사용할 수 있다:
...
여기서 C는 cornermetric의 출력이며, T는 지정된 문턱치, q는 코너 점들의 수를 줄이는데 사용되는 정사각형 형태학적 구조 요소의 크기이다. 즉, 연결 성분을 만들기 위해 1로 구성된 q x q 구조 요소로 코너 점들이 팽창된다. 이렇게 연결된 성분들은 단일 점들로 형태학적으로 수축된다. 코너 점 수의 실제 축소 량은 q와 점들의 근접성에 따라 다르다.
예제 11.18: 그레이스케일 영상의 코너들을 찾아내기 위해 함수 cornermetric와 cornerprocess를 사용하기.
이 예제에서는 방금 검토된 함수들을 사용해서 그림 11.19(a)에 보인 영상의 코너들을 찾아낸다. 그림 11.19(b)와 (c)는 다음 명령들로 얻은, 함수 cornermetric의 비가공 출력들이다:
...
cornermetric으로 추출한 특징들의 콘트라스트가 낮기 때문에 잘 볼 수 있도록 그림 11.19(b)와 (c)를 네거티브로 보여줬다. 그림 11.19(b)의 특징들이 그림 11.19(c) 보다 현저하게 어두움을 주목한다. 이러한 사실은 해리스 방법에서 사용한 계수 k에 기인한다. mat2gray를 사용하면 범위 [0, 1]로 스케일링(결과 해석 및 비교를 단순화한다)하는 외에도, 배열을 유용한 영상 포맷으로 전환한다. 이것은 함수 imhist를 사용해서 적절히 스케일링된 히스토그램들을 얻을 수 있게 해주며, 이들은 문턱치를 얻는데 사용된다:
...
우리는 유효한 코너에 대한 우리의 정의가 기반하는 문턱치를 얻기 위해 백분위수 접근법(10.3.5절 참고)을 사용했다. 이 접근법은, 각 코너 검출기의 문턱치를 만들고, 빌딩의 도어 프레임 그리고 앞과 우측 벽이 만든 코너들이 사라질 때까지 함수 cornerprocess를 사용해서 영상을 처리하기 위해서, 이 백분위수를 점증적으로 증가시키는 것이다. 코너들이 사라지기 전의 최대 문턱치가 T의 값으로 사용되었다. 결과 백분위수는 해리스와 최소-고유값 방법들 각각에 대해 99.45와 99.70이었다. 방금 언급된 코너들이 빌딩의 어둡고 밝은 부분들 간의 영상 밝기들을 잘 나타내기 때문에 이들을 사용했다. 다른 대표성 코너들을 선택해도 비슷한 결과가 나올 것이다. 문턱치들은 다음과 같이 계산되었다:
...
[그림 11.19] (a) 오리지널 영상. (b)와 (c) 각각 해리스 검출기와 최소-고유값 검출기의 비가공 출력(콘트라스트가 낮은 디테일들이 잘 보이도록 네거티브로 보여줬다; 경계는 데이타의 일부가 아니다). (d)와 (e) q = 1을 사용한 함수 cornerprocess의 출력들(편의상 점들이 확대되었다).
그림 11.19(d)와 (e)는 다음 명령들로 얻어졌다:
...
각 점(dot)는 유효 코너 점(1 값의 화소로 표시된)이 검출된 창의 중앙을 표시한다. 각 점을, 예를 들어 원으로 둘러싸서 영상에 중첩시키면(그림 11.20(a)와 (b)), 이 점들과 영상 간의 관련성을 이해하기가 더 쉬워진다:
...
가까운 점들이 합쳐지지 않을 때, 그 효과는 결국 쓸모없는 결과로 이끄는 중복성임을 보여주기 위해서 cornerprocess에 q = 1을 선택했다. 예를 들어, 그림 11.20(b)의 왼쪽의 굵은 원들은, 주로 랜덤한 밝기 변화에 기인하는, 서로 붙어 있는 여러 코너 점들의 결과이다. 그림 11.20(c)와 (d)는 함수 cornerprocess에 q = 5(평균 마스크와 같은 크기)를 사용하고, 그림 11.20(a)와 (b)를 만드는데 사용했던 단계 시퀀스를 똑 같이 반복해서 얻은 결과들을 보여준다. 분명히, 이들 두 영상에서 중복 코너 수가 현저히 줄었으며, 따라서 영상의 주요 코너들에 대한 더 나은 묘사를 제공한다.
비록 결과들이 비견할만하나, 최소-고유값 방법을 사용했을 때 더 적은 허위 코너들이 검출되었다. 이 방법은 또한 단 한 파라미터(T)만 신경을 쓰면 되는 장점도 갖고 있다--해리스 방법에서는 둘(T와 k). 목표가 코너와 직선을 동시에 검출하는 게 아닌 한, 최소-고유값 방법이 일반적으로 코너 검출에 선호되는 접근방법이다.
[그림 11.20] (a)와 (b) 그림 11.19(d)와 (e)로부터의 코너 점들. 원으로 표시해서 오리지널 영상에 중첩시켰다. (c)와 (d) 함수 cornerprocess에 q = 5를 사용해서 얻은 코너 점들.
11.4 영역 묘사자
이 절에서는 영역 처리를 위한 여러 툴박스 함수들을 논의하고, 질감, 적률 불변량, 그리고 몇 가지 다른 영역 묘사자를 계산하기 위한 함수들을 더 소개한다. 9.3.4절에서 검토한 함수 bwmorph는 이 절에서 다루는 처리 유형에 자주 사용된다. 함수 roipoly(4.2.4절)도 마찬가지이다.
11.4.1 함수 regionprops
함수 regionprops는 영역 묘사자들을 계산하는 툴박스의 주요 도구이다. 이 함수의 문법은 다음과 같다.
[명령]
여기서 L은 레이블 매트릭스(11.1.1절)이고, D는 길이가 max(L(:))인 구조체 배열이다. 이 구조체의 필드들은 properties에 의해 지정된 대로 각 영역에 대해 서로 다른 측정량을 나타낸다. 인자 properties는 쉼표로 분리된 문자열, 문자열을 포함하는 쎌 배열, 단일 문자열 ‘all', 또는 문자열 ’basic'일 수 있다. 표 11.1에 유효한 속성 문자열 집합이 나열되어 있다. 만일 properties가 문자열 ‘all'이면, 표 11.1의 모든 묘사자들이 계산된다. 만일 properties가 지정되지 않거나 문자열 ’basic'이라면, 계산되는 묘사자들은 ‘Area', 'Centroid', 'BoundingBox'가 된다.
[측주] 여기서 논의되는 이진 영상에 대한 측정 외에도, 함수 regionprops는 그레이스케일 영상에 대한 몇 가지 측정치도 계산한다. 자세한 내용은 도움말을 참고한다.
표 11.1 함수 regionprops로 계산되는 영역 묘사자들.
-------------------------------------------------------------------
properties의
유효 문자열 설명
-------------------------------------------------------------------
‘Area' 영역의 화소 수
‘BoundingBox' 영역을 포함하는 최소 직사각형을 정의하는 1×4벡터. BoundingBox는
[ul_corner width]로 정의되며, 여기서 ul_corner는 [x y]의 형태로서 바운딩 박스의 좌측 상단 코너를 지정하고, width는 [x_width y_width] 형태로서 각 차원 방향의 바운딩 박스의 폭을 지정한다.
‘Centroid' 1×2벡터; 영역의 질량 중심. Centroid의 첫 번째 요소는 질량 중심
의 수평 좌표이고, 두 번째는 수직 좌표이다.
‘ConvexArea' 스칼라; ’ConvexImage'의 화소수(아래 참고).
‘ConvexHull' nv×2 매트릭스; 영역을 포함하는 최소 볼록 다각형. 매트릭스의 각 행은 다각형의 nv개 꼭지점들 중 하나에 대한 수평 및 수직 좌표들을 포함한다.
‘ConvexImage' 이진 영상; 깍지 안의 모든 화소가 채워진(즉, on으로 설정된) 볼록 깍지. (볼록 깍지의 경계에 있는 화소들에 대해, regionprops와 똑 같은 로직을 사용해서 화소가 볼록 깍지의 내부 또는 외부에 있는지를 결정한다.)
‘Eccentricity' 스칼라; 영역과 같은 2차 적률을 갖는 타원의 이심률. 이심률은 타원
의 초점들과 장축† 길이 간 거리의 비이다. 값은 0과 1사이이고, 0과
1은 축퇴 경우이다(이심률이 0인 타원은 원이고, 이심률이 1인 타원은 선분이다).
‘EquivDiameter' 스칼라; 영역과 같은 면적을 갖는 원의 지름. sqrt(4*Area/pi)로
계산된다.
‘EulerNumber' 스칼라; 영역의 객체 수 빼기 객체들의 구멍 수.
‘Extent' 스칼라; 영역 안에 있는 바운딩 박스 안에 있는 화소 수의 비율. 바운딩 박스의 면적으로 나뉜 Area로 계산된다.
‘Extrema' 8×2 매트릭스; 영역의 극점들. 이 매트릭스의 각 행은 한 점의 수평 및 수직 좌표들을 포함한다. 행들의 포맷은 [top-left, top-right, right-top, right-bottom,
bottom-right, bottom-left, left-bottom, left-top]이다.
‘FilledArea' ’FilledImage‘의 on 화소 수.
‘FilledImage' 영역의 바운딩 박스와 같은 크기의 이진 영상. on 화소들은 모든 구멍이
채워진 영역에 해당한다.
‘Image' 영역의 바운딩 박스와 같은 크기의 이진 영상; on 화소들은 영역에 해당하고, 다른 모든 화소들은 off이다.
‘MajorAxisLength' 영역과 똑 같은 2차 적률을 갖는 타원의 장축†의 길이(화소 단위).
‘MinorAxisLength' 영역과 똑 같은 2차 적률을 갖는 타원의 단축†의 길이(화소 단위).
‘Orientation' 영역과 똑 같은 2차 적률을 갖는 타원의 장축†과 수평축 사이의
각도(도 단위).
‘Perimeter'영상의 k개 영역 각각의 경계를 따라서의 거리를 포함하는 k-요소 벡터.
‘PixelList' 행들이 영역의 화소들의 [horizontal vertical] 좌표들인 np x 2 매트릭스.
'PixelIdxList'영역의 화소들의 선형 인덱스를 포함하는 np-요소 벡터.
‘Solidity' 스칼라; 영역 안에 있으며, 볼록 깍지 안에 있는 화소들의 비율.
Area/ConvexArea로 계산된다.
--------------------------------------------------------------------
<각주> † 이 맥락에서의 장축과 단축의 사용은 11.3.1절에서 논의한 기본 직사각형의 장축과 단축과는 다르다. 타원의 적률에 대한 논의는 Haralick과 Shapiro[1992]를 참고한다.
예제 11.9: 함수 regionprops 사용하기.
■ 영상 B의 각 영역에 대해 면적과 바운딩 박스를 얻기 위해 regionprops를 사용한다. 다음과 같이 시작한다:
>>[명령]
면적과 영역 수를 추출하기 위해 다음과 같이 쓴다.
>>[명령]
여기서 벡터 A의 요소들이 영역들의 면적이고, NR이 영역 수이다. 비슷하게, 다음 명령을 사용하면 행들이 각 영역의 바운딩 박스인 단일 매트릭스를 얻을 수 있다.
[명령]
이 배열의 크기는 NR×4이다.
■
11.4.2 질감
영역을 묘사하는 중요한 접근법은 그 질감 콘텐트를 정량화하는 것이다. 이 절에서는 통계적 측정과 스펙트럼 측정에 기반해서 질감을 계산하는 두 개의 주문형 함수와 하나의 툴박스 함수의 사용을 보여준다.
통계적 접근법
질감 분석을 위해서 자주 사용되는 한 접근법이 밝기 히스토그램의 통계적 속성에 기반한다. 그런 측정치들의 한 부류는 밝기 값들의 통계적 적률에 기반한다. 4.2.4절에서 검토했듯이, 평균에 관한 차 적률의 공식은 다음으로 제공된다.
[수식]
여기서 z는 밝기를 나타내는 랜덤 변수, 는 영역의 밝기 레벨들의 히스토그램, 은 가능한 밝기 레벨 수, 그리고
[수식]
은 평균 밝기이다. 이 적률들은 4.2.4절에서 검토한 함수 statmoments로 계산될 수 있다. 표 11.2에 통계적 적률, 균일성, 엔트로피에 기초한 몇 가지 보편적 묘사자들이 나열되어 있다. 2차 적률 μ2가 분산 와 같음을 기억하라.
주문형 함수 statxture(부록 C 참고)가 표 11.2의 질감 척도들을 계산한다. 그 문법은
...
이며, 여기서 f는 입력 영상(또는 부영상), t는 요소들이 표 11.2의 묘사자들이고 같은 순서로 배치된 6-요소 행 벡터이다. 파라미터 scale도 6-요소 행 벡터로서, 스케일링을 위해서 그 요소들이 t의 상응 요소들을 곱한다. 만일 생략되면, scale은 디폴트로 모두 1이 된다.
표 11.2 밝기 히스토그램에 기반한 질감 묘사자들.
------------------------------------------------------------------
적률 공식 측정 질감
--------------------------------------------------------------------
평균 [수식] 평균 밝기
표준 편차 [수식] 평균 콘트라스트
부드러움[수식] 영역의 밝기의 상대적 부드러움을 측정한다. 은 일정한
밝기의 영역에 대해서는 0이고, 밝기가 크게 변하는 영역에 대해서는 1에 접근해 간다. 실제에서는 이 척도에서 사용되는 분산은 로 나뉘어 [0, 1] 범위로 정규화된다.
3차 적률 [수식] 히스토그램의 비대칭도를 측정한다. 이 척도는 대칭인 히스토그램
에 대해서는 0; 평균을 기준으로 오른쪽에 몰린 히스토그램에
대해서는 양; 왼쪽으로 몰린 히스토그램에 대해서는
음이다. 이 척도의 값도 분산을 정규화할 때 사용한 것과 같은 로 나눔으로써 다른 다섯 척도들과 비교 가능한 값의 범위로 들어온다.
균일성 [수식] 균일성을 측정한다. 이 척도는 모든 명암도 값이 같을 때(최대로 균일할 때) 최대이며, 그로부터 줄어든다.
엔트로피 [수식] 랜덤성.
--------------------------------------------------------------------
예제 11.10: 통계적 질감의 측정치들.
■ 그림 11.21의 흰 상자로 표시된 세 영역은 각각 부드럽고, 거칠고, 주기적인 질감에 대한 예이다. 함수 imhist로 얻은 이 영역들의 히스토그램을 그림 11.22가 보여준다. 표 11.3의 엔트리들은 그림 11.21의 각 부영상에 함수 statxture를 적용해서 얻었다. 이 결과들은 각 부영상의 질감 콘텐트와 전체적으로 일치한다. 예를 들어, 거칠은 영역[그림 11.21(b)]의 엔트로피는 화소 값들이 다른 영역들에서 보다 더 랜덤하므로 다른 것들보다 더 높다. 이 경우 콘트라스트와 평균 밝기에 대해서도 그러하다. 그 반면에 이 영역은 과 균일성 척도 값들이 나타내듯이 가장 덜 부드럽고 균일하다. 거친 영역의 히스토그램은 그림 11.22(b)가 명확히 보여주고, 표 11.3의 가장 큰 3차 적률값에 의해서 알 수 있듯이, 평균값에 관한 가장 낮은 대칭성을 갖고 있다.
■
[그림]
그림 11.21 흰 상자 안의 부영상들은 각각 부드럽고, 거칠고, 주기적인 질감의 샘플이다. 이들은 초전도체, 인간 콜레스테롤, 마이크로프로세서의 광학 현미경 영상이다. (원본 출처: Dr. Michael W. Davidson, Florida State University.)
표 11.3 그림 11.21에서 흰색 정사각형으로 둘러싸인 영역들에 대한 질감 측정치.
-------------------------------------------------------------------
질감 평균 평균 R 3차 균일도 엔트로피
밝기 콘트라스트 적률
--------------------------------------------------------------------
부드러운
성긴
주기적
-------------------------------------------------------------------
[그림]
부드러운거친주기적
그림 11.22 그림 11.21의 부영상들에 해당하는 히스토그램들.
히스토그램만 사용해서 계산된 질감 측정은 화소 간 상대적 위치에 관한 정보를 수반하지 않는다. 이 정보는 질감을 묘사할 때 중요하며, 이 정보를 질감 분석에 구체화하는 한 방법은 밝기 분포뿐만 아니라 화소 간 상대적 위치도 감안하는 것이다.
O를 두 화소의 상대적 위치를 정의하는 연산자라고 하고, L개의 가능한 밝기 레벨을 갖는 영상 f(x, y)를 고려하자. G는 그 요소 gij가 밝기가 zi와 zj인 화소 쌍이 f에서 O로 규정된 위치에서 발생하는 횟수인 매트릭스라고 하자. 여기서 1 ≤ i, j ≤ L이다. 이렇게 만든 매트릭스를 그레이-레벨(또는 밝기) 동시발생(co-occurrence) 매트릭스라고 부른다. 흔히 G를 단순히 동시발생 매트릭스라고 부른다.
그림 11.23은 L = 8과 “오른쪽으로 바로 옆 한 화소”로 정의되는 위치 연산자 Q를 사용해서 동시발생 매트릭스를 만드는 방법의 예를 보여준다. 그림 11.23의 왼쪽 배열이 고찰 대상인 영상이며, 오른쪽 배열이 매트릭스 G이다. G의 요소 (1, 1)은, 그의 바로 오른쪽에 값이 1인 화소가 있는 값이 1인 화소가 f에서 단 한 번 발생하므로 1임을 알 수 있다. 비슷하게, G의 요소 (6, 2)는, 그의 바로 오른쪽에 값이 2인 화소를 갖는 값이 6인 화소가 f에서 3회 발생하므로 3이다. G의 다른 요소들도 이런 식으로 계산된다. 만일 O를, 예를 들어 “오른쪽으로 한 화소, 그리고 위쪽으로 한 화소”로 정의했다면, G의 (1, 1) 위치는, O에 의해 규정된 위치에 또 다른 1을 갖는 1이 f에 없기 때문에 0이 되었을 것이다. 그 반면, G의 (1, 3), (1, 5), (1, 7) 위치들은, O에 의해 규정된 위치에 3, 5, 7 값을 갖는 이웃이 있는 밝기 값 1이 한 번씩 발생하므로, 모두 1이 될 것이다.
영상 f 동시발생 매트릭스 G
그림 11.23 동시발생 매트릭스를 만드는 방법.
영상의 가능한 밝기 레벨 수가 매트릭스 G의 크기를 결정한다. 8-비트 영상(256개의 가능한 레벨들)에 대하여, G의 크기는 256 x 256이 될 것이다. 이것은 한 개의 매트릭스를 다룰 때는 문제가 되지 않으나, 곧 보게 되듯이, 동시발생 매트릭스들이 시퀀스로 사용될 때가 있으며, 그 경우, G의 크기는 계산 부하 관점에서 중요하다. 계산 부하를 줄이기 위해 사용되는 한 접근 방법은 매트릭스 G의 크기를 다루기 쉬운 크기로 유지하기 위해서 밝기들을 몇 개의 띠로 양자화하는 것이다. 예를 들면, 256개의 밝기의 경우, 처음 32개 밝기 레벨을 1, 그 다음 32개를 2로 놓는 식이다. 이렇게 하면 동시발생 매트릭스의 크기가 8 x 8이 된다.
O를 충족시키는 전체 화소 쌍 수 n은 G의 요소들의 합이다(앞의 예에서 n = 30). 그러면, 수량
…
는 O를 충족시키는 점 쌍들이 값 (zi, zj)를 가질 확률에 대한 추정이다. 이 확률들의 범위는 [0, 1]이며, 합은 1이다:
…
여기서 K는 정사각형 매트릭스 G의 행(또는 열) 길이이다. 정규화된 동시발생 매트릭스는 각각 항을 n으로 나눠서 만든다:
...
이로부터 Gn의 각 항이 pij임을 알 수 있다.
IPT의 함수 graycomatrix가 동시발생 매트릭스를 계산한다. 우리가 관심 있는 문법은
...
이다. 여기서 f는 아무 유효한 클래스 영상이다. 이 문법은 GS에 저장되는 일련의 동시발생 매트릭스를 생성한다. 생성되는 매트릭스의 수는 q x 2 매트릭스 offsets의 행 수에 종속된다. 이 매트릭스의 각 행은 [row_offset, col_offset] 형태를 가지며, 여기서 row_offset은 관심 화소와 그의 이웃들 사이의 행 수를 규정하며, col_offset에 대해서도 비슷하다. 예를 들어, 그림 11.23의 예에 대해 offsets = [0 1]이다. 파라미터 'NumLevels'는f의 밝기들이 나뉘는 레벨 “띠”의 수를 앞에서 설명한 것 같이 규정하며(디폴트는 8), FS는 결과 영상으로서 GS를 만들기 위해 이 함수에서 사용된다. 예를 들어, 그림 11.23의 동시발생 매트릭스를 다음과 같이 만든다:
...
p. 603
그림 11.23을 만드는데 필요한 NumLevels의 값이 디폴트와 같지만, 교육 목적으로 여기에 명시적으로 보여줬다.
동시발생 매트릭스(또는 매트릭스 시리즈)가 질감 묘사를 위해 사용되는 방법은 G가 O에 종속되기 때문에 적당한 위치 연산자들을 선정하고 결과로 얻은 G의 요소들을 분석하면 밝기 질감 패턴의 존재가 검출될 수 있다는 사실에 기반한다. 툴박스는 묘사자들을 생성하기 위해서 함수 graycoprops를 사용한다:
...
여기서 stats는 그 필드들이 표 11.4의 속성들인 구조체이다. 예를 들어, 만일 속성으로 'Correlation' 또는 'All'을 지정하면, 필드 stats.Correlation은 상관성 묘사자를 계산한 결과를 제공한다(예제 11.11에 이를 예시한다).
상관성 묘사자에서 사용되는 수량들은 다음과 같다:
...
...
...
여기서
...
수량 mr은 G의 행들을 따라서 게산된 평균의 형태이며, mc는 열들을 따라 계산된 평균이다. 비슷하게, σr과 σc는 각각 행들과 열들을 따라서 계산된 표준 편차들의 형태이다. 이 항들 각각은 스칼라이며, G의 크기와 무관하다.
Gn의 요소들로부터 직접 계산될 수 있는 두 가지 추가적 척도는 최대 확률(동시발생 매트릭스의 최대 응답을 측정하기 위한)
...
그리고 앞에서와 같이 랜덤성의 척도인 엔트로피
...
이다.
표 11.4 함수 graycoprops가 지원하는 속성들. 확률 pij는 G/n의 ij번째 요소이며, 여기서 n은 G의 요소들의 합과 같다.
속성설명공식
‘Contrast'전체 영상에 대해, 한 화소와 그의 이웃 간의 밝기 콘트라스트의 측정치를 반환한다.
Range = [0 (size(G, 1) −. 1) ^ 2]
Contrast는 일정한 영상에 대해 0이다.
‘Correlation'전체 영상에 대해, 한 화소가 그의 이웃과 어떻게 상관(correlate)되는지에 관한 측정치를 반환한다.
Range = [−.1 1]]
Correlation은 완전하게 양 또는 음으로 상관되는 영상에 대해 각각 1 또는 -1이다. 상관성은 일정한 영상에 대해 NaN이다.
‘Energy'G의 요소들의 제곱의 합을 반환한다.
Range = [0 1]
Energy는 일정한 영상에 대해 1이다.
‘Homogeneity'G의 요소들의 분포가 G의 대각 요소들에 얼마나 가까운지를 측정한 값을 반환한다.
Range = [0 1]
Homogeneity는 대각선형 G에 대해 1이다.
‘All'모든 속성을 계산한다.
예제 11.11 동시발생 매트릭스에 기반하는 질감 묘사자들.
그림 11.24(a)-(c)는 각각 랜덤하고, 수평으로 주기적이고, 혼합된 질감을 보여준다. 이 예제에서의 우리의 목표는 다음을 보여주는 것이다: (1) 질감 묘사를 위해 개별 동시발생 매트릭스를 사용하는 방법; (2) 영상의 질감 패턴을 “발견”하기 위해서 동시발생 매트릭스 시퀀스를 사용하는 방법. 우리는 한 영상(주기적 질감)에 대해 그 절차를 보여주고, 나머지 둘에 대해서는 결과를 나열한다.
[그림 11.24] 화소들이 (a) 랜덤하고, (b) 주기적이며, (c) 혼합된 질감 패턴을 보여주는 영상들. 모든 영상의 크기는 263x800이다.
우리는 가장 간단한 수평 위치 연산자 offsets = [0 1]--이것은 디폴트--을 사용해서 공동발생 매트릭스를 계산하는 것에서 시작한다(이 예제에서 우리가 관심 있는 질감 패턴은 수평이다). 묘사자들의 가능한 가장 미세한 구별을 얻기 위해서 모든 레벨 수(uint8 영상에 대해 256)를 사용한다:
...
그 다음, G2n의 요소들을 사용해서 계산한 두 묘사자를 포함해서, 모든 묘사자를 계산하고 열거한다:
...
이 묘사자들의 값들이 표 11.5의 둘째 행에 열거되어 있다. 나머지 두 행은 다른 두 영상을 사용하고, 똑 같은 절차에 의해 생성되었다. 이 표의 엔트리들은 그림 11.24의 영상들을 보고 예상한 것과 일치한다. 예를 들어, 표 11.5의 최대 확률 열을 보자. 최고 확률이 세 번째 동시발생 매트릭스에 해당하는데, 이는 이 매트릭스가 다른 두 매트릭스보다 더 높은 카운트 수(O의 위치들과 관련해서, 영상에서 발생한 가장 큰 화소 쌍 수)를 가짐을 알려준다. 그림 11.24(c)를 들여다보면, 수평 방향으로 밝기 변화도가 낮은 큰 영역들이 있으므로, G3의 카운트가 높을 것으로 예상할 것임을 알 수 있다.
두 번째 열은 최고 상관성이 G2에 해당한다는 것을 나타낸다. 이는 두 번째 영상의 밝기들의 상관도가 높음을 알려준다. 그림 11.24(b)의 주기적 패턴의 반복성이 그 이유를 밝혀준다. G1에 대한 상관성은 본질적으로 0으로서, 인접 화소들 간에 상관성이 거의 없음을 나타내며, 이는 그림 11.24(a)의 영상 같은 랜덤 영상의 특징이다. 콘트라스트 묘사자는 G1에 대해 최고, G2에 대해 최저이다. 영상이 덜 랜덤할수록, 영상의 콘트라스트가 더 낮은 경향이 있다. 비록 G1의 최대 확률이 가장 낮지만, 다른 두 매트릭스들은 0 또는 0에 가까운 확률들을 훨씬 더 많이 갖고 있다. 정규화된 동시발생 매트릭스의 값들의 합이 1임을 명심하면, 콘트라스트 묘사자가 랜덤성의 함수로서 증가하는 경향이 있는 이유를 쉽게 알 수 있다.
나머지 세 묘사자들은 비슷한 방식으로 설명된다. 에너지는 제곱된 확률 값들의 함수로서 증가한다. 따라서, 영상에서 랜덤성이 적을수록, 표 11.4의 다섯 번째 열이 보여주듯이, 균일성 묘사자는 더 높아질 것이다. 균질성은 주 대각선에 관한 G의 값들의 집결도를 측정한다. 이 묘사자의 분모 항의 값들은 동시발생 매트릭스 셋 모두에 대해 똑 같으며, i와 j가 값이 서로 가까워질수록(즉, 주 대각선에 더 가까울수록) 감소한다. 따라서, 주 대각선 근처에서 가장 높은 확률 값들(분자 항)을 갖는 매트릭스가 가장 높은 균질성 값을 가질 것이다. 그러한 매트릭스는 풍부한 그레이-레벨 콘텐트와 밝기 값들이 서서히 변하는 영역들을 갖는 영상들에 해당한다. 표 11.5의 여섯 번째 열의 엔트리들은 이 해석과 일치한다.
[표 11.5] 그림 11.24의 영상에 대한 개별적 동시발생 매트릭스들에 기반한 질감 묘사자들.
정규화된 동시발생 매트릭스 묘사자
최대 확률 상관성 콘트라스트 에너지 균질성 엔트로피
이 표의 마지막 열의 엔트리들은 동시발생 매트릭스들의 랜덤성의 측정치이며, 이것은 결국 해당 영상에서의 랜덤성의 척도가 된다. 예상대로, G1이 완전히 랜덤한 영상에서 나왔기 때문에 가장 높은 값을 가졌다. 다른 두 엔트리들도 이 맥락에서 자명하다.
이제까지 단일 영상들과 그들의 동시발생 매트릭스들을 다뤘다. 이 영상들에 반복적 성분(즉, 주기적 질감)을 포함하는 부분이 있는지를 “발견”(영상을 보지 않고)하고 싶다고 하자. 이 목표를 달성하기 위한 한 방법은 이웃 간의 거리를 증가시키면서 이 영상들로부터 도출되는 동시발생 매트릭스 시퀀스들에 대한 상관성 묘사자를 조사하는 것이다. 앞서 언급했듯이, 동시발생 매트릭스들의 시퀀스를 다룰 때는 매트릭스 크기 및 관련 계산 부하를 줄이기 위하여 밝기를 양자화하는 것이 관례이다. 다음의 결과들은 L = 8을 사용해서 얻어졌다. 앞에서와 같이, 주기적 영상을 사용해서 절차를 예시한다:
...
다른 두 영상도 같은 방식으로 처리된다. 그림 11.25가 상관성 묘사자들의 플롯을 수평 오프셋의 함수로서 보여준다. 그림 11.25(a)는 모든 상관성 값들이 0에 가까움을 보여주는데, 이는 랜덤 영상에서는 상관관계 패턴이 발견되지 않았음을 나타낸다. 그림 11.5(b)의 상관성 모양은 입력 영상이 수평 방향으로 주기적임을 분명하게 나타낸다. 상관성 함수가 높은 값에서 시작해서 이웃 간 거리가 증가함에 따라 감소하기를 반복함을 주목한다.
상관성
수평 오프셋
[그림 11.25] 그림 11.24의 (a) 노이즈 낀, (b) 정현, (c) 회로 기판 영상들에 해당하는 수평 오프셋(인접 화소들 간 거리)의 함수로서의 상관성 묘사자의 값들.
그림 11.25(c)는 회로 기판 영상에 해당하는 상관성 묘사자가 초기에는 감소하지만, 오프셋 거리가 16 화소일 때 강한 피크를 가짐을 보여준다. 그림 11.24(c)의 영상에 관한 분석은 위쪽 납땜 접속부들이 대략 16 화소 떨어진 반복 패턴을 형성함을 보여준다. 그 다음 주요 피크는 32에 있으며, 같은 패턴에 의해 야기되었다. 이 피크의 진폭이 더 낮은 이유는 이 거리에서의 반복 횟수가 16 화소 때보다 작기 때문이다. 비슷한 관찰이 48 화소 오프셋 때의 더 작은 피크를 설명해준다.
질감의 분광 측정
질감의 분광 측정(spectral measure)은 영상의 주기적 또는 거의 주기적인 2차원 패턴의 방향성을 묘사하는 데 적합한 푸리에 스펙트럼에 기반한다. 이러한 전역적 질감 패턴들은 스펙트럼에서 높은 에너지 폭발(burst)이 집중된 형태이므로 쉽게 구별할 수 있지만, 공간적 기법들은 지역적 특성을 갖기 때문에 공간적 방법들로는 검출하기가 매우 어렵다. 따라서, 스펙트럼 질감이 주기적 질감 패턴과 비주기적 질감 패턴을 구별하고, 더 나아가 주기적 패턴들 간의 차이를 정량화하는 데 유용하다.
스펙트럼 특징들의 해석은 스펙트럼을 극좌표 함수 로 표현하면 단순화된다--여기서, 는 스펙트럼 함수, 과 는 극좌표계의 독립변수들이다. 각 방향 에 대해, 는 로 쓸 수 있는 1차원 함수이다. 마찬가지로, 각 주파수 에 대해서 를 로 쓸 수 있다. 어떤 고정된 값에 대해서 를 분석하면 원점으로부터 반지름 방향을 따라서의 스펙트럼의 특성(피크의 존재 여부와 같은)을 알 수 있다. 반면, 어떤 고정된 값에 대해 를 분석하면 원점을 중심으로 하는 원을 따라서의 특성을 알 수 있다.
전역적 묘사는 이 함수들을 적분해서(이산 변수들을 더해서) 얻어진다:
[수식]
그리고
[수식]
여기서, 는 원점을 중심으로 하는 원의 반지름이다.
이들 두 공식의 결과는 각 좌표 쌍 에 대한 값 쌍이다. 이 좌표들을 바꿔서, 전체 영상 또는 영역의 질감에 대한 스펙트럼 에너지 묘사를 구성하는 두 개의 1차원 함수 와 를 생성할 수 있다. 게다가, 이 함수들의 묘사자들 자체는 그들의 특성을 정량적으로 특징짓기 위해서 계산될 수 있다. 이 목적에 사용되는 전형적인 묘사자들은 최고 값의 위치, 진폭 및 축의 편차 모두의 평균과 분산, 함수의 평균과 최고값 사이의 거리이다.
함수 specxture(리스팅은 부록 C 참고)는 앞의 두 질감 척도를 계산하기 위해 사용될 수 있다. 그 문법은 다음과 같다.
[명령]
여기서 srad는 , sang은 , 는 스펙트럼 영상(제 3장에서의 설명에서와 같이, 로그(log)를 사용해서 표시된다)이다.
예제 11.12 스펙트럼 질감을 계산하기.
■ 그림 11.26(a)는 랜덤하게 분포된 객체들을 가진 영상을, 그림 11.26(b)는 같은 객체들이 주기적으로 배열된 영상을 보여준다. 이들에 대해 함수 specxture로 계산한 푸리에 스펙트럼을 그림 11.26(c)와 (d)가 보여준다. 이 푸리에 스펙트럼들에서 에너지 폭발이 사변형으로 주기적으로 퍼져나가는 것은 성냥개비들이 놓인 거칠은 배경 재질의 주기적 질감에 기인한다. 그림 11.26(c) 스펙트럼의 다른 성분들은 그림 11.26(a)의 강한 에지들의 랜덤한 방향에 의해 야기 되었다. 그에 반해서, 배경과 관련 없는 그림 11.26(d)의 주 에너지는 수평축을 따라서 있으며, 그림 11.26(b)의 강한 수직 에지에 해당된다.
[그림]
그림 11.26 (a)와 (b) 정렬되지 않은 객체와 정렬된 객체들의 영상들. (c)와 (d) 해당 스펙트럼들.
그림 11.27(a)와 (b)는 랜덤한 성냥개비들에 대한 과 의 플롯이고, (c)와 (d)는 정렬된 성냥개비들에 대한 플롯으로서, 이들은 모두 함수 specxture로 계산되었다. 플롯들은 plot(srad)와 plot(sang) 명령으로 얻어졌다. 그림 11.27(a)와 (c)의 축들은 그림 11.27(a)로부터 얻어진 최대값과 최소값과 함께, 2.3.1절에서 설명한 다음 명령에 의해 스케일링되었다.
>>[명령]
[그림]
그림 11.27 그림 11.26(a)의 랜덤 영상에 대한 (a) 과 (b) 의 플롯들. (c)와 (d) 정렬된 영상에 대한 과 의 플롯들.
랜덤하게 배열된 성냥개비들에 해당하는 플롯은 강한 주기적인 성분을 보여주지 않는다(즉, 스펙트럼에서 DC 성분인 원점의 피크를 제외하면 피크가 없다). 한편, 정렬된 성냥개비들에 대한 플롯에서는 부근에서 강한 피크, 부근에서 그보다 약간 작은 피크를 볼 수 있다. 비슷한 결과로, 그림 11.26(c)의 에너지 폭발들의 랜덤한 특성이 그림 11.27(b)의 플롯에서 매우 뚜렷하다. 반대로, 그림 11.27(d)의 플롯은 원점 부근과 , 영역에서 강한 에너지 성분들을 보여준다. 이것은 그림 11.26(d)의 에너지 분포와 일관된다.
■
11.4.3 적률 불변량
크기가 M x N인 디지털 영상 f(x, y)의 (p + q)차 2-D 적률은
...
으로 정의된다. 여기서, p = 0, 1, 2, …, q = 0, 1, 2, …는 정수이다. 해당 (p + q)차 중심 적률(central moment)은 p = 0, 1, 2, …와 q = 0, 1, 2, …에 대해서
[수식]
으로 정의된다. 여기서,
...
이다. 차의 정규 중심 적률(normalized central moment)은 p + q = 2, 3, ...에 대해
[수식]
로 정의되며, 여기서,
[수식]
이다.
이 공식들로부터 이동, 크기 변화, 거울 반사(mirroring)(마이너스 부호 내로), 회전에 둔감한 일곱 개의 2차원 적률 불변량(moment invariant)들을 유도할 수 있다. 표 11.6에 이들이 열거되어 있다.
표 11.6 일곱 개의 적률 불변량들.
적률 차수공식
...
주문형 M-함수 invmoments가 이들 7개 공식을 구현한다. 문법은 다음과 같다(코드는 부록 C를 참고한다):
[명령]
여기서, f는 입력 영상, phi는 방금 정의한 적률 불변량을 포함하는 7-요소 행 벡터이다.
예제 11.13: 적률 불변량들.
■ 그림 11.28(a)의 영상은 400×400 크기의 원본으로부터 다음 명령들로 얻어졌다:
>>[명령]
이 영상은 디스플레이된 영상들이 아래에서 설명하는 것처럼 가장 큰 면적(568×568)을 점유하는 회전된 영상과 크기가 일치하도록 제로 패딩을 사용해서 만들어졌다. 이 패딩은 디스플레이 용도일 뿐이며, 적률 계산에는 사용되지 않았다. 이동된 영상은 다음 명령들로 만들었다:
...
[그림 11.28]
(a) 패딩된 오리지널 영상. (b) 이동된 영상. (c) 반으로 축소된 영상. (d) 거울 반사된 영상. (e) 45° 회전 영상. (f)90° 회전 영상.
반으로 축소되고 패딩된 영상을 다음 명령들로 얻었다:
>>[명령]
거울 반사 영상을 함수 fliplr을 이용해서 얻었다:
>>[명령]
영상을 회전하기 위해서는 함수 imrotate를 사용한다:
[명령]
이 명령은 f를 반시계 방향으로 angle 도 만큼 회전시킨다. 파라미터 method는 다음 중의 하나가 될 수 있다:
● ‘nearest'는 최근방 보간법을 사용하고,
● ‘bilinear'는 쌍일차 보간법을 사용하고(일반적으로 좋은 선택),
● ‘bicubic'은 쌍삼차 보간법을 사용한다.
영상 크기는 회전에 맞춰 패딩시켜서 자동으로 커진다. 인자에 ‘crop'이 포함되면, 회전된 영상의 중앙부를 잘라내서(cropping) 원본 영상과 같은 크기로 만든다. 디폴트는 angle만 지정하는 것이며, 이 경우 ’nearest' 보간법이 사용되고, 잘라내기는 하지 않는다.
[그림]
이 예제의 회전된 영상들은 다음과 같이 해서 생성되었다:
>>[명령]
첫 번째 영상은 영상 집합에서 가장 크기 때문에 패딩이 필요 없었다. fr45의 0들은 imrotate가 자동으로 생성했다.
적률 불변량들을 함수 invmoments를 사용해서 계산한다:
>>[명령]
는 원본 영상의 적률 불변량들이다. 대개 적률 불변량 값들은 작고, 자리 수가 몇 자리씩 다름을 알 수 있다:
...
이 숫자들을 log10 변환을 사용해서 동적 범위를 줄임으로써 분석하기 더 쉬운 범위로 가져오자. 원래 수량의 부호는 유지한다:
...
여기서 숫자들 중 하나가 음수이기 때문에 abs가 필요했다. -sign(phi)를 사용함으로써 원래 숫자의 부호를 보존했는데, 여기서 마이너스 부호는, 숫자들이 모두 진분수라서 log10이 계산될 때 음 값이 나오기 때문에 사용되었다. 중요한 사실은 우리가 이 숫자들의 실제 값이 아닌 불변성에 관심이 있다는 것이다. 부호는 영상이 거울 반사되었는지를 검출하기 위해서
앞의 접근법을 그림 11.28의 모든 영상들과 사용하면 표 11.7의 결과가 나온다. 이 값들이 가까움을 주목하고, 이는 높은 불변성을 나타낸다. 이것은 특히 반으로 축소되고 회전된 것 같은 영상의 변화를 고려할 때 주목할 만하다. 기대한 대로, 거울 반사된 영상의 부호는 다른 것들과 다르다.
■
표 11.7 그림 11.28의 영상들에 대한 7개의 적률 불변량들. 이 값들은 다룰 수 있는 범위로 스케일링하고 동시에 각 적률의 부호를 보존하기 위해서 - sgn(
-------------------------------------------------------------------
적률 원본
불변량 영상 이동 절반 크기 거울 반사 회전90° 회전
-------------------------------------------------------------------
-------------------------------------------------------------------
11.5 묘사를 위한 주성분 사용
그림 11.29에 보인 배치로 “적층된(stacked)” 개의 공간 정합된(spatially-registered) 영상들이 있다고 하자. 임의의 주어진 좌표쌍 에 대해서 개의 화소가 존재하며, 각 영상마다 그 위치에 한 화소씩 있다. 이 화소들은 다음과 같이 열벡터 형태로 배치될 수 있다.
[수식]
[그림]
n-차원 열 벡터영상
그림 11.29 같은 크기의 영상 스택의 상응 화소들로부터 벡터를 형성하기.
영상들이 크기일 경우, 개의 영상들의 모든 화소들을 구성하는 총 개의 -차원 벡터가 있을 것이다.
어떤 벡터 군의 평균 벡터 mx는 다음과 같은 샘플 평균으로 근사화될 수 있다:
[수식]
여기서, 이다. 마찬가지로, 벡터 군의 공분산 매트릭스 Cx는 다음과 같이 근사화될 수 있다:
[수식]
여기서, 샘플로부터 Cx의 무편향 추정을 얻기 위해서 대신 을 사용한다.
주성분 변환(principal components transform, 호텔링 변환(Hotelling transform)이라고도 부름)은 다음 식으로 주어진다.
[수식]
매트릭스 A의 행들은 단위 길이로 정규화된 Cx의 고유벡터들이다. Cx가 실수이고 대칭이기 때문에 이 벡터들은 직교정규(orthonormal) 집합을 형성한다. 다음을 보여줄 수 있다(Gonzalez와 Woods[2008]):
...
그리고
...
매트릭스 Cy는 대각선형이며, 그의 주 대각선 상에 있는 요소들은 Cx의 고유값들이다. Cy의 번째 행의 주 대각선 요소는 벡터 요소 의 분산이며, 비대각선 요소 (j, k)는 yj와 yk 요소들 간의 공분산이다. Cy의 비대각선 항들은 0으로서, 이는 변환된 벡터 y의 요소들이 무상관적(uncorrelated)임을 나타낸다.
A의 행들이 직교정규적이므로, 그의 역은 그의 전치(transpose)와 같다. 따라서, 다음의 역변환을 수행해서 x를 복원할 수 있다.
[수식]
주성분 변환의 중요성은 (q < n)개의 고유 벡터만 사용될 때 명백해진다. 이 경우, A는 매트릭스 Aq 가 된다. 이제 복구는 다음의 근사화가 된다:
[수식]
x의 참값과 근사화 복구값 간의 평균 제곱 오차는 다음 공식으로 주어진다.
[수식]
이 식의 첫 줄은 일 때(즉, 모든 고유벡터가 역변환에 사용될 때) 오차가 0임을 나타낸다. 이 식은 또한 Aq를 위해 가장 큰 고유값들과 관련된 개의 고유벡터를 선택함으로써 에러가 최소화될 수 있다는 것을 보여준다. 따라서, 주성분 변환은 벡터 x와 그들의 근사화 간의 평균 제곱 오차를 최소화시킨다는 의미에서 최적이다. 이 변환의 이름은 공분산 매트릭스의 가장 큰(주) 고유값들에 상응하는 고유벡터들을 사용하기 때문에 그렇게 붙여졌다. 이 절에서 나중에 주어지는 예제가 이 개념을 더욱 명확히 해준다.
개의 정합된 영상들의 집합(각각의 크기는 )은 다음 명령에 의해서 그림 11.29에 보인 형태의 스택으로 전환된다:
>>[명령]
크기가 인 이 영상 스택 배열은 다음의 주문형 함수 imstack2vectors(코드는 부록 C를 참고)에 의해 행들이 차원 벡터인 배열로 전환된다:
[명령]
여기서 S는 영상 스택이고, X는 그림 11.29의 방법을 사용해서 S로부터 추출된 벡터들의 배열이다. 입력 MASK는 논리 또는 수치 배열로서, S의 요소들이 X를 형성하는데 사용되는 위치에서는 요소가 0이 아니고, 무시되는 위치에서는 0이다. 예를 들어, 스택의 영상들의 우측 상단 사분면에 있는 벡터들만 사용하려면, 우리는 MASK를 그 사분면에서만 1을 갖고, 그 외의 영역에서는 0을 갖도록 설정한다. 디폴트 MASK는 모두 1이며, 이는 영상의 모든 위치가 X를 형성하는데 사용됨을 의미한다. 끝으로, R은 열 벡터로서, S로부터 추출되는 벡터들의 위치들에 해당하는 선형 인덱스들을 포함한다.
다음의 주문형 함수 covmatrix가 X의 평균 벡터와 벡터들의 공분산 매트릭스를 계산한다.
[소스]
다음 함수는 이 절에서 이제까지 전개된 개념들을 구현한다. 출력 인자들을 단순화하기 위해서 구조체를 사용하고 있다.
[소스]
[측주] [V, D] = eig(A)는 A의 고유벡터들을 매트릭스 V의 열들로 반환하고, 해당 고유값들은 대각선 매트릭스 D의 주 대각선에 반환한다.
예제 11.14: 주성분 사용하기.
■ 그림 11.30은 크기가 512×512 화소인 6개의 위성 영상을 보여준다. 각 영상은 청색 가시광(450-520 nm), 녹색 가시광(520-600 nm), 적색 가시광(630-690 nm), 근적외선(760-900 nm), 중적외선(1550-1750 nm), 열적외선(10,400-12,500 nm)의 여섯 스펙트럼 대역에 해당한다. 이 예제의 목표는 주성분 작업을 위해 함수 principalcomps를 사용하는 방법을 예시하는 것이다. 첫 번째 단계는 앞에서 논의 한 것처럼 여섯 영상 요소들을 512×512×6 크기의 스택으로 정돈하는 것이다:
>>[명령]
여기서, f들은 방금 논의한 여섯 개의 다중 스펙트럼 영상들에 해당된다. 그런 다음, 스택을 전환해서 배열 X에 넣는다:
>>[명령]
그 다음, 함수 principalcomps에 q = 6을 사용해서 여섯 개의 주성분 영상들을 얻는다:
[그림]
그림 11.30 (a) 청색 가시광, (b)녹색 가시광, (c) 적색 가시광, (d) 근적외선, (e) 중적외선, (f) 열적외선 대역의 여섯 개 다중 스펙트럼 영상들. (원본 출처: NASA.)
첫 번째 성분 영상은 다음 명령들로 생성 및 표시한다:
>>[명령]
나머지 다섯 영상도 같은 방식으로 얻어서 표시한다. 고유값들은 P.Cy의 주 대각선에 놓여 있으므로, 다음과 같이 구한다.
>>[명령]
여기서 d는 이 함수에 q = 6을 사용했기 때문에 6차원 열벡터이다.
그림 11.31은 방금 계산한 여섯 개의 주성분 영상들을 보여준다. 가장 명백한 특징은 콘트라스트 디테일의 상당한 부분이 처음 두 영상에 포함되어 있으며, 그 다음부터는 급격히 감소한다는 것이다. 그 이유는 고유값을 조사해 보면 쉽게 설명될 수 있다. 표 11.8이 보여주듯이, 처음 두 고유값들이 다른 것들에 비해서 상당히 크다. 고유값들은 y 벡터들의 요소들의 분산들이며, 분산은 콘트라스트의 척도이므로, 우세한 고유값에 해당하는 영상이 훨씬 더 높은 콘트라스트를 보여준다는 것은 예상 가능하다.
q = 2와 같이 더 작은 q값을 사용한다고 하자. 그러면, 복구에 두 개의 주성분 영상만 사용된다. 각 영상에 대해서 명령
>> P = principalcomps(X, 2);
그리고 다음 형태의 명령들>> h1 = P.X(:, 1);
>> h1 = mat2gray(reshape(h1, 512, 512));
을 사용하면, 그림 11.32의 복원 영상들을 얻는다. 시각적으로, 이 영상들은 그림 11.30의 원본에 상당히 가깝다. 실제로, 차 영상들도 거의 화질 열화를 보여주지 않는다. 예를 들어, 원본과 복원된 1번 대역 영상과 비교하려면 다음과 같이 쓴다.
>>[명령]
[측주] p. 621
적은 수의 성분 영상들을 사용해서 더 큰 영상 집합을 묘사하는 것은 데이타 압축의 한 형태이다.
[측주] p. 621
P.X(:, 1)의 값들은 [0, 1] 범위를 벗어난다. mat2gray를 사용하면 h1의 밝기들을 이 범위로 스케일링한다.
그림 11.31 그림 11.30의 영상들에 해당하는 주성분 영상들.
[그림 11.32] 분산이 가장 큰 두 개의 주성분 영상들만을 사용해서 복구된 다중 스펙트럼 영상들. 그림 11.30의 원본과 비교해 본다.
표 11.8 q = 6일 때의 P.Cy의 고유값들.
--------------------------------------------
--------------------------------------------
[그림]
그림 11.33 (a) 그림 1130(a)와 그림 11.32(a) 간의 차이. (b) 그림 11.30(f)와 그림 11.32(f) 간의 차이. 두 영상 모두 전체 [0, 255]의 8-비트 밝기 스케일로 스케일링됨.
그림 11.33(a)가 결과를 보여준다. 이 영상의 낮은 콘트라스트는 원래의 영상을 복구하는데 두 개의 주성분 영상만을 사용했을 때 시각적 데이타가 거의 손실되지 않았음을 의미한다. 그림 11.33(b)는 6번 대역 영상들의 차이를 보여준다. 여기서의 차이는 원래의 6번 대역 영상이 실제로 흐릿하기 때문에 더 현저하다. 그러나, 복원에 사용된 두 주성분 영상들은 선명하고, 이들은 복원에 가장 큰 영향을 준다. 단지 두 개의 주성분 영상들을 이용함으로써 생기는 평균 제곱 오차는 다음과 같이 주어진다.
[명령]
이것은 표 11.7의 가장 작은 4개의 고유값들의 합이다.
이 절을 마치기 전에, 함수 principalcomps를 사용해서 객체들을 주요 고유값들에 해당하는 고유 벡터들의 방향으로 정렬시키는 방법을 예시한다. 앞에서 언급했듯이 고유값은 분산(데이타의 확산)에 비례한다. 이 접근법의 기본 아이디어는, 객체의 2-D 좌표들로부터 X를 형성함으로써, 공간적으로 객체를 주 데이타 확산 방향으로 정렬하는 것이다. 예제를 이용해서 이 방법을 예시한다.
예제 11.15: 객체 정렬을 위해 주성분을 사용하기.
[그림 11.34] 첫 행: 원래 글자들. 둘째 행: 주성분을 사용해서 정렬된 글자들.
그림 11.34의 첫 행은 랜덤한 방향으로 놓인 세 글자들의 영상을 보여준다. 이 예제에서의 목표는 주성분을 사용해서 글자들을 수직으로 정렬하는 것이다. 이 절차는 자동 영상 분석에서 객체 방향을 가늠해서, 후속 객체 인식 작업을 단순화하기 위해 사용되는 전형적인 기법이다. 다음에서, 그림 11.34(a)에 대해 세부 단계를 수행해보자. 나머지 영상들도 같은 방법으로 처리된다.
맨 먼저 데이타를 이진 형태로 전환한다. 즉, 첫 영상에 대해, 다음 연산을 수행한다.
...
그 다음 단계는 모든 1 값 화소들의 좌표들을 추출하는 것이다:
...
그러고 나서, 이 좌표들로부터 배열 X를 형성하고,
...
함수 principalcomps를 적용하고,
...
입력 좌표들을 변환 매트릭스 A를 이용해서 출력 좌표들로 변환한다:
...
여기서 전치는 X의 모든 요소들이, 단일 벡터에 의해 기술된 원래 식과 달리, 한 단위로서 처리되기 때문에 필요하다. 또한 원래 공식에서와 달리 평균 벡터를 빼지 않은 것도 주목한다. 그 이유는 평균을 빼면 변환된 좌표들의 원점이 바뀌기 때문이다. 우리는 출력을 입력과 비슷한 위치에 놓는데 관심이 있으며, 이것은 데이타로부터 직접 위치 정보를 추출해서 하면 더 쉽다. 이 작업을 다음과 같이 한다:
...
여기서 마지막 두 명령은, 최소 좌표들이 변환 전의 원래 데이타에 대해서와 대충 같게 되도록 좌표들을 옮긴다.
최종 단계는 변환된 (Y) 데이타로부터 출력 영상을 형성하는 것이다:
...
[측주] 함수 sub2ind는 주어진 첨자(subscript) 값들의 집합에 해당하는 등가의 단일 인덱스를 계산하는데 사용된다.
처음 명령은 변환된 좌표들로부터 선형 인덱스를 형성하며, 마지막 명령은 그 좌표들을 1로 설정한다. X로부터 Y로의 변환과 y1과 y2를 형성할 때 사용된 정수화 연산이 일반적으로 출력 객체들의 영역에 작은 틈(0 값 화소)들을 만든다. 이들은 3x3 구조 요소로 데이타를 팽창 후 침식(즉, 닫기)시킴으로써 채워진다:
...
끝으로, 이 영상을 표시하면 그림의 글자 A가 거꾸로 보일 것이다. 일반적으로 주성분 변환은 데이타를 주 확산 방향으로 정렬하지만, 그 정렬이 반대 방향으로 180°가 아닐 것이라는 보장은 없다. 이를 보장하려면 이 과정에 어떤 “지능”이 내장될 필요가 있다. 이것은 현재 논의를 벗어나므로, 우리는 시각적 분석을 이용해서 글자가 제대로 향하도록 데이타를 회전시킨다.
...
그림 11.34(d)의 결과가 보여주듯이, 이 방법은 객체를 그의 주 방향(principal direction)으로 정렬시키는 일을 그런대로 잘 해냈다. 그림 11.34(a)의 좌표들은 (x1, x2)이고, 그림 11.34(d)에서는 (y1, y2)이다. 방금 논의된 접근법의 중요한 특징은 출력을 얻는데 사용되는 변환 매트릭스를 형성할 때 입력의 모든 좌표 점들(X에 포함된)을 사용한다는 것이다. 그러므로, 이 방법은 무관한 점들(outliers)에 대해 적당히 둔감하다. 그림 11.34(e)와 (f)의 결과들은 비슷한 방식으로 생성되었다.
요약
영상으로부터 분할된 객체 또는 영역을 표현 및 묘사하는 것은, 차후에 자동화에서 사용하기 위한 영상 데이타 준비의 초기 단계이다. 이 장에서 다뤄진 것들과 같은 묘사자들은 다음 영상처리의 그 다음 단계인 객체 인식 알고리듬들의 입력이 된다. 앞 절들에서 전개한 주문형 함수들은 영상의 표현과 묘사를 위해 쓸 수 있는 IPT 함수들의 파워를 현저히 개선한다. 다른 유형들에 우선해서 특정 유형의 묘사자를 선택하는 것은 주어진 문제에 의해 크게 좌우된다는 사실은 지금쯤은 분명할 것이다. 이것은 유연성을 얻고 개발 시간을 줄이기 위해서 기존 함수들이 새로운 코드와 통합될 수 있는 유연한 프로토타입화 환경을 갖추는 것이 영상처리 문제 해결에 크게 도움을 주는 주요 이유들 중 하나이다. 이 장의 내용은 그런 환경의 기초를 구축하는 방법에 대한 훌륭한 예이다.