[디지털 영상처리 기초] 10. 컬러 영상처리
1. Twins 영상을 입력하여 휘도 성분에 깨소금 잡음을 첨가하라. 이는 아래와 같이 처리될 수 있다.
>> ty=rgb2ntsc(tw); >> tn=imnoise(ty(:,:,1),‘salt & pepper’); >> ty(:,:,1)=tn; |
여기서 디스플레이를 위해 RGB로 다시 변환하라.
다음은 실습을 위해 휘도 성분에 깨소금 잡음을 첨가 후에 다시 RGB로 변환하는 과정입니다.
% Twins 영상 불러오기
tw = imread('twins.tif');
ty = rgb2ntsc(tw);
tn = imnoise(ty(:,:,1),'salt & pepper');
ty(:,:,1)=tn;
% RGB 영상으로 다시 변환
a = ntsc2rgb(ty);
subplot(1,2,1), imshow(tw); title('Twins 원본')
subplot(1,2,2), imshow(a); title('잡음추가')
a라는 변수에 휘도에 깨소금 잡음을 추가한 영상을 넣었습니다.
다음은 다시 RGB로 변환한 결과입니다.
a. 그림 13.16에서와 같이 각 RGB 성분에 적용되어 나타나는 깨소금 잡음과 이 잡음의 모양을 비교하라. 그 차이점을 알 수 있는가?
일단 위에서 휘도에 잡음을 추가하였으니 비교를 위해서 RGB 성분에 적용되는 깨소금 잡음을 만들어보겠습니다.
% RGB 성분에 적용되는 깨소금잡음 만들기
rgb_twins = imnoise(tw, 'salt & pepper');
rgb_twins라는 변수에 RGB 성분에 적용되는 깨소금 잡음을 적용한 영상을 넣었습니다.
이제 휘도에 잡음을 추가한 영상과 RGB 성분에 적용되는 깨소금 잡음을 추가한 영상을 비교해보겠습니다.
% 휘도에 잡음과 RGB에 잡음 추가를 비교
figure, subplot(1,2,1), imshow(a), title('휘도에 잡음추가')
subplot(1,2,2), imshow(rgb_twins), title('RGB에 잡음추가')
다음은 결과입니다.
휘도에 잡음을 추가한 영상에는 검정, 흰색에 소금과 후추 같은 잡음이 추가되었습니다. 하지만 RGB성분에 잡음을 추가한 영상은 잡음의 색이 빨강, 파랑, 초록 잡음이 추가된 것을 볼 수 있습니다.
b. 휘도 성분에 대하여 미디언 필터를 적용하여 잡음을 제거하라.
다음은 휘도에 잡음을 넣은 영상을 ntsc로 변환하여 휘도 성분에 미디언 필터를 적용하는 과정입니다.
% 휘도성분에 대하여 미디언필터를 적용하여 잡음 제거하기
tnn = rgb2ntsc(a);
tnn(:,:,1) = medfilt2(tnn(:,:,1)); % 미디언 필터 적용
median_a = ntsc2rgb(tnn);
figure, imshow(median_a), title('휘도성분에 미디언필터 적용')
다음은 결과 이미지입니다.
c. 각 RGB 성분들에 미디언 필터를 적용하라.
다음은 각 RGB 성분에 미디언 필터를 적용한 과정입니다.
% 각 RGB 성분에 미디언필터를 적용하기
tn_r = medfilt2(a(:,:,1)); % R 성분 미디언필터 적용
tn_g = medfilt2(a(:,:,2)); % G 성분 미디언필터 적용
tn_b = medfilt2(a(:,:,3)); % B 성분 미디언필터 적용
rgb_median_a = cat(3, tn_r, tn_g, tn_b); % RGB 합치기
figure, imshow(rgb_median_a), title('RGB 성분에 미디언필터 적용')
깨끗하게 잡음이 제거된 결과를 확인할 수 있습니다.
d. 어느 것이 최적의 결과를 주는가?
휘도에서 미디언필터를 적용한 것보다 각 RGB성분에 미디언필터를 적용한 결과가 더 좋은 결과가 나왔습니다. 저는 이유로 각 RGB성분에서 미디언필터를 적용하는 것은 각 성분별로 잡음이 제거되지만 YIQ에서는 RGB와 YIQ변환 과정에서 잡음이 전체적으로 퍼지기 때문에 제대로 된 제거를 못한 것이라고 생각합니다.
e. 많은 양의 잡음을 실험하라
다음은 잡음의 값을 0.5로 증가시켜서 영상에 넣어보겠습니다.
% 많은 양의 잡음으로 실험
ty2 = rgb2ntsc(tw); % YIQ로 변환
tn2 = imnoise(ty2(:,:,1),'salt & pepper', 0.5); % 휘도 성분에 잡음 추가
ty2(:,:,1)=tn2;
alotof_noise_a = ntsc2rgb(ty2); % 휘도 성분에 잡음 추가 (RGB 영상으로 변환)
alotof_noise_rgb_twins = imnoise(tw, 'salt & pepper', 0.5); % RGB 성분에 잡음 추가
alotof_noise_a는 휘도 성분에 잡음을 0.5로 증가시켜 넣은 변수입니다.
alotof_noise_rgb_twins는 RGB 성분에 잡음을 0.5로 증가시켜 넣은 변수입니다.
다음 과정으로 다시 alotof_noise_a를 ntsc로 바꾸어 휘도 성분에 미디언 필터를 적용하고 다시 rgb로 바꿉니다.
% 휘도성분에 미디언 필터 적용 과정
tnn2 = rgb2ntsc(alotof_noise_a);
tnn2(:,:,1) = medfilt2(tnn2(:,:,1)); % 미디언 필터 적용
median_a2 = ntsc2rgb(tnn2); % 휘도 성분에 미디언 필터 적용
median_a2는 휘도 성분에 미디언 필터를 적용한 변수입니다.
다음은 각 RGB성분에 미디언 필터를 적용하는 과정입니다.
% 각 RGB성분에 미디언 필터 적용 과정
tn2_r = medfilt2(alotof_noise_rgb_twins(:,:,1)); % R 성분 미디언 필터 적용
tn2_g = medfilt2(alotof_noise_rgb_twins(:,:,2)); % G 성분 미디언필터 적용
tn2_b = medfilt2(alotof_noise_rgb_twins(:,:,3)); % B 성분 미디언필터 적용
rgb_median_a2 = cat(3, tn2_r, tn2_g, tn2_b); % RGB 합치기
rgb_median_a2에 각 RGB성분에 미디언 필터를 적용한 값을 합쳐서 넣었습니다.
이제 결과를 확인해보겠습니다.
% 결과 확인
figure, subplot(2,2,1), imshow(alotof_noise_a); title('휘도에 잡음추가')
subplot(2,2,2), imshow(alotof_noise_rgb_twins); title('RGB에 잡음추가')
subplot(2,2,3), imshow(median_a2); title('휘도성분에 미디언필터 적용')
subplot(2,2,4), imshow(rgb_median_a2); title('RGB 성분에 미디언필터 적용')
많은 양의 잡음으로 실험한 결과 휘도 성분에 미디언 필터를 적용한 결과와 각 RGB성분에 미디언 필터를 적용했을 때 결과 둘 다 영상의 잡음을 모두 제거하진 못한 것을 볼 수 있습니다. 또한 영상의 품질도 매우 안 좋습니다. 미디언 필터의 특성상 근처 값들을 활용하기 때문에 잡음이 너무 많아 제대로 제거가 되지 않은 것 같습니다. 다음은 psnr을 통해서 비교해보겠습니다.
% pnsr 비교
psnr(uint8(median_a2), tw)
psnr(uint8(rgb_median_a2), tw)
육안으로는 둘 다 비슷한 품질의 영상이지만 pnsr로 원본 영상과 비교해보았을 때는 각 RGB성분에 미디언 필터를 적용한 것이 품질이 좀 더 좋습니다.
f. 가우시안 잡음으로 실험하라.
다음은 가우시안 잡음을 휘도 성분과 각 RGB성분에 넣어보았습니다.
% 가우시안 잡음으로 실험
ty2_ga = rgb2ntsc(tw); % YIQ로 변환
tn2_ga = imnoise(ty2_ga(:,:,1),'gaussian'); % 휘도 성분에 잡음 추가
ty2_ga(:,:,1)=tn2_ga;
alotof_noise_a_ga = ntsc2rgb(ty2_ga); % 휘도 성분에 잡음 추가 (RGB 영상으로 변환)
alotof_noise_rgb_twins_ga = imnoise(tw, 'gaussian'); % RGB 성분에 잡음 추가
다음은 가우시안 잡음을 휘도 성분에 넣은 영상을 다시 ntsc로 변환하여 미디언 필터를 적용하고 RGB영상으로 바꾸었습니다.
% 휘도 성분에 미디언 필터 적용 과정
tnn2_ga = rgb2ntsc(alotof_noise_a_ga);
tnn2_ga(:,:,1) = medfilt2(tnn2_ga(:,:,1)); % 미디언 필터 적용
median_a2_ga = ntsc2rgb(tnn2_ga); % 휘도 성분에 미디언 필터 적용
median_a2_ga 변수에 영상을 담았습니다.
다음은 가우시안 잡음을 넣은 영상의 각 RGB성분에 미디언 필터를 적용시켰습니다.
% 각 RGB성분에 미디언 필터 적용 과정
tn2_ga_r = medfilt2(alotof_noise_rgb_twins_ga(:,:,1)); % R 성분 미디언 필터 적용
tn2_ga_g = medfilt2(alotof_noise_rgb_twins_ga(:,:,2)); % G 성분 미디언필터 적용
tn2_ga_b = medfilt2(alotof_noise_rgb_twins_ga(:,:,3)); % B 성분 미디언필터 적용
rgb_median_a2_ga = cat(3, tn2_ga_r, tn2_ga_g, tn2_ga_b); % RGB 합치기
이를 합친 영상을 rgb_median_a2_ga 변수에 담았습니다.
다음은 결과를 확인해보겠습니다.
% 결과 확인
figure, subplot(2,2,1), imshow(alotof_noise_a_ga); title('휘도에 잡음추가')
subplot(2,2,2), imshow(alotof_noise_rgb_twins_ga); title('RGB에 잡음추가')
subplot(2,2,3), imshow(median_a2_ga); title('휘도성분에 미디언필터 적용')
subplot(2,2,4), imshow(rgb_median_a2_ga); title('RGB 성분에 미디언필터 적용')
정규분포를 가지는 잡음인 가우시안 잡음을 넣은 결과 잡음이 골고루 분포하고 있습니다. 또한 휘도 성분에 미디언 필터를 적용한 결과와 각 RGB성분에 미디언 필터를 적용한 결과 잡음이 어느 정도 제거되었지만 여전히 남아 있는 것을 확인할 수 있습니다. 이는 가우시안 잡음을 많이 주지 않아도 미디언 필터가 주변 값을 이용해서 결과를 만들기 때문에 일정하게 퍼져있는 가우시안 잡음은 완전히 제거할 수 없는 것 같습니다.
다음은 psnr로 잡음이 있는 영상과 원본 영상을 비교해보겠습니다.
% pnsr 비교
psnr(uint8(median_a2_ga), tw)
psnr(uint8(rgb_median_a2_ga), tw)
다음은 결과를 확인해보겠습니다.
이번에도 각 RGB성분에 미디언 필터를 적용한 것이 PSNR이 더 높게 나타났습니다.
'디지털영상처리기초 > Matlab' 카테고리의 다른 글
[디지털 영상처리 기초] 9. Image Geometry (0) | 2021.06.28 |
---|---|
[디지털 영상처리 기초] 8. Neighborhood Processing 2 (0) | 2021.06.27 |
[디지털 영상처리 기초] 7. Neighborhood Processing (0) | 2021.06.25 |
[디지털 영상처리 기초] 6. 화소 단위 영상처리 2 (0) | 2021.06.24 |
[디지털 영상처리 기초] 5. 화소 단위 영상처리 (0) | 2021.06.22 |
댓글