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

6. 

수염을 볼 수 있는 가장 큰 필터사이즈는 19X19이다.

수염을 볼 수 없는 가장 작은 필터사이즈는 21X21이다.

위 두 사진에 대한 m파일 소스는 다음과 같다.

function PrtFil

load('mandrill.mat');

tmp = ind2gray(X,map);

m=im2uint8(tmp);

f = fspecial('average', 19);

m2 = filter2(f, m);

imshow(mat2gray(m2));

f2 = fspecial('average', 21);

m3 = filter2(f2, m);

figure, imshow(mat2gray(m3));


7. 

Size

Standard deviation

[3, 3]

0.5

1

2

[7, 7]

1

3

6

[11, 11]

1

4

8

[21, 21]

1

5

10


Size가 11X11인 필터 중 편차가 4, 8인 값과 Size가 21X21인 필터 중 편차가 5, 10인 값에서 콧수염이 보이지 않는다.

위 사진들에 대한 m파일 소스는 다음과 같다.

function Gauloop

m = [3,7,11,21];

sd = [0.5 1 2; 1 3 6; 1 4 8; 1 5 10;];

 

load('mandrill.mat');

tmp = ind2gray(X,map);

im=im2uint8(tmp);

 

for i=1:4

    for j=1:3

        g = fspecial('gaussian', [m(i) m(i)], sd(i, j));

        im2 = filter2(g,im);

        figure, imshow(mat2gray(im2));

    end

end


8. 평균 필터링을 사용한 경우, 필터사이즈가 클수록 흐려지는 것을 볼 수 있다. 이는 해당 필터사이즈만큼의 픽셀 값들을 평균 내는 것이다. 필터사이즈가 크면 클수록 더 넓은 범위의 픽셀들까지 영향을 미친다. 그러므로 상관이 없는 픽셀들까지 영향을 미치므로 더욱 흐려지게 되는 것이다. 가우시안 필터의 경우, 픽셀의 중앙 부분에만 영향을 미친다. 필터 값이 중앙으로 좁게 몰려있을 경우 주변 픽셀들의 영향을 거의 받지 않기 때문에 거의 흐려지지 않는다.


15. 출력 영상은 다음과 같다.

사용한 명령어는 다음과 같다.

c = imread('cameraman.tif');

cmin = nlfilter(c, [3,3], 'min(x(:))');

cmax = colfilt(c, [3,3], 'sliding', @max);

imshow(cmax), figure, imshow(cmin)

figure, imshow(imsubtract(cmax,cmin));

결과 영상에서 Edge에 해당하는 영상이 출력된 것을 확인할 수 있는데, 그 이유는 다음과 같다.

우선 cmax에 의하여 주변 픽셀 중 가장 높은 값을 취하므로, 영상의 Edge부분은 밝아진다.

마찬가지로 cmin에 의하여 주변 픽셀 중 가장 낮은 값을 취하므로, 영상의 Edge부분은 어두워진다.

원래 어두웠던 부분(주변 픽셀에서 밝은 값이 없는 부분)은 cmax와 cmin처리 연산 후에 여전히 어둡고, cmax-cmin연산을 수행하면 작은 값에서 작은 값을 뺐기 때문에, 그 결과로 작은 값(어두운 값)이 나온다.

마찬가지로 밝았던 부분(주변 픽셀에서 어두운 값이 없는 부분)은 cmax와 cmin처리 연산 후에 여전히 밝고, cmax-cmin연산을 수행하면 큰 값에서 큰 값을 뺐기 때문에, 그 결과로 작은 값(어두운 값)이 나온다.

즉 어두웠던 부분과 밝았던 부분 둘 다 어두워지는 결과가 나타나게 되는데, cmax연산 후에 밝아진 부분에서 cmin연산 후에 어두워진 부분을 빼게 되면 큰 값에서 작은 값을 빼게 되므로 밝은 값을 갖게 된다. 즉 Edge부분은 밝게 보이게 되는 것이다.

다른 방법으로 이유를 설명하면, 일반적으로 일반영상에서 저역통과필터를 빼게 되면 고역통과필터가 나오게 된다.


이를 다음과 같이 푸리에 변환으로 설명할 수도 있다.

18. 원본 pelicans.tif의 영상은 다음과 같다.

a. 구현한 코드는 다음과 같다.

function q18a

p = imread('pelicans.tif');

k = 1.5;

f = k*[0 0 0 0 0; 0 0 0 0 0; 0 0 1 0 0; 0 0 0 0 0; 0 0 0 0 0;] - (1/25)*ones(5, 5);

pu = filter2(f, p);

imshow(p), figure, imshow(pu/255);

해당 코드로 출력한 영상은 다음과 같다.

b. 구현한 코드는 다음과 같다.

function q18b

p = imread('pelicans.tif');

u = fspecial('unsharp', 0.5);

a3 = fspecial('average', 3);

pa3 = filter2(a3, p);

pa32 = filter2(u, pa3);

imshow(p), figure, imshow(pa32/255);

해당 코드로 출력한 영상은 다음과 같다.

c. 구현한 코드는 다음과 같다.

function q18c

p = imread('pelicans.tif');

u = fspecial('unsharp', 0.5);

a3 = fspecial('average', 5);

pa3 = filter2(a3, p);

pa32 = filter2(u, pa3);

imshow(p), figure, imshow(pa32/255);

해당 코드로 출력한 영상은 다음과 같다.




d. 구현한 코드는 다음과 같다.

function q18d

p = imread('pelicans.tif');

a3 = fspecial('average', 5);

k = 1.5;

f = k*[0 0 0 0 0; 0 0 0 0 0; 0 0 1 0 0 ; 0 0 0 0 0; 0 0 0 0 0;] - (1/25)*ones(5, 5);

pa3 = filter2(a3, p);

pa32 = filter2(f, pa3);

imshow(p), figure, imshow(pa32/255);

해당 코드로 출력한 영상은 다음과 같다.

e. c와 d의 결과 중 어느 언샤프 마스킹 필터가 블러링을 더욱 효과적으로 줄일 수 있는지에 대한 질문이다.

둘 중 a부분에서 구현한 언샤프 마스킹 필터를 사용하였을 때 더욱 어둡지만 더 선명해진 것을 느꼈다. 즉 c보다는 d의 결과가 더욱 효과적으로 블러링 효과를 줄일 수 있었다고 생각한다.



Gauloop.m

PrtFil.m

q18a.m

q18b.m

q18c.m

q18d.m


반응형

+ Recent posts