대학 수강과목/디지털영상처리

[DIP]디지털영상처리 연습문제 7장 - 문제 및 해설

흐이애 2016. 11. 8. 16:39

[DIP]디지털영상처리 연습문제 7장 - 문제 및 해설

1. DFT계산

a. [2, 3, 4, 5]

 이므로,

와 같이 표현할 수 있다.

a번 문제에서 N=4이므로,

 이다.

 이므로 F는 다음과 같이 계산할 수 있다.



b. [2, -3, 4, -5]

a번과 마찬가지로 N=4이므로,

 이다.

 이므로 F는 다음과 같이 계산할 수 있다.



c. [-9, -8, -7, -6]


d. [-9, 8, -7, 6]


3. 수열 쌍에 대한 회선이론 검증

 이고, N=4이므로



에 의하여


(a)


>> conv(a,b)

ans =

    -2     0    -4     0    14     0    32

>> ans/4

ans =

   -0.5000         0   -1.0000         0    3.5000         0    8.0000


(b) 


>> conv(a,b)

ans =

12    19    43    48    32    29    -7

>> ans/4

ans =

    3.0000    4.7500   10.7500   12.0000    8.0000    7.2500   -1.7500


5. 행과 열에 DFT 계산

명령어 목록

a = [4 5 -9 -5; 3 -7 1 2;6 -1 -6 1; 3 -1 7 -5];

a1 = fft(a.').'

a2 = fft(a1)

fft2(a)


a. fft(a1) 명령을 사용하여 다음과 같은 출력을 얻을 수 있다.

>> a2 = fft(a1)

a2 =

  -2.0000 + 0.0000i  23.0000 - 3.0000i  20.0000 + 0.0000i  23.0000 + 3.0000i

  -5.0000 + 5.0000i  14.0000 -18.0000i  -5.0000 + 7.0000i -12.0000 + 6.0000i

  -8.0000 + 0.0000i  27.0000 -13.0000i -30.0000 + 0.0000i  27.0000 +13.0000i

-5.0000 - 5.0000i -12.0000 - 6.0000i  -5.0000 - 7.0000i  14.0000 +18.0000i


b. fft2(a) 명령을 사용하여 다음과 같은 출력을 얻을 수 있다.

>> fft2(a)

ans =

  -2.0000 + 0.0000i  23.0000 - 3.0000i  20.0000 + 0.0000i  23.0000 + 3.0000i

  -5.0000 + 5.0000i  14.0000 -18.0000i  -5.0000 + 7.0000i -12.0000 + 6.0000i

  -8.0000 + 0.0000i  27.0000 -13.0000i -30.0000 + 0.0000i  27.0000 +13.0000i

  -5.0000 - 5.0000i -12.0000 - 6.0000i  -5.0000 - 7.0000i  14.0000 +18.0000i


두 행렬은 같은 것을 알 수 있다.


7. 평균필터링과 푸리에 변환

a. 평균필터링 후 푸리에 변환. 출력에 어떤 영향?


사용 명령어

c = imread('cameraman.tif');

f5 = 1/25 * ones(5)

c2 = fft2(filter2(f5, c));

c3 = ifft2(c2);

imshow(double(c3)/255)

영상이 흐릿해지고, 엣지 부분이 까맣게 변하는 것을 알 수 있다.


b. cameraman 영상의 DFT와 5X5 평균필터링 후의 DFT를 비교.

사용 명령어

c = imread('cameraman.tif');

f5 = 1/25 * ones(5)

c1 = fft2(c);

c2 = fft2(filter2(f5, c));

fftshow(fftshift(c1)), figure, fftshow(fftshift(c2));


(좌) c1. 평균 필터를 사용하지 않고 푸리에 변환한 결과이다.

(우) c2. 5X5 평균 필터를 사용한 후 푸리에 변환한 결과이다.


c. 결과에 대한 설명

평균 필터를 사용한 경우, 격자무늬가 생겼다.


d. 평균필터 크기 증가시키는 경우 변화.

  

(좌) 3X3 평균 필터를 사용한 후 푸리에 변환한 결과이다.

(우) 9X9 평균 필터를 사용한 후 푸리에 변환한 결과이다.

평균 필터의 크기가 증가함에 따라 격자무늬가 더욱 촘촘해지는 것을 볼 수 있다.


9. engineer.tif 영상에 대하여 수행

a. 이상적인 필터(저역/고역)

1) 저역필터

사용 명령어

[x, y] = meshgrid(-128:127, -128:127);

z = sqrt(x.^2+y.^2);

c=(z<15);

fftshow(c,'log');

en = imread('engineer.tif');

enf = fftshift(fft2(en));

fftshow(enf, 'log')

enf1 = enf.*c;

figure, fftshow(enf1, 'log')

enfli = ifft2(enf1);

figure, fftshow(enfli, 'abs')

   

(좌) enf. 영상을 fft변환한 모습.

(우) enf1. enf를 원 크기만큼 자른 모습.


위의 enf1를 역변환하여 출력한 영상.


2) 고역필터

사용 명령어

[x, y] = meshgrid(-128:127, -128:127);

z = sqrt(x.^2+y.^2);

c=(z>15);

fftshow(c,'log');

en = imread('engineer.tif');

enf = fftshift(fft2(en));

enfh = enf.*c;

figure, fftshow(enfh, 'log')

enfhi = ifft2(enfh);

figure, fftshow(enfhi, 'abs')


(좌) enfh. enf를 원 크기를 제외한 영역으로 자른 모습.

(우) enfhi. enfh를 역변환하여 출력한 영상. 고주파수 성분만 남아있다.


b. 버터워스 필터

1) 저역필터

사용 명령어

[x, y] = meshgrid(-128:127, -128:127);

en = imread('engineer.tif');

enf = fftshift(fft2(en));

bl = 1./(1+((x.^2+y.^2)/15^2).^2);

enfbl = enf.*bl;

fftshow(enfbl, 'log')

enfbli = ifft2(enfbl);

figure, fftshow(enfbli, 'abs')


  

(좌) enfbl. 버터웍스 저역통과 후의 DFT 결과.

(우) enfbli. enfbl 필터를 적용한 결과 영상.


2) 고역필터

사용 명령어

[x, y] = meshgrid(-128:127, -128:127);

en = imread('engineer.tif');

enf = fftshift(fft2(en));

bl = 1./(1+((x.^2+y.^2)/15^2).^2);

bh = 1-bl;

enfbh = enf.*bh;

fftshow(enfbh, 'log')

enfbhi = ifft2(enfbh);

figure, fftshow(enfbhi, 'abs')

  

(좌) enfbh. 버터웍스 고역통과 후의 DFT 결과.

(우) enfbhi. enfbh 필터를 적용한 결과 영상.


c. 가우시안 필터

1) 저역필터

사용 명령어

en = imread('engineer.tif');

enf = fftshift(fft2(en));

g1 = mat2gray(fspecial('gaussian',256,10));

eng1 = enf.*g1;

fftshow(eng1, 'log')

g2 = mat2gray(fspecial('gaussian', 256, 30));

eng2 = enf.*g2;

figure, fftshow(eng2, 'log')

engi1 = ifft2(eng1);

engi2 = ifft2(eng2);

figure, fftshow(engi1, 'abs');

figure, fftshow(engi2, 'abs');

(좌) eng1. 표준편차 10을 적용한 가우시안 필터의 저역통과 결과.

(우) engi1. eng1을 적용한 결과 영상.

  

(좌) eng2. 표준편차 30을 적용한 가우시안 필터의 저역통과 결과.

(우) engi2. eng2을 적용한 결과 영상.


2) 고역필터

사용 명령어

en = imread('engineer.tif');

enf = fftshift(fft2(en));

g1 = mat2gray(fspecial('gaussian',256,10));

h1 = 1-g1;

enh1 = enf.*h1;

fftshow(enh1, 'log')

g2 = mat2gray(fspecial('gaussian', 256, 30));

h2 = 1-g2;

enh2 = enf.*h2;

figure, fftshow(enh2, 'log')

enhi1 = ifft2(enh1);

enhi2 = ifft2(enh2);

figure, fftshow(enhi1, 'abs');

figure, fftshow(enhi2, 'abs');

 

(좌) enh1. 표준편차 10을 적용한 가우시안 필터의 고역통과 결과.

(우) enhi1. enh1을 적용한 결과 영상.


 

(좌) enh2. 표준편차 30을 적용한 가우시안 필터의 고역통과 결과.

(우) enhi2. enh2을 적용한 결과 영상.


얼굴을 인식할 수 있으면서 이상적인 저역통과 필터의 가장 작은 반경은?

반경 13을 사용한 저역통과 필터를 적용했을 때 가장 작은 반경이면서 얼굴을 인식할 수 있었다.

반응형