Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

러닝머신 하는 K-공대생

밑바닥부터 Computer Vision 입문하기 본문

Computer Vision

밑바닥부터 Computer Vision 입문하기

prgmti1 2022. 1. 25. 21:00

0. 글을 시작하며

  본인은 OpenCV로 기본적인 이미지 회전, 색상 처리 등만 경험했었는데 좀 더 해보니 작년에 Image stitching을 직접 구현해보고 R&E에서도 카메라 캘리브레이션 기법과 homography matrix3차원 변환을 진행하는 등 컴퓨터 비전 분야에 관심이 어느 정도 생겼다. 근데 OpenCV 라이브러리만 잘 활용할 줄 알았지 그 배경 이론이나 관련된 얘기를 잘 몰랐다. 그래서 'OpenCV4 로 배우는 컴퓨터 비전과 머신 러닝' 책을 읽고 책에서 얻은 팁과 관심 분야 배경이론과 대략적인 원리를 위주로 정리해보았다. 사실 c++로 실습이 있길래 건너뛰고 내용 위주로 읽고 python으로 구현했다.

 

1. 영상의 명암비 조절, 히스토그램 분석

  OpenCV에서 명암비를 효과적으로 높이기 위해 dst(x, y) = saturate(src(x, y)+(src(x, y)-128)*alpha) (alpha1이상의 실수)로 그레이스케일 중간값을 기준으로 밝은 픽셀은 더욱 밝게, 어두운 픽셀은 더욱 어두워지게 명암비를 조절하면 효과적이다. 영상의 히스토그램은 영상의 픽셀 값 분포를 그래프 형태로 표현한 것이고 영상의 밝기와 명암비를 가늠하는데 도움됨. 히스토그램 스트레칭과 평활화 방법으로 히스토그램이 그레이 스케일 전 구간에 걸쳐서 나타나도록 조정해 명암비를 높일 수 있다.

 

2. 필터링

  필터링 연산의 결과는 마스크 행렬의 모양과 원소 값에 의해 결정됨. 같은 위치의 값을 곱해 더하는 마스크 연산을 진행해 출력 영상의 위치에 대응되는 픽셀 값으로 설정하여 필터링을 진행함. 가장자리 픽셀에서는 적용하기 힘들어 가장자리 픽셀을 확장하여 필터링을 진행한다. 신호 처리에서 두 개의 신호가 있을 때 같은 위치에 있는 신호 값을 모두 곱해 다시 더하는 연산을 correlation이라고 하는데 convolution은 두 입력 신호 중 하나를 원점 기준 변환한 후 correlation을 진행하는 것인데 필터 마스크가 상하 및 좌우대칭이면 correlationconvolution 결과가 같고 영상 처리에 사용되는 많은 필터 마스크가 상하 및 좌우 대칭이라 필터링을 convolution 연산으로 관용적으로 부름. 처음으로 왜 convolution이라 부르는지 알게되었다..

 

  블러링을 위해 평균값 필터(특정( 픽셀과 주변 픽셀들의 산술 평균 반환), 가우시안 필터(2차원 가우시안 분포 함수로부터 구한 마스크 행렬 이용)는) 필터링 대상 픽셀 근처에는 가중치를 크게 주고 주변부에는 가중치만 조금 줘 가중 평균을 구하는 것과 같다. 2차원 가우시안 분포 함수는 1차원 가우시안 분포 함수의 곱으로 표현되어 g로 필터링 한 번 수행하고 전치 행렬 g^T로 필터링하여 가우시안 필터링을 진행 가능.. 샤프닝은 윤곽이 뚜렷하고 선명한 느낌이 나도록 필터링하는 방법으로 f(x,y)f(x, y)에 블러링을 적용한 f’(x,y)가 있으면 g(x, y) = f’(x, y)-f(x, y)라고 할 때 g(x,y)g(x, y)는 입력 영상에서 블러링 된 영상을 뺀 결과이므로 입력 영상에서 날카로운 성분만을 가지고 있는 함수이므로 h(x, y) = f(x, y) + alpha*g(x, y)로 샤프닝이 적용된 결과 영상을 표현할 수 있다. 대부분의 영상에 가우시안 잡음이 포함되어 보통 가우시안 필터를 사용해 잡음을 없애는데 픽셀 값이 급격하게 변경되는 에지 근방에 적용되면 잡음뿐 아니라 에지 성분까지 감소해 양방향 필터를 사용한다. 두 개의 가우시안 함수 곱으로 구성된 필터로 두 점 사이에 대한 가우시안 함수와 두 점의 픽셀 값 차이에 의한 가우시안 함수로 에지를 두고 있는 픽셀에 대해서 0에 가까운 값이 되어 에지가 보존되는 원리이며 모든 픽셀에 대해 마스크가가 다른 형태를 가져 연산량이 많다.

 

3. 영상의 기하학적 변환

  어파인 변환은 (x, y)를 (x’, y’)으로 이동하는 것이며 평행이동, 회전, 크기 변환 등을 통해 만들 수 있는 변환이고 직선 간의 길이 비율과 평행 관계가 유지되며 2x3 어파인 변환 행렬에 (x,y,1)^T(x, y,1)^T를 곱해 (x’, y’)을 얻을 수 있다. 한 점의 대응관계로 2개의 방정식을 얻으므로 최소 3개의 이동 관계를 알면 어파인 변환 행렬을 계산할 수 있다. 투시 변환은 직사각형 형태의 영상을 임의의 볼록 사각형 형태로 변경할 수 있는 변환이며 결과 영상에서 직선성이 유지되지만, 두 직선의 평행 관계는 깨질 수 있다. 점 하나의 이동 관계로부터 x,y 각각에 대한 방정식 하나 얻을 수 있으므로 점 4개 이동 관계로부터 8개 방정식 얻을 수 있고 여덟 개의 파라미터 정보를 계산할 수 있다. 투시 변환은 3x3 행렬 M_p로 표현되며 (wx’,wy’,w)^T = M_p(x,y,1)^T로 표현되며 w는 비례 상수이며 x’,y’x’, y’을 계산할 수 있다.

 

4. 에지 검출

  에지는 픽셀 값이 급격하게 변하는 부분이므로 픽셀 값의 변화율율 이용해 에지를 찾을 수 있다. 이산함수 I에서는 h를 이산 값의 간격으로 두고 미분 근사를 하는데 (I(x+1)-I(x-1))/2를 보통 영상에서 진행하고 2차원 평면에서 정의된 함수이므로 I(x,y)를 x,y에 대해 편미분을 해야 하고 이 미분 근사는 [-1 0 3], [-1 0 3]^T의 마스크로 필터링하여 가로, 세로로 편미분한 정보를 담는 행렬을 계산할 수 있다. 이때 이 그래디언트 크기가 특정 값보다 큰 것으로 2차원 영상에서 에지를 찾는다. 근데 대부분 영상에 잡음이 껴있어서 소벨 필터나 샤르 필터와 같은 개선된 미분 필터를 이용한다. 그래디언트 크기만을 기준으로 픽셀을 검출하면 임계값에 민감하고 에지 픽셀이 두껍게 표현되므로 에지 검출을 최적화 문제의 관점으로 캐니 에자 검출 방법론이 제시됨. 가우시안 필터링으로 잡음을 제거하고, 3x3 소벨 마스크로 마스크 필터링을 진행한 후 그래디언트 크기(L1 norm)와 방향을 모두 계산한다. 이후 그래디언트 크기가 local maximum인 픽셀만을 설정하는 비최대 억제를 적용하고 이중 임계값을 이용한 히스테리시스 에지 트래킹으로 강한 에지와 연결된 약한 에지를 모두 에지로 선정한다. 이외로도 직선은 허프 변환 기법이, 허프 그래디언트를 이용해 원을 검출한다.

 

5. 특징점 검출

  특징점으로 사용할 수 있는 코너 점 검출 방법엔 해리스 코너 검출과 FAST 코너 검출 방법이 있다. 해리스는 영상의 특정 위치 (x,y)에서 delta x, delta y 만큼 떨어진 픽셀과의 밝기 차이를 E(delta x, delta y)로 표현하고 E함수가 모든 방향으로 값이 크게 나타나는지를 테일러 급수, 고유값 분석 등의 수학적 기법으로 코너 응답 함수 R을 정의했다. (E 함수가 모든 방향으로 값이 크면 코너로 생각), R0보다 충분히 크면 코너, 0에 가까운 실수면 평탄한 영역, 0보다 작은 음수면 에지로 판별한다. 이렇게 해리스 코너 검출은 코너 특성을 수학적으로 잘 정의하고 복잡한 수식을 잘 풀어 수치적으로 코너를 검출했다는 데에 의미가 있다. 근데 연산 속도가 느리다는 단점이 있어 단순히 픽셀 값 비교 방법으로 코너를 검출하는 FAST 코너 검출 방법이 제안되었다. 영상의 모든 픽셀에서 픽셀을 둘러싸고 있는 16개의 주변 픽셀과 밝기를 비교해 코너 여부를 판별한다. 특징 코너 점 주변 픽셀들도 함께 코너로 검출하는 경우가 많아 15개와의 픽셀 값 차이 합을 코너 점수로 정의해 비최대 억제 작업을 진행한다.

 

  앞서 본 코너는 영상이 회전되어도 여전히 코너로 검출된다. 영상의 크기가 변경되거나 회전이 되어도 반복적으로 찾을 수 있는 특징점들을 크기 불변 특징점이라 하고 영상 매칭, 영상 이어 붙이기 등 다양한 비전 분야에서 활용된다. 대표적인 알고리즘은 SIFT 이며 입력 영상으로부터 스케일 스페이스(영상에 다양한 표준편차를 이용한 가우시안 블러링을 적용해 구성한 영상 집합)를) 구성한다. SIFT 알고리즘에선 인접한 가우시안 블러링 영상끼리의 차영상(DoG, Difference of Gaussian)을 사용하는데 DoG 영상 집합에서 인접한 DoG 영상을 고려한 지역 극값 위치를 특징점으로 사용하고 에지 성분이 강하거나 명암비가 낮은 지점을 제외시킨다. 특징점 검출뿐 아니라 특징정 주변 픽셀 값을 이용한 기술자(descriptor) 계산 방법도 존재하며 특징점 부근의 부분 영상으로부터 그래디언트 방향 히스토그램을 추출하여 기술자로 사용한다. 이후 DoG 영상을 단순한 이진 패턴으로 근사화한 SURF 알고리즘, 가우시안 함수 대신 nonlinear duffusion 필터를 적용해 비선형 스케일 스페이스를 구축한 KAZE 알고리즘도 존재하며 이후 실시간 적용이 가능한 ORB 알고리즘도 등장하게 되었다.

 

6. 글을 마무리하며 

  이렇게 간단한 밝기, 명암비 조절, 필터링, 에지를 비롯한 특징점 검출에 대해 전반적인 틀을 잡아둘 수 있었다. 원리 이해 없이 써왔던 에지, 직선, 특징점 검출에 대한 배경에 대해 알아볼 수 있었다. 영상에 기하학적 변환이 흥미로웠는데 수학적인 부분을 최대한 적게 넣어둔 책이라 아쉬운 부분이 많았다. 영상의 기하학적 변환과 관련된 공부를 이어나가고 싶어 어떤 책이 좋을까 ML 쪽 커뮤니티에 물어보니 ‘Multiple View Geometry’ 란 책을 알게 되었는데 이쪽 분야의 수학적 내용은 다 들어가 있는 듯하다. 다만 원서라 당황했지만 한국어로 보기 좋게 정리해놓은 자료가 있어 나중에 공부할 때 고움이 될 것 같다. 또한 R&E 를 같이한 친구가 추천해준 다크 프로그래머 블로그의 영상 처리 관련 글도 정말 수준급이라 많은 지식을 쌓을 수 있을 것 같다. 그래서 내신은 언제 챙긴다고..?

 

- Multiple View Geometry 정리 블로그: https://edward0im.github.io/mathematics/2020/06/03/multiple-view-geometry1/

 

Multiple View Geometry 책 내용 정리 파트1 · A L I D A 📣

카메라 행렬 $\mathbf{P}= [\mathbf{M}\ | \ \mathbf{p}_{4,col}]$이 주어졌을 때 행렬 $\mathbf{M}∈ \mathbb{R}^{3× 3}$의 세 번째 행벡터 $\mathbf{m}_{3,row}$는 주점(principal point)를 의미한다. 해당 섹션에서는 주점 $\mathb

edward0im.github.io

- 다크 프로그래머 블로그의 '영상처리' 카테고리 

https://darkpgmr.tistory.com/category/%EC%98%81%EC%83%81%EC%B2%98%EB%A6%AC

 

'영상처리' 카테고리의 글 목록

영상처리 & 프로그래밍

darkpgmr.tistory.com

 
Comments