개발자 끄적끄적

영상의 형태적 처리 본문

영상처리

영상의 형태적 처리

햏치 2023. 5. 11. 14:49

<영상의 형태적 처리>
- 기본 개념
  - 수학적 형태학의 이론은 여러 가지 방법으로 발전될  수 있다
    점들의 집합으로 연산되는 한가지 표준 방법을 채택한다



<이동(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