행렬로 나타낸 이미지
본문휴대폰으로 찍은 사진을 아주 크게 확대하면 작은 색 사각형들이 바둑판처럼 늘어서 있다. 컴퓨터는 사진을 '고양이'로 기억하는 것이 아니라 이 사각형 하나하나의 밝기와 색을 숫자로 기억한다. 사진은 어떤 숫자 표로 바뀌며, 그 표의 크기는 얼마나 될까?
3.1.1픽셀과 행렬
디지털 이미지는 픽셀이라는 작은 사각형들이 가로세로로 늘어선 것이다. 흑백 이미지에서는 각 픽셀의 밝기를 하나의 수로 나타내는데, 보통 0(검정)부터 255(흰색)까지 256단계를 쓴다. 256은 \(2^8\)이므로 픽셀 하나에 8비트가 든다. 세로 \(m\)개, 가로 \(n\)개 픽셀의 밝기를 그대로 적으면 \(m \times n\) 행렬이 된다.
세로 \(m\)픽셀, 가로 \(n\)픽셀인 흑백 이미지는 \((i, j)\) 성분이 \(i\)행 \(j\)열 픽셀의 밝기인 \(m \times n\) 행렬로 나타낸다. 컬러 이미지는 빨강(R), 초록(G), 파랑(B)의 세기를 각각 담은 \(m \times n\) 행렬 세 개로 나타낸다.
그림 1의 슬라이더로 기준값을 정해 보자. 기준을 128로 하면 밝은 고리 모양만 1로 남고 나머지는 0이 된다. 기준을 높이면 1인 칸이 줄어든다. 이렇게 0과 1만으로 나타낸 이미지를 이진 이미지라 하며, 글자 인식처럼 모양만 중요할 때 쓴다. 이진 이미지는 픽셀 하나에 1비트면 되므로 저장 공간도 8분의 1로 줄어든다.1
3.1.2컬러 이미지
화면의 픽셀 하나는 빨강, 초록, 파랑의 아주 작은 빛 세 개로 이루어져 있고, 세 빛의 세기를 섞어 모든 색을 낸다. 세 값이 모두 255이면 흰색, 모두 0이면 검정, (255, 0, 0)이면 빨강, (255, 255, 0)이면 노랑이다. 세 값이 같으면 회색이 된다. 각 값이 256단계이므로 표현할 수 있는 색은 \(256^3\), 약 1677만 가지이다. 그래서 컬러 이미지는 같은 크기의 행렬 세 장을 겹친 것으로 볼 수 있다. 컬러 사진을 흑백으로 바꿀 때는 세 값의 가중평균을 쓰는데, 사람의 눈이 초록에 가장 민감하므로 초록에 가장 큰 가중치를 준다.
3.1.3예제 풀이
가로 1920픽셀, 세로 1080픽셀인 컬러 사진을 압축하지 않고 저장하면 몇 바이트가 필요한가? (1바이트 = 8비트) 같은 크기의 흑백 사진이면 얼마인가?
픽셀 수는 \(1920 \times 1080 = 2\,073\,600\)개이다. 컬러는 픽셀마다 R, G, B 각 8비트, 곧 3바이트이므로 \(2\,073\,600 \times 3 = 6\,220\,800\)바이트, 약 6.2 MB이다.
흑백은 픽셀마다 1바이트이므로 \(2\,073\,600\)바이트, 약 2.1 MB이다. 실제 사진 파일이 이보다 훨씬 작은 것은, 이웃한 픽셀의 값이 비슷하다는 점을 이용해 압축하기 때문이다. 이 사진을 인공지능에 넣는다는 것은 600만 개가 넘는 수를 입력하는 것과 같다.
아래 탐구 카드에서 그림을 숫자 행렬로 바꾸고, 컬러 사진을 행렬 세 장으로 나누어 보자.
- 흑백 변환의 기준값을 사람이 정하는 대신, 밝기 분포를 보고 두 무리를 가장 잘 가르는 값을 자동으로 고르는 방법도 있다. 문서 사진을 스캔할 때 글자와 바탕을 나누는 데 쓰인다.
디지털 이미지는 픽셀의 바둑판이며, 흑백 이미지는 각 픽셀의 밝기(0~255)를 성분으로 하는 행렬, 컬러 이미지는 R, G, B의 세 행렬로 나타낸다. 기준값을 정하면 0과 1만의 이진 행렬로 바꿀 수 있다. 그래서 처음 질문의 사진은 픽셀 수만큼의 성분을 가진 숫자 표로 바뀌며, 보통의 컬러 사진은 수백만 개의 수가 된다.