나뭇잎 교과서

행렬 연산과 이미지 변환

이미지가 행렬이면 이미지를 바꾸는 일은 행렬을 계산하는 일입니다. 모든 성분에 같은 수를 더하면 밝아지고, 전치하면 대각선으로 뒤집힙니다. 주변 픽셀과 함께 계산하는 합성곱을 쓰면 흐리게 하거나 윤곽을 찾을 수 있습니다. 이 절에서는 이런 계산을 직접 적용해 봅니다.

본문

행렬 연산과 이미지 변환

본문

사진 편집 앱에서 '밝기'를 올리면 사진 전체가 환해지고, '대비'를 올리면 밝은 곳은 더 밝게, 어두운 곳은 더 어둡게 바뀐다. '반전'을 누르면 필름 사진처럼 흑백이 뒤집힌다. 사진이 행렬이라면, 이 버튼들은 행렬의 각 성분에 어떤 계산을 하는 것일까? 윤곽선을 찾는 기능은 어떻게 작동할까?

그림 1. 왼쪽 원본의 각 성분 \(v\)에 \(c(v - 128) + 128 + d\)를 계산하고 0~255 범위로 자른 결과가 오른쪽이다. 밝기는 모든 성분에 같은 수를 더하고, 대비는 가운데 값 128에서 떨어진 정도를 늘린다.
먼저 알아야 할 것행렬의 덧셈, 뺄셈, 실수배, 행렬의 곱셈(공통수학1), 이미지와 행렬(행렬로 나타낸 이미지).

3.2.1성분별 계산으로 바꾸는 이미지

이미지 행렬 \(A\)의 모든 성분에 같은 수 \(d\)를 더하면 사진 전체의 밝기가 바뀐다. 이는 \(A\)에 모든 성분이 \(d\)인 행렬을 더하는 것이다. 그리고 모든 성분에 실수 \(k\)를 곱하는 실수배 \(kA\)는 밝은 곳과 어두운 곳의 차이를 \(k\)배로 늘리거나 줄인다. 반전은 \(255 - v\)로, 모든 성분이 255인 행렬에서 \(A\)를 빼는 것이다.

정리 3.2.1 기본적인 이미지 변환

밝기 \(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}\)이다. 다른 모든 칸은 이 두 칸의 조합이므로 두 열만 정하면 사진 전체가 어떻게 움직일지 정해진다.

−1−1−1 −18−1 −1−1−1 밝기가 고른 곳 → 8v − 8v = 0밝기가 바뀌는 곳 → 0이 아닌 값
그림 2. 윤곽선 필터는 가운데 값과 둘레 값의 차이를 계산한다. 밝기가 고른 곳에서는 0이 된다.

3.2.3예제 풀이

예제 3.2.2

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가 되어, 밝은 부분의 차이가 사라진다는 것을 알 수 있다.

아래 탐구 카드에서 사진 편집 버튼의 계산을 확인하고, 이웃 픽셀과 섞어 윤곽선을 찾아보자.

  1. 이미지를 인식하는 인공지능(합성곱 신경망)은 이런 필터의 성분을 사람이 정하지 않고 자료로부터 학습한다. 첫 층의 필터는 대개 윤곽선이나 무늬를 찾는 모양으로 학습된다.
마무리

이미지 행렬의 모든 성분에 같은 수를 더하면 밝기가, 가운데 값에서의 차이를 실수배하면 대비가, 255에서 빼면 반전이 바뀐다. 둘레 픽셀과 필터를 곱해 더하는 합성곱으로 흐리게 하거나 윤곽선을 찾는다. 그래서 처음 질문의 편집 버튼들은 모두 행렬의 덧셈, 실수배, 뺄셈, 그리고 이웃 성분을 섞는 계산이다.

탐구 1

사진 편집 앱의 버튼은 행렬에 어떤 계산을 할까?

행렬 연산과 이미지 변환 · 조작

원래 A

원과 네모, 줄로 만든 24×24 가상 이미지이다. 계산 결과가 0보다 작으면 0, 255보다 크면 255로 자른다.

  1. 질문사진 편집 앱에서 ‘밝게’, ‘대비’, ‘뒤집기’를 누르면 사진이 바로 바뀐다. 앱은 사진의 행렬에 어떤 계산을 하는 걸까?
  2. 복원행렬에는 실수배 \(kA\), 덧셈과 뺄셈, 곱셈이 있다.
  3. 설명밝기는 모든 성분에 같은 수를 더하는 것(\(A + kJ\), \(J\)는 성분이 모두 1인 행렬)이고, 대비는 128을 기준으로 차이를 늘리는 것(\(c(A - 128J) + 128J\)), 반전은 \(255J - A\)이다. 이미지를 대각선으로 뒤집으면 \((i, j)\) 성분과 \((j, i)\) 성분이 바뀐 행렬이 되는데, 이를 전치행렬 \(A^T\)라 한다. 또 좌우로 뒤집으려면 오른쪽에 반대각선이 1인 행렬 \(R\)을 곱한다(\(AR\)). 즉 이미지 처리는 대부분 행렬 연산이다.
  4. 연결인공지능에 사진을 학습시킬 때는 같은 사진을 뒤집거나 밝기를 바꿔 자료를 늘리기도 한다(데이터 증강). 다음 카드에서는 주변 픽셀을 함께 쓰는 계산(합성곱)을 다룬다.
  5. 적용각 변환을 해 보며 성분이 어떻게 바뀌는지 설명해 보자. 그리고 반전을 두 번 하면, 전치를 두 번 하면 어떻게 되는지도 확인해 보자.
  6. 판단255를 넘거나 0보다 작아진 값은 잘려서 원래 정보가 사라진다. 그래서 너무 밝게 한 뒤 다시 어둡게 해도 원래 사진으로 돌아오지 않는다.

확인조건이 달라지면

밝기 200인 픽셀을 반전한 뒤 밝기를 60만큼 올리면?

탐구 2

주변 픽셀과 섞으면 사진에서 윤곽선을 찾을 수 있을까?

합성곱 필터 · 조작

원래 이미지

필터 결과


          
  1. 질문사람은 사진에서 물체의 윤곽을 쉽게 찾는다. 숫자 행렬만 받은 컴퓨터는 윤곽을 어떻게 찾을 수 있을까?
  2. 복원두 수 묶음의 같은 위치끼리 곱해 모두 더하는 계산은 코사인 유사도를 구할 때 분자에서 했던 계산과 같다.
  3. 설명3×3 행렬 \(K\)(필터)를 이미지 위에 올려, 겹치는 9개 성분끼리 곱해 더한 값을 가운데 픽셀의 새 값으로 한다. 이것을 모든 픽셀에서 반복하는 계산을 합성곱이라 한다. 9칸이 모두 \(\frac19\)이면 평균이라 흐려지고, 위쪽 행은 음수, 아래쪽 행은 양수(예를 들어 \(-1, -2, -1\)과 \(1, 2, 1\))이면 위아래 밝기 차이가 큰 곳, 곧 가로 윤곽에서 값이 커진다.
  4. 연결이미지를 다루는 인공지능(합성곱 신경망)은 필터의 9개 수를 사람이 정하지 않고 자료로 학습한다. 그래서 처음 층은 윤곽을, 다음 층은 모양을, 더 깊은 층은 물체를 알아보는 필터가 학습된다.
  5. 적용필터를 바꿔 결과를 비교하고, 원래 이미지를 눌러 한 픽셀의 계산을 따라가 보자. 그다음 필터 성분을 직접 바꿔 대각선 윤곽을 찾는 필터를 만들어 보자.
  6. 판단윤곽 필터의 결과는 음수가 될 수 있어서, 이 카드는 보기 쉽게 128을 더해 회색을 0으로 나타냈다. 또 가장자리 픽셀은 바깥에 이웃이 없어 가까운 값으로 채웠다.

확인조건이 달라지면

모든 성분이 \(\frac19\)인 필터를, 9개 픽셀이 모두 90이고 가운데만 180인 곳에 적용하면 가운데 새 값은?

AI 출제 문항연습문제 풀어보기14문항
Esc

↑↓ 고르기Enter 열기