Matlab을 이용한 영상처리 - 8. 샤프닝과 ROI 처리

Programming/Image Processing 2010. 8. 30. 19:49
저번 글에서 고주파와 저주파 필터에 대해 살펴보았다 .
이번 포스팅은 좀더 실용적인 부분에 주안점을 두게 될것인데 ,

1. sharen
첫번째로 살펴 볼 내용은 edge sharpen이다 . 이 필터를 사용하게 되면 뚜렷하게 이미지를 볼 수가 있다.
알고리즘은 이러하다 .

원 영상에서 평균 필터링으로 얻은 영상을 빼주면 뚜렷한 부분만 남게 된다 . 

 

10 번 , 11번 라인에서 평균 필터링 이미지를 만들고 12번라인에서 원 영상에서 이 값을 빼어주고 있다.
결과를 보자.


2 번 글의 이미지와 비교해보기 바란다. 산부분에서 좀더 뚜렷한 이미지가 보인다.

 샤프닝
1. 원영상 - average로 흐릿해진 영상
2. 정의된 필터 (unsharp)사용



2. ROI

지금까지 필터링을 영상 전체에 걸쳐 적용시켰다면, ROI(Region of interest)는 영역을 지정하고 그 영역내에서만 필터링등을 적용한다.

roipoly 함수를 이용하여 해당 영역을 지정할 수 있는데, 그 좌표값은 [열][행] 순이며, 적은 순서대로 선을 이어 영역을 만드는 형태이므로 순서를 제대로 지키지 않으면 영역이 맞꼭지각을 이루는 리본모양이 될 수도 있으니 주의!

영역을 설정하고 나면 roifilt2를 이용하여 해당 영역에만 만들어놓은 필터를 적용가능하니 이용해보자.


roi 변수에 영역을 지정하고, average 와 unsharp를 이용해보았다.




아래쪽의 팔목에만 각각 unsharp, average 필터를 적용하였다.
그 차이는 일목요연하다.

 roi
roipoly(image, [열],[행]);  -  영역 지정
roifilt2(filter,image,region);  -  지정 영역에 필터 적용

Matlab을 이용한 영상처리 - 7. 고주파 필터, 저주파 필터

Programming/Image Processing 2010. 8. 27. 17:28

영상처리에서 작은 영역에서 픽셀의 변화가 클때 고주파라고 지칭하고, 픽셀의 변화가 작을때  저주파라고 지칭한다.
고주파 필터는 고주파만을 살리고 저주파들을 감소시키거나 없애는 필터이며,
저주파 필터는 저주파만을 살리고 고주파들을 감소시키거나 없앤다.

고주파필터의 예로 laplacian, 저주파필터의 예로 gaussian이 있다.

이번 포스팅에서는 상기 두개의 필터링을 사용해보자.

먼저 고주파 필터부터 생각해보자.
이미지에서 어떤 부분들이 고주파가 될 수 있을까? 에지(edge) 부분이 고주파가 될 가능성이 크다.

때문에 고주파 필터를 사용하면 대체로 이미지가 분명해 진다.

고주파 필터의 마스크는 다음과 같은 형태이다.

              1    -2    1
Mask  =  -2    -4   -2
              1    -2    1

Mask의 큰 특징은, 바로 배열 내부의 값들의 합이 0이라는 것이다.

filterring을 할때, 마스크들의 각 인덱스와 이미지의 픽셀들을 곱해 총 합을 구하여 그 중앙의 픽셀을 결정한다는 것을 잊지말자.
만약 저주파라면 주변픽셀들의 값들이 비슷하기 때문에 더했을때 대체로 0에 가까울 수 밖에없으며,
반대로 고주파일때는 큰값을 가지게 된다.

소스를 살펴보자.


11번라인에서 laplacian 필터를 선택하고 있다. laplacian은 실제로는

           0.1667    0.6667     0.1667
Mask = 0.6667   -3.3333    0.6667
           0.1667    0.6667     0.1667

와 같은 값을 가지고 있다. 이 마스크 값의 합도 0에 가깝다 .

12번라인에서 필터를 이미지 g에 적용하고 13번에서 출력하고 있다.
결과를 보자.


이처럼 경계들이 강조된 이미지가 출력된다.



반대로 저주파 필터링인 Gaussian은 표준함수를 이용하는데 , σ 가 커지면 표준함수가 퍼지고 , 작아지면 표준함수가 집중되는 양상을 보인다.



11~12라인까지 필터 사이즈 11 x 11 , σ = 0.5 인 가우시안 필터를 만들어 적용,
13라인에서 3차원 그래프 ( 해당 필터 )

16~17라인까지 필터 사이즈 11 x 11, σ = 2 인 가우시안 필터 적용,
18에서 그래프를 출력하고 있다.


결과는 다음과 같다 .


첫번째 filter - f 의 결과는 원본과 별 차이가없어 이미지 첨부를 생각하였다.
두번째 필터와 그 그래프를 보면 대체적으로 average 필터와 비슷한 결과를 출력함을 확인할 수 있다.

Matlab을 이용한 영상처리 - 6. 필터링이란?

Programming/Image Processing 2010. 8. 27. 14:28

Filter는 그 단어의 의미대로 특정 픽셀을 거르는 역할을 한다.

마스크에 해당하는 배열을 넘겨주면 그것을 현재 픽셀과 그 주변 픽셀과의 계산을 통해 적절한 결과를 낸다.

그 계산 과정을 c 언어로 표현하자면, 

for(int i = 1 ; i < N; i ++ ){
  for( int j = 0; j < M; j++){
    for(int offset_I = -3; offset_I < 3 ;  offset_I ++){
       for(int offset_j = -3; offset_j < 3; offset_j++){
           product =  마스크배열[offset_i][offset_j] * 주변픽셀[offset_i][offset_j];
           sum += product;
       }    
    }//주변 픽셀 검색
     image[i][j] = sum;
  }
}//전체 이미지 픽셀
와 같은 형태다. 

주어지는 마스크 배열에 따라 이 결과는 천차만별인데 , 이를 이용해 이미지에 다양한 변화를 줄 수가 있다.

이번 포스팅에서는 평균필터링과 고주파 필터링에 대해 살펴본다.

평균필터의 형태는 다음과 같다. ( 3 X 3 일때 )

1/9 * [ 1 1 1 ; 1 1 1 ; 1 1 1] 

위의 알고리즘과 연계해서 생각해보면, 현재 수정하고 있는 픽셀의 값은 주변 픽셀들과 자신을 평균내어 결정 된다는 것이다.

평균을 낸다면 이미지는 ? 경계선뿐만아니라 이미지가 전체적으로 흐려지게 될것이다. 
(모든 픽셀이 주변픽셀들의 값과 비슷해진다는 얘기니까.)

이해를 돕기위해 간단한 예를 들어보자.

255    0   255
250    0   250
150   10  150

와 같은 3 X 3 의 원본 이미지가 있다. 
원본이미지는 중앙에 선명한 검은 선이 있다.
현재 정중앙의 픽셀을 검색하고 있다고 할 때 이 이미지에 평균 필터링을 적용하면,

255 * 1/9 + 255 * 1/9 + 250 * 1/9 + 250 * 1/9 + 150 * 1/9 + 150 * 1/9 = 146.6666...

이미지는 

255  0   255
250 146 250
150  10 150

이 된다. 한 픽셀에만 적용해보았지만 중앙의 경계선이 뭉개졌다.
이와 같은 과정이 전체 이미지에 적용된다면 전체 이미지가 흐려질 것이라고 이해할 수 있다.

Matlab에서는 필터를 만들때 fspecial이라는 함수를, 
필터를 적용할때 filter2(filter,image, shape)의 함수를 이용한다.

직접 저렇게 필터배열을 넘겨주어도 되지만 자주 이용되는 필터는 Matlab에 이미 배열로 저장되어 있다.

평균필터링은 'average'로 호출할수있으며, fspecial 첫번째 인자로 지정가능하며 두번째 인자로 마스크의 크기를 지정할 수 있다.

평균필터링의 실행 결과를 보자.



확연한 차이를 보이기위해 마스크의 크기를 11 X 11로 처리했다.
원영상과 비교해 확실히 흐리게 나타났다.