관리 메뉴

Bull

[Image Processing] 컬러사진 흑백 만들기 (by MATLAB) 본문

Computer Science/Image Processing

[Image Processing] 컬러사진 흑백 만들기 (by MATLAB)

Bull_ 2024. 3. 19. 15:24

오늘 수업시간에 배운 MATLAB으로 컬러사진을 흑백으로 만들기를 해볼 것이다.

사진: 변경 전 - 변경 후

출처: https://m.van-go.co.kr/place/16089?tab=info

설명

업로드


우선 작업공간의 디렉토리에 아무 사진을 올려준다.

 

imread("파일명")
>> img = imread("dog.jpg");

함수명을 보면 알 수 있듯이 이미지를 배열에 담아 변수로 저장한다.

 

 

"값" 필드를 보면 1000x750x3인 걸 알 수 있는데 여기서 3은 RGB 채널의 수이다.

 

그리고 RGB는 (0~255, 0~255, 0~255)로 표현할 수 있기 때문에 uint8(unsigned int 8bit)로 표현이 된다. (즉 양수 8bit)

 

따라서 영상(이미지)이  bit(pixel?)세계에서는 3차원으로 간주할 수 있는 것이다.

 

흑백 만들기


흑백을 만들기 위해 3채널 구조에 대해 이해할 필요가 있다.

 

우선, img(:, :, 1) img(:, :, 2) img(:, :, 3) 으로 (MATLAB은 index가 1부터 시작)

 

각각 R, G, B계열 값을 확인할 수 있다.

 

이제 어릴 때, 물감섞기 놀이를 상상해본다.

 

검은 색을 만들기 위해 삼원색을 모두 섞으면 검은색이 되는 것을 알 것이다.

 

유사한 방식을 생각하며 각 픽셀 원소의 성분을 모두 합해주는 것이다.

 

하지만 RGB는 255를 넘어가면 안되기 때문에 평균값을 내준다.

 

(여기서 빛의 삼원색의 합은 원래 하얀색이므로 흰색 RGB는 FFFFFF이다.

 

따라서 0에 가까울수록 검은색이 된다는 것을 비유때문에 착각하지 않아야 한다) 

grayscale_img = mean(img,3)

 

소수점이 나오기 때문에 위처럼 초기화화면 이미지로 나타낼 수 없다.

 

grayscale_img = uint8(mean(img,3))

 

 

uint8()로 덮어준 후,

 

차원이 2차원 이미지로 되어있는 것을 확인할 수 있다.

 

imshow(grayscale_img)

 

Figure 1탭에 사진이 나타나는 것을 확인할 수 있다.

 

스크립트


gray_dog.m

img = imread("dog.jpg");
grayscale_img = uint8(mean(img,3));
imshow(grayscale_img)