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

[디지털 영상처리 기초] 3. 영상 디스플레이

by CodingKwon 2021. 6. 20.

[디지털 영상처리 기초] 3. 영상 디스플레이

 

1. RGB 컬러 모델에 대해 설명하시오.
– RGB 컬러 모델의 의미(빛 합성과 3차원 큐브의 관계에 대한 내용 포함)

 

RGB 모델은 빛의 삼원색인 빨강, 초록, 파랑을 기본으로 한 모델입니다. Red는 (1,0,0), Green은 (0,1,0), Blue(0,0,1)로 두고 모든 색이 섞였을 때는 (1,1,1)인 흰색, 모든 색을 없애면 (0,0,0) 검정색입니다. 또한 Red, Green을 섞으면 Yellow, Red와 Blue를 섞으면 Magena, Blue와 Green을 섞으면 Cyan이 나옵니다.

 

RGB컬러모델

 

2. 인간이 태양광 아래에서 마젠타 색종이를 보고 마젠타를 감지할 수 있는 원리를 설명하시오.
– 빛과 컬러모델의 가산체계 관점에서 서술

 


태양광은 기본적으로 RGB가 모두 섞여있습니다. 태양광이 마젠타 색종이를 비추면 그에 대한 반사광이 사람의 눈으로 들어와 색을 감지합니다. 하지만 흰색이 들어오는 것이 아닌 마젠타 색이 들어오는 이유는 마젠타 색종이가 파란색과 빨간색을 반사하기 때문입니다. 따라서, CMY 가산 모델에 따라 파란과 빨강의 합성인 마젠타 색이 사람의 눈으로 들어오기 때문입니다.

 

 

3. bmp 영상 포맷에 대해 설명하시오.
– Bmp 영상 포맷의 특성
– bmp 영상 포맷은 데이터의 크기를 줄이기 위해서 압축을 수행하는가? (구체적으로 설명할 것)

 

▶Bmp 영상 포맷의 특성

⑴ Bmp 영상은 Header부분과 Image Data 부분으로 구성되어 있습니다.

Bmp 파일 구조
File Header 14bytes
Image Header bitmap info header
bitmap core header
Color Table 포맷형식 : 3가지
Pixel Data 24bit 이미지(RGB) 집합


⑵ Bmp파일은 윈도우 배경에 적합합니다. 또한 다른 Microsoft Windows 프로그램과 호환이 되는 장점이 있습니다.
⑶ Bmp 영상은 압축을 지원하지 않습니다. 따라서 파일의 크기가 크지만 단순하여 출력 속도가 빠릅니다. 압축을 하지 않기 때문에 이미지 손상이 없습니다.
⑷ Bmp 파일은 출력 장치에 출력에 따라 내용이 달라지는 DDB(Device Dependent Bitmap)와 출력장치에 영향을 받지 않는 DIB(Device Independent Bitmap)이 있고 1, 4, 8, 16, 24 비트 컬러가 가능합니다.
⑸ Bmp영상의 데이터는 상하가 반전되어 있습니다.
⑹ Bmp영상의 각 행의 데이터양은 4바이트의 배수이어야 합니다.
⑺ Bmp영상은 RGB와 Indexed모드를 지원합니다.

▶ bmp 영상 포맷은 데이터의 크기를 줄이기 위해서 압축을 수행하는가? (구체적으로 설명할 것)

bmp영상은 압축을 수행하지 않지만 indexed모드를 지원합니다. 그렇기 때문에 어느 정도 크기를 줄일 수 있다고 생각합니다. 하지만 윈도우 3.0 이후부터는 RLE방식으로 압축을 할 수 있게 되었습니다. RLE방식의 압축은 연속된 같은 데이터를 압축시킬 수 있는 방식입니다.
aaaabbbccdddd라고 한다면 a4b3c2d4라고 압축할 수 있습니다. 따라서 기존에 13자에서 8자로 줄었습니다. 하지만 항상 압축이 되는 것은 아닙니다. 오히려 aabcdd라고 한다면 a2b1c1d2라고 표현될 것입니다. 따라서 글자가 6에서 8글자로 늘어났습니다. 따라서 반복되는 데이터가 많은 상황에서 사용됩니다. Bmp파일의 RLE압축방식은 2개의 바이트 쌍으로 첫 번째 바이트에는 데이터 길이, 두 번째 바이트에는 픽셀 값을 저장합니다. 또한 BMP파일의 경우에는 화려한 이미지보다는 투박한 이미지에서 효율성이 있을 것이라고 생각됩니다. 

 


4. Bit Plane을 이용한 영상 워터마킹
• 카메라맨 영상을 비트 평면으로 표현하고 LSB 평면을 이름 영상으로 교체하라.
• LSB 평면을 교체한 영상을 다시 8비트 그레이스케일 영상으로 저장하여 디스플레이 하라.

 

⑴. 먼저 카메라맨 이미지를 불러옵니다. 그 후에 비트 평면으로 분리해줍니다.
(단, LSB 평면은 제 이름을 넣을 것이기 때문에 빼줍니다.)

c = imread("cameraman.tif"); % 카메라맨 비트 평면 분리
cd = double(c);
%c0 = mod(cd, 2);  LSB 평면은 제외
c1 = mod(floor(cd/2),2);
c2 = mod(floor(cd/4),2);
c3 = mod(floor(cd/8),2);
c4 = mod(floor(cd/16),2);
c5 = mod(floor(cd/32),2);
c6 = mod(floor(cd/64),2);
c7 = mod(floor(cd/128),2);

 

⑵ 다음은 제 이름을 적은 이미지를 불러옵니다.
name = imread("name.png");

 

⑶ 제 이름 파일의 크기는 108x202x3 입니다. 따라서 카메라맨 이미지에 넣기 위해 크기를 조정해야합니다.
resize_name = imresize(name,[256 256]);

 

⑷ 이제 제 이름으로 만든 LSB 평면을 생성해줍니다. (다음 이미지는 LSB 평면의 이미지입니다.)
hide_name = double(resize_name);
c0 = mod(hide_name, 2);
imshow(c0);

 

c0, 카메라맨 영상 속에 숨겨둘 글씨

 

⑸ 이제 비트 평면들을 합성합니다. 여기서 LSB는 아까 제 이름으로 만든 평면 c0를 넣습니다.
cc = 2*(2*(2*(2*(2*(2*(2*c7+c6)+c5)+c4)+c3)+c2)+c1)+c0; % 이미지 합성
imshow(uint8(cc));

 

cc, 이름이 숨겨진 카메라맨 영상

 

겉으로는 카메라맨 영상만 보이지만 영상 속에는 CodingKwon이라는 문구가 숨겨져있습니다.

이렇게 이미지 속에 어떠한 정보를 숨기는 것을 스테가노그래피라고 부릅니다.

댓글