정리 노트

영상 처리의 세 가지 기본 연산 본문

개념 정리

영상 처리의 세 가지 기본 연산

꿈만 꾸는 학부생 2022. 9. 21. 14:58
728x90

이 글은 국민대학교 소프트웨어학부 '컴퓨터 비전' 강의를 듣고 요약하는 글입니다. 실제로 원하시는 정보가 여기에 없을 수도 있습니다. 이 점 유의 바랍니다. 오류 지적 매우 환영합니다!


이번 글에서는 영상 처리에 있는 세 가지 기본 연산들에 대해 알아보겠습니다. 이 글에서 사용하는 이미지는 모두 이 책에서 가져왔습니다.

 

컴퓨터 비전(Computer Vision) : 네이버 도서

네이버 도서 상세정보를 제공합니다.

search.shopping.naver.com

기본 연산 세 가지

영상 처리를 진행하면서 사용하는 세 가지 기본 연산이 있습니다.

  • 점 연산: 자신의 명암 값에 따라 새로운 값을 결정
  • 영역 연산: 이웃 화소(픽셀)의 명암 값에 따라 새로운 값 결정
  • 기하 연산: 일정한 기하 연산으로 결정된 화소(픽셀)의 명암 값에 따라 새로운 값 결정

 

점 연산

점 연산은 연산에 필요한 값이 자신의 명암 값 하나인 연산입니다. 점 연산을 식으로 쓰자면 아래와 같습니다.

여기서 대부분 k = 1입니다.

j, i는 픽셀의 x, y좌표라 생각하고 t는 그냥 어떠한 선형 연산이라 생각하면 됩니다. 대부분 k = 1이므로 t(f(j, i)) 이런 식으로 점 연산이 이루어집니다. 이런 연산은 선형 연산인데 이를 이용해 이미지를 밝게 하거나 어둡게 만들 수 있습니다.

점 연산 중 비선형 연산을 수행해서 색상 조절을 하는 등에 이용할 수 있습니다.

연산 결과에 감마를 제곱하는게 붙었으므로 이는 선형 식이 아니다.

여기서 L은 명암을 표현하는 단계라 생각하면 됩니다. 예를 들어 L = 8이면 명암은 0 ~ 7단계로 나타낼 수 있고 L = 256이면 0 ~ 255까지 명암을 표현할 수 있습니다.

영역 연산

영역 연산에서 상관, convolution의 개념이 나옵니다. 상관과 convolution을 수식으로 표현하면 아래와 같습니다.

상관과 컨볼루션의 차이

식으로 보는 것보다 그림을 이용해서 알아봅시다.

상관과 컨볼루션의 차이를 그림으로

여기서 윈도우(필터)는 입력에 대해 특징을 알아내기 위해 사용하는 도구라고 생각하면 편합니다. 이 윈도우가 입력에 대해 슬라이딩하면서 연산을 진행합니다. 여기서 컨볼루션은 윈도우를 뒤집어서 연산을 진행합니다. 뒤집는 이유는 컨볼루션의 정의 때문인데 컨볼루션에 대한 설명은 위키피디아 설명을 참고하시길 바랍니다.

 

합성곱 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 합성곱(合成-), 또는 콘벌루션(convolution)은 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산

ko.wikipedia.org

이러한 convolution 연산은 선형 연산입니다. 그리고 영역 연산에서는 비선형 연산도 존재합니다. median 필터를 사용하는 경우가 대표적인데, median 필터는 필터 영역에서 중앙값을 대표 값으로 설정하는 특징이 있습니다. 이 과정에서는 convolution과 같은 선형 연산을 하지 않으므로 이는 비선형 연산에 속합니다.

median 필터를 적용한 모습

동차 좌표와 동차 행렬(기하 연산)

기하 연산을 통해 기존의 이미지를 일정 픽셀만큼 이동시키거나 일정 각도만큼 회전시킬 수 있습니다. 이때 사용되는 것이 동차 좌표와 동차 행렬입니다. 동차 좌표는 차원을 동차 행렬과 맞춰서 선형 연산을 진행할 수 있게끔 해줍니다. 예를 들어 이미지의 픽셀 좌표를 가리키는 a를 a = (y, x)라 할 때 a를 동차 좌표를 이용해서 a' = (y, x, 1) 이런 식으로 확장시킬 수 있습니다. 동차 행렬은 행렬로 좌표 값과 동차 행렬 간의 곱셈을 진행해서 기하 연산이 진행된 좌표를 얻을 수 있게 해 줍니다.

여러 가지 동차 행렬들

예를 들어 좌표 b = (3, 4)를 y 방향으로 6만큼, x 방향으로 3만큼 이동시킨다고 해봅시다. 물론 (3 + 6, 4 + 3)으로 바로 해버릴 수도 있지만, 동차 좌표와 동차 행렬을 이용해 봅시다. 위의 표를 참고해서 이동에 대한 동차 행렬을 파이썬의 리스트 표현을 이용해서 써보면 H = [[1, 0, 0], [0, 1, 0], [6, 3, 1]]입니다. 그래고 좌표 b를 b' = (3, 4, 1)로 바꿉니다. 그러면 b'와 H 사이의 행렬 곱을 수행하면 (3 + 0 + 6, 0 + 4 + 3, 0 + 0 + 1) = (9, 7, 1)이라는 결과를 얻을 수 있고 이를 다시 원래 차원으로 바꿔 (9, 7)이라는 최종 결과를 얻을 수 있습니다.

이처럼 동차 좌표와 동차 행렬을 사용해서 이미지에 기하학적 변환을 효율적으로 진행할 수 있습니다. 예를 들어 특정 좌표값에 대해 임의의 이동과 회전을 가하려면 두 번의 행렬 곱셈이 이루어집니다. 하지만 이동과 회전에 대한 동차 행렬들의 곱을 미리 수행해서 하나의 행렬로 저장하고 있으면, 특정 좌표에 대해 한 번의 행렬 곱을 수행함으로써 재사용성을 가질 수 있습니다. 이러한 변환을 복합 변환이라고 합니다.

728x90

'개념 정리' 카테고리의 다른 글

Docker  (0) 2022.12.22
영상 처리에서의 edge 검출  (0) 2022.10.09
Git(2)  (0) 2022.07.06
Git(1)  (0) 2022.07.05
Python의 list, tuple, dictionary, set  (0) 2022.07.02