본문 바로가기
디지털영상처리기초/Matlab

[디지털 영상처리 기초] 2. 영상과 매트랩

by CodingKwon 2021. 6. 19.

[디지털 영상처리 기초] 2. 영상과 매트랩

 

1. 그레이스케일 영상을, 말하자면 cameraman.tif 영상을 읽는다. imwrite 함수를 사용해서 읽은 영상을 JPEG, PNG 및 BMP 파일 포맷으로 저장하라. 이 파일들의 크기는 얼마인가?

 

c = imread('cameraman.tif'); % 카메라맨 영상 불러오기

 

imwrite(c, "cameraman_jpeg", "jpeg"); % jpeg로 저장

imwrite(c, "cameraman_jpg", "png"); % png로 저장

imwrite(c, "cameraman_bmp", "bmp"); % bmp로 저장

 

2) 카메라맨 영상을 2진영상으로 변환

 

c = imread('cameraman.tif'); % 카메라맨 영상 불러오기

 

c1 = c>120; % 2진영상으로 변환

 

% 결과 비교

subplot(1,2,1), imshow(c), title('카메라맨')

subplot(1,2,2), imshow(c1), title('카메라맨 이진영상')

 

 

imread 함수로 cameraman.tif를 읽어옵니다.
그레이스케일 영상이기 때문에 각 화소의 범위는 0~255입니다.

그렇기 때문에 2진 영상으로 변환한다면 c1 = c > 120을 해줍니다.
이렇게 해준다면 120보다 큰 값은 1(흰) 작은 값은 0(검정)이 저장될 것입니다.

이를 c1에 담고 비교해보겠습니다.

왼쪽이 원본영상, 오른쪽이 이진 변환 영상입니다.

 

 

3) 곤충 사진을 인덱스 컬러 영상으로 변환

insect.jpg
0.27MB

i = imread('insect.jpg'); % 곤충 영상 불러오기

 

[X map] = rgb2ind(i, 2^8); % 8비트의 인덱스 컬러 영상으로 변환

 

생성된 픽셀값 X와 컬러맵 map

% 비교하기

subplot(1,3,1), imshow(i), title('원본')

subplot(1,3,2), imshow(X), title('픽셀값')

subplot(1,3,3), imshow(X,map), title('픽셀값+컬러맵')

 

인덱스 컬러 영상을 성공적으로 만들었고 픽셀 값만으로는 이상한 영상이 나오는 것을 확인할 수 있습니다.

이러한 인덱스 컬러 영상을 사용하는 이유는 8비트 컬러맵을 사용함으로서 모든 색을 사용하는 것이 아니라 확률적으로 많이 사용하는 컬러들을 map으로 만들어서 용량을 줄여주는 방식입니다.

 

 

4) 영상 연산
ⅰ) 카메라맨 영상에 밝기 값 100을 더한 영상을 생성
ⅱ) 카메라맨 영상에 밝기 값 100을 뺀 영상을 생성
ⅲ) 결과 영상에서 8비트 영상의 범위를 벗어난 경우 어떻게 처리되었는지 분
석하라.

 

c = imread('cameraman.tif'); % 카메라맨 불러오기

c1 = c + 100; % 밝기 100 더하기

c2 = c - 100; % 밝기 100 빼기

 

% 영상비교

subplot(1,3,1), imshow(c), title('원본')

subplot(1,3,2), imshow(c1), title('원본+100')

subplot(1,3,3), imshow(c2), title('원본-100')

 

이러한 결과가 나오는 이유는 0~255 (8비트)로 표현되는 그레이스케일 영상에서 100을 더해서 255를 초과하면 255로, 100을 빼서 0미만이 되는경우 0으로 처리하기 때문입니다.

결론 : 8비트를 초과한 값. 즉, 255이상은 255로, 0이하는 0으로 처리한다.

댓글