[AI] 컴퓨터비전 - 기초 영상 처리 기법

2024. 4. 20. 14:52

https://m.hanbit.co.kr/store/books/book_view.html?p_code=B8870109394

 

IT CookBook, 컴퓨터 비전과 딥러닝

규칙 기반의 고전 컴퓨터 비전을 지원하는 OpenCV와 데이터 중심의 딥러닝 컴퓨터 비전을 지원하는 텐서플로를 활용한 85개 파이썬 프로그램으로 컴퓨터 비전을 균형 있게 배울 수 있습니다.

m.hanbit.co.kr

위 도서를 기반으로 정리한 내용이며, 일부 내용이 없거나 추가되었을 수 있습니다. 자세한 내용을 알고 싶으면 위 책을 참고하여 주세요.

 

 

3.1. 디지털 영상 기초

디지털 변환

컴퓨터는 카메라가 영상을 획득하는 과정을 모방한다. 사람의 눈을 모방 하기에는 뇌에서 처리되는 정보를 표현하기에 매우 어려웠다. 컴퓨터가 기본적으로 사용하는 카메라는 바늘구멍 사진기와 유사한 원리를 가지고 있다. 

 

디지털 카메라는 CCD 센서를 사용한다. CCD는 빛이라는 아날로그 신호를 받아 디지털 신호로 변환하여 메모리에 저장한다. 이때, 양자화와 샘플링을 통해 디지털 영상으로 변환한다. 

  • 양자화 : 화소의 명암을 L개 구간으로 나누어 표현 (보통 1 바이트로 표현하기 위해 L = 256 으로 설정)
  • 샘플링 : 2차원 영상 공간을 가로 N, 세로 M 구간으로 나누는 것. 이 때의 NxM을 영상을 크기 즉, 해상도라고 한다. 

 

다양한 종류의 영상

디지털 영상도 결국은 2차원 이기 때문에 좌표계를 사용한다. 하지만, 배열의 표기 방식에 따라 축이 일반적인 상황과는 반대로 이루어져 있다. 왼쪽 위를 (0,0)으로 두고 y축이 아래로 향한다. 영상을 저장하는 배열에서 화소의 위치를 지정할 때는 (y, x) 표기를 사용하고, 그 외는 모두 (x,y)를 사용하지 헷갈리지 않도록 주의하자.

 2차원 구조의 배열을 하나만 사용한 것은 단순히 명암(밝고 어두움)만 알 수 있다. 여기에 우리가 색을 추가하려면, RGB 세 개의 채널로 구성된 구조로 확장시켜야 한다. 

 

만약, 자외선, 적외선 까지 확장된 다분광 영상은 이보다 더 많은 채널을 추가해야한다.

최근에는 이런 배열 기반이 아닌, 점 구름(point cloud) 형식의 저장방식도 있다. 이 방식은 라이다와 같이 빛을 측정한 것이 아닌 물체와의 거리를 계산하여 저장한 데이터들을 위해 탄생했다. 

point cloud

컬러 모델

세상은 RGB 세 가지 색상만 있으면 모든 색을 표현할 수 있다. 

RGB

여기서, 빛의 세기까지 확장시킨 모델이 HSV이다. H는 색상, S는 채도, V는 명암을 표현한다. 이는 같은 물체도 빛이 없을 때 찍으면 더 어둡게 나오고 밝은 곳은 더 밝게 나오는 개념을 적용하기 위해서 등장했다. 

opencv 에서 컬러 영상의 img.shape를 출력했을 때, (a, b, 3) 이라는 결과가 나오는데 이때 마지막 항이 색을 나타내는 채널이 있는 것이다. 

 

img[::0] 는 B, img[::1]는 G, img[::2]는 R을 나타낸다. 이 때 저장은 해당 색이 사용되면, 더 밝은 값을 표현하고 있다. 
ex) R 채널에서 빨간색 유니폼은 밝게 표현되지만, 파란색 유니폼은 검게 표현된다. 

 

3.2 이진영상

컬러영상이나 명암 영상을 이진 영상으로 변환해야할 필요가 있다. 이진 영상은 정말 이미지를 0 또는 1로 표현한 것이다. 이때 우리는 어떤 값을 기준으로 0, 1을 구분할 지 결정해야한다. 

이진화

우리는 이진화를 어떻게 할 것인지에 대한 두 가지 방법을 알아볼 것이다. 

(1) 히스토그램을 이용한 이진화

히스토그램으로 희소의 발생 빈도를 표현한 뒤, 계곡 (봉우리 사이의 빈도가 작은 부분)을 찾아 두 부분으로 나눈다. 

봉우리 (빨간 부분) 계곡 (파란 부분)

하지만, 실제 영상은 여러 개의 계곡이 나오거나 계곡이 없을 수도 있다. 

(2) 오츄 알고리즘 

오츄 알고리즘은 이진화를 최적화 문제로 다루었다. 

n : 화소의 개수 v : 분산

즉, 가중치의 분산이 낮을 수록 손실함수가 작아진다. 그 때의 t를 구하는 최적화 문제로 이진 분류를 해결한다. 

오츄 알고리즘은 모든 후보 해에 대해 계산을 한 뒤 최적의 값을 찾는다. 이런 방식을 낱낱 탐색 알고리즘 (exhaustive search algorithm)이라고 한다. 하지만, 나중에는 너무 해 공간의 크기가 커서 탐색 시간을 줄이기 위해 greedy algorithm 기법을 사용하거나, 역전파 알고리즘을 사용한다.

 

연결 요소

연결 요소는 화소의 연결성을 설명하기 위해 등장했다. 4-연결성과 8-연결성이 있다. 

 

모폴로지

영상을 변환할 때 하나의 물체가 여러 개로 분할되거나 다른 물체가 하나로 합쳐질 수도 있다. 이런 부작용을 줄이기 위해 모폴로지라는 기법이 등장하였다. 

  • 팽창 : 구조 요소의 중심을 1인 화소에 위치 시킨 뒤, 구조 요소에 해당하는 모든 값을 1로 변환한다.
  • 침식 : 구조 요소의 중심을 1인 화소에 위치 시킨 뒤, 모든 화소가 1이면 1, 그렇지 않으면 0으로 변환한다.

침식 -> 팽창 : 열림
팽창 -> 침식 : 닫힘

 

3.3 점 연산

명암 조절

화소의 값을 조정하여 영상을 더 밝게 하거나 어둡게 할 수 있다. 

하지만, 실제 사람의 눈은 같은 값을 변화시켰다고 해서 같은 정도의 밝기가 변화되었다고 느끼지 않는다. 이를 해결하기 위해 감마 보정을 정의한다. 비선형적인 시각 반응을 수학적으로 표현한 것이다. 

감마의 값이 1이면 원래 영상을 유지하고, 1보다 커지면 밝아지며, 1보다 작아지면 어두워진다. 

 

히스토그램 평활화

히스토그램이 평평하게 되도록 영상을 조절해 영상의 명암 대비를 높이는 방법이다. ( 히스토그램이 뾰족하면, 특정 화소에 값이 몰려있다는 것이고 이는 영상의 대비가 낮아진다. )

h' ( 원래는 h 위에 . 이 있으나 서술 편의상 ' 로 기술하겠음 ) 는 히스토그램을 정규화 한 것이며, h''는 이 정규화한 히스토그램을 0~i 번 째의 합으로 표현한 값을 가지고 있다. 

우리는 이 값에 열의 개수를 곱하고(L-1) round 하여 정수로 변환한다. 그리고 이를 이용해 새로운 영상의 명암으로 변환한다 

 

 

3.4 영역 연산

컨볼루션 (Convolution)

각 화소에 필터를 적용해 곱의 합을 구하는 연산

2차원 컨볼루션

3차원 컨볼루션

컨볼루션 계산법은 아래 글에서 다룬 적이 있으니 참고 바란다. 

2024.02.08 - [Computer Science/AI] - [MIT 6.S191] Convolutional Neural Networks

 

[MIT 6.S191] Convolutional Neural Networks

All materials are copyrighted and licensed under MIT license. © Alexander Amini and Ava Amini MIT Introduction to Deep Learning IntroToDeepLearning.com MIT Deep Learning 6.S191 MIT's introductory course on deep learning methods and applications. introtode

mobuk.tistory.com

 

다양한 필터

컨볼루션 계산 자체는 사실 특정한 목적이 없다. 우리는 필터의 값을 조정하여 이를 의미 있는 연산으로 바꾸는 것 뿐이다. 

(1) 스무딩 필터 - 잡음 개선

평균을 취해서 주위와 유사하게 만들어주거나 가우시안을 이용해 중심으로 멀어질수록 작은 값을 취해주는 방식이 있음. 그러나, 블러링(물체의 경계가 흐릿해지는 현상)이라는 단점이 있음

(2) 샤프닝 필터

스무딩과 반대로 에지를 선명하게 하여 물체의 식별을 도움. 

(3) 엠보싱 필터

물체에 돋을새김 느낌을 줌.

 

3. 5 기하 연산

동차 좌표와 동차 행렬

동차 좌표(homogeneous coordinate) 는 2차원 점의 위치에 1을 추가해 3차원으로 표현한다. 

우리는 이동, 회전, 크기 변환과 이 세 가지 변환을 결합한 복합 결합으로 여러 동작을 할 수 있다. 

여기서 회전을 보면, -sin과 sin의 위치가 일반적인 상황과는 다르게 반대로 서술되어 있는데 내 추측컨대 좌표계가 뒤집힌 모양이라 그런듯하다. 

위 세 가지 변환은 동차 행렬의 3행이 (0,0,1) 이기 때문에 직선은 직선으로, 평행은 평행으로 유지되는 성질을 가지고 있다.  이러한 변환을 어파인 변환(affine transformation)이라고 한다. 

 

영상의 기하 변환

화소는 정수로 지정되어 있다. 이 때 영상 회전, 크기 조정을 하다 보면 계산 결과가 실수가 될 수도 있다. 이 때 단순 반올림을 한다면, 여러 문제를 일으킬 수도 있다. 

또한, 값을 받지 못하는 현상도 일어날 수 있다. 이런 불만족 스러운 화소가 발생하는 현상을 안티 에일리어싱(anti-aliasing)이라고 한다. 이때는 역행렬을 사용해 변환된 화소가 원래 영상의 어디에 해당하는지 찾으면 된다. 이를 후방변환 이라고 한다. 

 

영상 보간

후방변환을 사용하면 구멍이 생기는 현상을 방지할 수는 있으나, 실수 좌표 변환에 반올림을 이용하는 문제가 해결되지 않는다. 이러면 서로 다른 화소가 같은 화소에 배정될 수도 있다. 그래서 최근접 이웃(nearest neighbor) 방식을 사용하여 보간을 할 수 있다. 

이 방식은 화소가 걸친 비율에 따라 가중 평균하여 화솟값을 계산한다. 그리고 겹치는 비율을 곱하는 방식이라 선형 보간법에 해당되며, x와 y 모두 고려하기 때문에 양선형 보간법이라고 한다. 

 

BELATED ARTICLES

more