개발자 끄적끄적
영상의 형태적 처리 본문
<영상의 형태적 처리>
- 기본 개념
- 수학적 형태학의 이론은 여러 가지 방법으로 발전될 수 있다
점들의 집합으로 연산되는 한가지 표준 방법을 채택한다
<이동(Translation)>
- 화면의 오브젝트(object)를 일정한 양만큼 가로축(x) 또는 세로축(y)으로 이동시킨다
*직각좌표계 : 왼쪽 아래쪽이 0점(x축이 가로, y축이 세로)
영상좌표계 : 왼쪽 위에쪽이 0점(x축이 세로, y축이 가로)
<반사(reflection)>
- 오브젝트(object)를 기준점을 기준으로 거울에 비치듯이 반사시킨다
<팽창(Dilation)과 침식(Erosion)>
- 팽창과 침식은, 여러 가지 연산들이 이들 2가지 결합으로 이루어지는 형태학의 기본 연산이다
<팽창(Dilation)>
- 마스크(Mask) 내에 있는 오브젝트의 좌표 만큼 모두 이동시킨 다음 합쳐주는 것
- hole(구멍)을 매꿔주는 역할(물체의 크기를 증가시키는 효과) -> 원래의 object보다 확장
- 팽창은 또한 Minkowski addtion으로 알려져 있다
- 팽창은 교환법칙이 성립된다
>>imdilate(image, kernel) //kernel은 Mask
- ex)
>> t=imread('text.tif');
>>sq=ones(3,3);
>>td=imdilate(t, sp);
>>subplot(1,2,1), imshow(t)
>>subplot(1,2,2), imshow(td)
<침식(Erosion)>
- 영상 내 객체 인식을 위하여 불필요한 부분을 제거한다
- 마스크를 원본영상에 포함되는 부분을 골라내어 (0,0)점에 대응하는 집합을 만든다
이렇게 얻어진 모든 집합이 침식의 결과이다
- 침식은 Minkowski subtraction으로 알려져있다
>>imerode(image, kernel) //kernel은 Mask
- ex)
>>c=imread('circbw.tif');
>>ce=imerode(c,sq);
>>subplot(1,2,1), imshow(c)
>>subplot(1,2,2), imshow(c)
<침식과 팽창과의 관계>
- 침식과 팽창이 서로 반대의 연산임을 알 수 있다
특히 침식에 대한 전체의 보수(complement)는 각 보수(complement)에 대한 팽창과 등가이다
*보수 : 0과 1을 뒤집은 것
>>~b //이진 영상 b의 보수
>>all(a(:)==b(:)) //조건문(a라는 영상과 b라는 모든(:) 영상 데이터가 참이 된다면 참(return=1(참), 0(거짓)))
- ex)
>>1hs=~imerode(t,sq); //square mask로 침식
>>rhs=imdilate(~t,sq); //보수를 취해 square mask로 팽창
>>all(1hs(:)==rsh(:)) //return : 1(참)
<경계선 검출(Boundary dectection)>
- internal boundary : 원본영상 - 침식 = 원본영상과 경계역영의 크기가 똑같다
- external boundary : 팽창-원본영상 = 원본영상보다 크기가 커진다
- morphological gradient(형태학적 기울기) : 팽창-침식 = 원본영상보다 더 커지면서 두께도 더 두꺼워진다
- ex)
>>rice=imread('rice.tif');
>>r=rice>110; //110보다 큰 데이터는 1로 Mapping 그렇지 않으면 0으로 Mapping
>>re=imerode(r,sq);
>>r_int=r&~re; //원본영상-침식영상
>>subplot(1,2,1), imshow(r) //팽창-원본영상
>>subplot(1,2,2), imshow(r_int) //팽창-침식
<열림(Opening)과 닫힘(Closing)>
- 이들 연산은 팽창과 침식의 기본 연산으로 2차적 연산으로 실행한다
- 열림 연산(Opening)
- 침식연산 후 팽창 연산
- 원본영상보다는 더 작게 나온다
- 완전히 A(원본영상)의 내부에 포개지는 모든 B(Mask)의 이동을 조합
- 함수 : imopen
- 열림 연산의 성질
1. 열림 연산은 원본영상에 포함이 된다
2. 열림 연산은 1회 이상 처리할 필요가 없다
이 성질은 idempotence(제곱한 것과 같은 값)라는 특성을 가진다
3. 열림 연산은 영상을 스므딩하는 경향이 있고, 좁은 연결점을 끊으며, 돌출부분을 제거하는 성질을 가진다
*스므딩 : 거친 부분을 제거
*'좁은 연결점을 끊는다' : 눈사람을 예로 들면 눈사람자체를 하나로 볼 수 있지만 머리부분과 몸통부분을 끊어서 보여준다
<닫힘 연산(Closing)>
- 팽창 연산 후에 침식연산
- 함수 : imclose
- 닫힘 연산의 성질
1. 원본영산은 닫힘연산에 부분집합
2. 닫힘 연산은 1회 이상 처리할 필요가 없다
3. 닫힘 연산은 영상을 스므딩하지만, 좁은 연결점을 융합하고 갈라진 틈을 좁히며 작은 홀을 제거한다
<잡음제거>
- 열림 ㅡ 영상하고, 닫힘영상
이것이 소위 '형태학적 필터링'이다
<Hit-or-Miss 변환>
- 영상에서 형태를 찾기 위한 하나의 강력한 방법
<여러 가지의 형태적 알고리즘>
- 영역 채우기(Region filling)
- 영상에서 8-연결 경계에 의해 영역경계를 가진다고 가정
그 영역 내에 화소 p가 주어지면, 전체 영역에 걸쳐서 채우기를 한다
이렇게 하기 위해 p에서 출바하여 교차형 구조적 커널 B로서 필요한 만큼의 팽창을 한다
<연결 성분>
- 4-연결 성분을 위해 교차형 구조의 커널을 이용하고 8-연결 성분을 위해 정방형 구조의 커널을 사용한다. 화소 p에서 시작하면, 집합의 수열을 만들면서 해당 성분이 나머지를 채운다
- 4연결
1
1 1 1
1
- 8 연결
1 1 1
1 1 1
1 1 1
<골격화 처리(Sketetonization)>
- 이진 영상에서 물체의 골격은 그 물체의 사이즈가 모양을 캡슐로 보호하는 라인과 곡선들의 모임이다
- 원본영상에 대해 k번 침식 -> 공집합이 될 때까지
Erosions(침식) - Opening(침식 후 팽창) = Set difference(차이값=골격화처리)
- 이 골격화의 방법을 Lantuejuol's method라고 한다
- ex) 골격화 계산의 간단한 프로그램 list
function skel = imskel(image, str)
skel=zeros(size(image));
e=image;
while(any(e(:))), //공집합이 아니라면
o=imopen(e,str); //오픈영상
skel=skel | (e&~0);
e=imerode(e,str);
end
'영상처리' 카테고리의 다른 글
디지털 위상 기하학(digital topology) (0) | 2023.05.22 |
---|---|
영상의 영역분할 (0) | 2023.05.05 |
영상 복원 (0) | 2023.04.28 |