DevKim

[영상처리] MATLAB 주파수 : 저역통과 및 고역통과 필터 본문

영상처리

[영상처리] MATLAB 주파수 : 저역통과 및 고역통과 필터

on_doing 2020. 10. 7. 20:58
728x90

- 주파수

영상에선 정해진 공간에서 얼마나 밝기 값이 왔다갔다 반복을 많이 하는지를 말함

 

 

 - 고주파 성분

: 짧은 거리 내에 밝기 값의 변화가 매우 큰 성분

(ex) 에지, 잡음

 

- 저주파 성분

: 밝기 값이 거의 변하지 않는 성분

(ex) 단색 벽,피부

 

 

1. 고역통과 필터

: 고주파 성분들을 통과시키고, 저주파 성분들을 줄이거나 제거하는 필터

에지 검출 , 에지 강조

 

4 주변으로 값의 변화가 큼


1. fspecial('laplacian')

 

c=imread('camera.tif');
f1=fspecial('laplacian') #필터 생성

f1 필터

cf1=filter2(f1,c); #필터 적용
figure,imshow(uint8(cf1)); #output이 double형이므로 uint8로 변환

 


. fspecial('log')

 

f2=fspecial('log’)

cf2=filter2(f2,c);
figure,imshow(uint8(cf2));

 


2. 선형필터를 적용할 때의 문제점

- 영상으로 디스플레이하기 위해서는 밝기 값아 0~255 사이에 있어야 함

but, 선형 필터 사용시 이 범위를 벗어날 수 있다..!!!!

 

따라서 display를 위해 0~255 밖의 값을 처리해야됨

 


> 방법 1. 음수를 양수로 만들기

→ 음수 문제는 해결할 수 있지만, 255 보다 큰 값은 처리할 수 없음

 

>방법 2. 값을 제한하기

→ 음수와 양수 문제를 모두 해결할 수 있으나

정보의 손실이 커짐

 

 

>방법 3. 스케일링 변환

→ 필터링 결과의 최소값이 0이 되도록, 최대값은 255가 되도록 선형변환 !!

 


<스케일링 변환>

 

~방법1~

 

mat2gray(cf2)

f2=[1-2 1; -2 4 -2;1 -2 1];
cf2=filter2(f2,c);

figure,imshow(mat2gray(cf2)); #최대값을 1, 최소값을 0으로 만듦

→ 이때 검은색 선은 원래 음수인데 작은수이고 ( 작은 음수 -> 0 )

흰색은 양수인데 큰 값 ( 0-> 127 ),

회색은 0에 가까운 색이었을 것이다(큰 양수 ->255).

 

~방법2~

 

직접 계산하기

 

 

maxcf2=max(cf2(:));
mincf2=min(cf2(:));
cf2g=(cf2-mincf2)/(maxcf2-mincf2);

figure,imshow(cf2g)


3. 고역통과 필터는 에지(edge) 검출에 자주 이용된다!

 

f2=[1 -2 1;-2 4 -2;1 -2 1];
cf2=filter2(f2,c);

figure,imshow(abs(cf2)>40); # abs: 절댓값 함수 - 이 조건을 만족하면 1, 만족 안하면 0으로 

→ 오른쪽에서 하늘은 엣지 성분이 많이 없어 검정색으로, 바닥은 에지점들이 많이 검출됨을 확인할 수 있음

728x90
Comments