[DIP]디지털영상처리 연습문제 6장 - 문제 및 해설
[DIP]디지털영상처리 연습문제 6장 - 문제 및 해설
2. (b) 8 X 8
1-1) 최근접 보간법을 사용하여 수작업으로 확대
8 8 6 6 13 13 9 9
8 8 6 6 13 13 9 9
1 1 13 13 1 1 15 15
1 1 13 13 1 1 15 15
5 5 4 4 7 7 7 7
5 5 4 4 7 7 7 7
5 5 10 10 3 3 7 7
5 5 10 10 3 3 7 7
1-2)최근접 보간법을 매트랩에서 확인한 결과
8 8 6 6 13 13 9 9
8 8 6 6 13 13 9 9
1 1 13 13 1 1 15 15
1 1 13 13 1 1 15 15
5 5 4 4 7 7 7 7
5 5 4 4 7 7 7 7
5 5 10 10 3 3 7 7
5 5 10 10 3 3 7 7
2-1) 양선형 보간법을 사용하여 수작업으로 확대
>> 책에서 소개한 방법으로 계산을 수행하였으나 매트랩의 결과와 일치하지 않았습니다. (위의 사진은 수작업의 흔적입니다.)
2-2) 양선형 보간법을 매트랩에서 확인한 결과
8.0000 7.5000 6.5000 7.7500 11.2500 12.0000 10.0000 9.0000
6.2500 6.6250 7.3750 8.3125 9.4375 10.1250 10.3750 10.5000
2.7500 4.8750 9.1250 9.4375 5.8125 6.3750 11.1250 13.5000
2.0000 4.1875 8.5625 8.6875 4.5625 5.1250 10.3750 13.0000
4.0000 4.5625 5.6875 6.0625 5.6875 6.3750 8.1250 9.0000
5.0000 5.1250 5.3750 5.6250 5.8750 6.2500 6.7500 7.0000
5.0000 5.8750 7.6250 7.3750 5.1250 4.7500 6.2500 7.0000
5.0000 6.2500 8.7500 8.2500 4.7500 4.0000 6.0000 7.0000
3.
명령어
c = imread('cameraman.tif');
head = c(33:96,90:153);
head2 = zeroint(head);
filt1 = [1 1 0; 1 1 0; 0 0 0]; %nearest
filt2 = (1/4)*[1 2 1; 2 4 2; 1 2 1]; %bilinear
filt3 = (1/64)*[1 4 6 4 1; 4 16 24 16 4; 6 24 36 24 6; 4 16 24 16 4; 1 4 6 4 1]; %bicubic
head2n=filter2(filt1,head2);
head4 = zeroint(head2n);
head4n=filter2(filt1, head4);
imshow(head4n/255)
head2n=filter2(filt2,head2);
head4 = zeroint(head2n);
head4n=filter2(filt2, head4);
imshow(head4n/255)
head2n=filter2(filt3,head2);
head4 = zeroint(head2n);
head4n=filter2(filt3, head4);
imshow(head4n/255)
head_resize = imresize(head, 4);
imshow(head_resize);
원본 영상 | |
nearest 필터 사용 | bilinear 필터 사용 |
bicubic 필터 사용 | imresize 함수 사용 |
nearest 필터를 사용한 경우 계단현상이 나타내는 것을 볼 수 있다.
bilinear 필터를 사용한 경우 nearest 필터를 사용한 경우보다 계단현상이 줄고 엣지부분이 흐릿해지고 부드러워진 것을 볼 수 있다.
bicubic 필터를 사용한 경우 bilinear 필터를 사용한 경우보다 더욱 부드러워진 것을 볼 수 있다.
imresize 함수를 사용한 경우 bilinear 필터를 사용한 경우와 비슷한 것을 볼 수 있다.
5.
해당 결과는 원본 영상과 정확히 같을 수도 있고, 다를 수도 있다. 이는 확대를 할 때 사용하는 필터에 따라 다르다. 다음은 nearest, bilinear, bicubic 필터를 사용하여 k배로 확대한 후 다시 축소한 결과이다.
1) nearest
c=imread('cameraman.tif');
bi = imresize(c, 4, 'nearest');
bi2 = imresize(bi, 1/4, 'nearest');
sum(c(:))-sum(bi2(:))
해당 결과는 0으로써, 원본 영상과 결과 영상은 같은 것을 알 수 있다.
2) bilinear
c=imread('cameraman.tif');
bi = imresize(c, 4, 'bilinear');
bi2 = imresize(bi, 1/4, 'bilinear');
sum(c(:))-sum(bi2(:))
해당 결과는 0이 아니다. 따라서 원본 영상과 결과 영상은 다른 것을 알 수 있다,
3) bicubic
c=imread('cameraman.tif');
bi = imresize(c, 4, 'bicubic');
bi2 = imresize(bi, 1/4, 'bicubic');
sum(c(:))-sum(bi2(:))
해당 결과는 0이 아니다. 따라서 원본 영상과 결과 영상은 다른 것을 알 수 있다.
6.
명령어
c = imread('cameraman.tif');
c1 = imresize(c, 1/8);
c2 = imresize(c1, 8);
imshow(c2);
이 경우에는 절대로 원본 영상과 같은 영상을 얻을 수 없다. 축소 시에 원본 영상의 정보가 소멸하기 때문이다. 한 번 소멸된 정보는 어떠한 방법으로도 복구할 수 없다.
<< 축소하였다가 다시 확대한 영상.
7.
명령어
z = zeros(256,256);
z(64:192, 64:192)=1;
bn = imrotate(z,30,'bilinear');
bn45 = imrotate(z,45,'bilinear');
ne = imrotate(z,30,'nearest');
ne45 = imrotate(z,45,'nearest');
sum(bn45(:))-sum(ne45(:))
sum(bn(:))-sum(ne(:))
원본 영상 | |
nearest 30도 | nearest 45도 |
bilinear 30도 | bilinear 45도 |
nearest 옵션을 사용한 경우 엣지의 톱니 현상을 볼 수 있다. 이에 반하여 bilinear 옵션을 사용한 경우에는 엣지 부분이 흐릿하게 처리된 것을 볼 수 있다.
같은 각도에 대하여 nearest 필터를 사용한 영상과 bilinear 필터를 사용한 영상의 유사성을 비교하면 다음과 같은 값을 얻을 수 있다.
1) 30도 : -0.9970
2) 45도 : 83.8099
8.
명령어
z = zeros(256,256);
z(64:192, 64:192)=1;
bn = imrotate(z,30,'bilinear');
bn45 = imrotate(z,45,'bilinear');
ne = imrotate(z,30,'nearest');
ne45 = imrotate(z,45,'nearest');
b_bn = imrotate(bn,-30,'bilinear');
b_bn45 = imrotate(bn45,-45,'bilinear');
b_ne = imrotate(ne,-30,'nearest');
b_ne45 = imrotate(ne45,-45,'nearest');
sum(z(:))-sum(b_ne(:))
sum(z(:))-sum(b_ne45(:))
sum(z(:))-sum(b_bn(:))
sum(z(:))-sum(b_bn45(:))
원본 영상 | |
nearest 30도 원본 영상과의 차 : -67 | nearest 45도 원본 영상과의 차 : 111 |
bilinear 30도 원본 영상과의 차 : -1.1972 | bilinear 45도 원본 영상과의 차 : -3.7655 |
결과를 보면 nearest 필터를 사용한 경우 엣지 부분에 심한 톱날 현상이 발생하는 것을 볼 수 있다.
그러나 bilinear 필터를 사용한 경우 톱날 현상이 잘 보이지 않고 엣지 부분이 흐릿하게 보인다. 원본과의 커다란 차이는 없다. 소수점 값이 나오는 것은 회색인 픽셀도 존재한다는 뜻이다.
9.
명령어
c=imread('cameraman.tif');
c1=imrotate(c,30);
c2=imrotate(c1,-30);
imshow(c), figure, imshow(c1), figure, imshow(c2)
최종 결과는 원래 영상과 일치하지 않는다.
이는 보간법 사용으로 인하여 픽셀들의 값이 변화하였기 때문이다. 다시 원래 각도로 돌리는 경우, 그 과정에서도 마찬가지로 보간법이 사용되므로 원본 영상의 픽셀 값과는 더욱 차이가 나게 된다.
원본 영상 | 30도 회전 영상 | -30도 회전영상 |
또한 변화하는 다른 한 가지는 회전 시 영상 영역 밖의 빈 공간이다. 이 공간은 0으로 채워진다. 다시 반대로 회전시키면 그 만큼의 빈 공간이 또 생기기 때문에 검정색 여백은 더욱 많아진다.