행렬 연산과 이미지 변환
본문사진 편집 앱에서 '밝기'를 올리면 사진 전체가 환해지고, '대비'를 올리면 밝은 곳은 더 밝게, 어두운 곳은 더 어둡게 바뀐다. '반전'을 누르면 필름 사진처럼 흑백이 뒤집힌다. 사진이 행렬이라면, 이 버튼들은 행렬의 각 성분에 어떤 계산을 하는 것일까? 윤곽선을 찾는 기능은 어떻게 작동할까?
3.2.1성분별 계산으로 바꾸는 이미지
이미지 행렬 \(A\)의 모든 성분에 같은 수 \(d\)를 더하면 사진 전체의 밝기가 바뀐다. 이는 \(A\)에 모든 성분이 \(d\)인 행렬을 더하는 것이다. 그리고 모든 성분에 실수 \(k\)를 곱하는 실수배 \(kA\)는 밝은 곳과 어두운 곳의 차이를 \(k\)배로 늘리거나 줄인다. 반전은 \(255 - v\)로, 모든 성분이 255인 행렬에서 \(A\)를 빼는 것이다.
밝기 \(A + dJ\), 대비 \(c(A - 128J) + 128J\), 반전 \(255J - A\) (\(J\)는 모든 성분이 1인 행렬). 계산 결과가 0보다 작으면 0으로, 255보다 크면 255로 자른다.
그림 1에서 밝기를 올리면 모든 칸이 같은 만큼 환해지고, 이미 흰 칸은 255에서 더 밝아지지 않는다. 그런데 대비를 2로 올리면 230은 255로, 40은 0으로 가서 흑백이 뚜렷해진다. 대비를 0.5로 낮추면 모든 값이 128 쪽으로 모여 흐릿한 회색이 된다.
3.2.2이웃 픽셀을 섞는 계산
흐리게 하기나 윤곽선 찾기는 한 픽셀만 보지 않고 둘레의 픽셀과 함께 계산한다. 작은 행렬(필터)을 이미지 위에 겹쳐 놓고, 겹친 성분끼리 곱해 더한 값을 새 픽셀 값으로 삼는다. 이를 합성곱이라 한다. 모든 성분이 \(\frac{1}{9}\)인 3 × 3 필터는 둘레 9칸의 평균을 내어 사진을 흐리게 한다. 가운데가 8이고 둘레가 \(-1\)인 필터는 둘레와 밝기가 다른 곳, 곧 윤곽선에서 큰 값을 낸다.1
지금까지는 픽셀의 값을 바꾸었는데, 사진을 뒤집거나 돌리는 버튼은 값은 그대로 두고 픽셀의 자리를 옮긴다. 이때는 각 픽셀의 좌표 \(\begin{pmatrix} x \\ y \end{pmatrix}\)에 2 × 2 행렬을 곱한다. 행렬의 첫째 열은 오른쪽으로 한 칸인 \(\begin{pmatrix} 1 \\ 0 \end{pmatrix}\)이 옮겨 갈 자리, 둘째 열은 위로 한 칸인 \(\begin{pmatrix} 0 \\ 1 \end{pmatrix}\)이 옮겨 갈 자리라고 생각하면 행렬을 쉽게 만들 수 있다. 좌우 뒤집기는 오른쪽 한 칸을 왼쪽 한 칸으로 보내고 위쪽은 그대로 두므로 \(\begin{pmatrix} -1 & 0 \\ 0 & 1 \end{pmatrix}\)이고, 시계 반대 방향으로 90° 돌리기는 오른쪽 한 칸을 위로, 위로 한 칸을 왼쪽으로 보내므로 \(\begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}\)이다. 다른 모든 칸은 이 두 칸의 조합이므로 두 열만 정하면 사진 전체가 어떻게 움직일지 정해진다.
3.2.3예제 풀이
2 × 2 이미지 \(A = \begin{pmatrix} 40 & 120 \\ 200 & 250 \end{pmatrix}\)에 밝기 \(+30\)을 적용한 행렬과, 대비 2배(\(2(v - 128) + 128\))를 적용한 행렬, 반전한 행렬을 각각 구하여라.
밝기 \(+30\)이면 \(\begin{pmatrix} 70 & 150 \\ 230 & 280 \end{pmatrix}\)에서 280을 255로 잘라 \(\begin{pmatrix} 70 & 150 \\ 230 & 255 \end{pmatrix}\)이다.
대비 2배이면 \(2v - 128\)이므로 \(\begin{pmatrix} -48 & 112 \\ 272 & 372 \end{pmatrix}\)을 잘라 \(\begin{pmatrix} 0 & 112 \\ 255 & 255 \end{pmatrix}\)이다. 그리고 반전은 \(\begin{pmatrix} 215 & 135 \\ 55 & 5 \end{pmatrix}\)이다. 대비를 지나치게 올리면 200과 250처럼 다르던 값이 모두 255가 되어, 밝은 부분의 차이가 사라진다는 것을 알 수 있다.
아래 탐구 카드에서 사진 편집 버튼의 계산을 확인하고, 이웃 픽셀과 섞어 윤곽선을 찾아보자.
- 이미지를 인식하는 인공지능(합성곱 신경망)은 이런 필터의 성분을 사람이 정하지 않고 자료로부터 학습한다. 첫 층의 필터는 대개 윤곽선이나 무늬를 찾는 모양으로 학습된다.
이미지 행렬의 모든 성분에 같은 수를 더하면 밝기가, 가운데 값에서의 차이를 실수배하면 대비가, 255에서 빼면 반전이 바뀐다. 둘레 픽셀과 필터를 곱해 더하는 합성곱으로 흐리게 하거나 윤곽선을 찾는다. 그래서 처음 질문의 편집 버튼들은 모두 행렬의 덧셈, 실수배, 뺄셈, 그리고 이웃 성분을 섞는 계산이다.