[OpenCV] 직선 검출 – 허프 변환(Hough transform)

이번 글에서는 허프 변환을 사용하여 직선 검출을 해보겠습니다. 허프 변환은 영상에서 직선을 검출하는데 자주 사용되는 기법입니다.우선 2차원 영상에서 y = ax + b는 아래와 같이 표현됩니다. a는 기울기, b는 y절편 입니다. 위 그림에서 점(x1, y1)와 점(x2, y2)는 y = ax + b그래프 위에 있습니다.이러한 그래프에서 이 수식을 a와 b에 대한 그래프로 바꾸면 b = -xa + y가 됩니다.점(x1, y1)와 점(x2, … Read more

[OpenCV] 캐니 에지 검출기(Canny edge detector)

이번 글에서는 캐니 에지검출기(Canny edge detector) 에 대해 알아보겠습니다. 캐니 에지 검출기는 John Canny가 1986년에 효과적인 에지 검출에 대해 제시한 방법입니다.아래 3가지 항목에 대해 충족하고자 하였습니다. 위 조건을 충족하기 위해 캐니 에지 검출기는 아래 과정을 수행합니다. 첫번째, 잡음 제거 생략이 가능하며, 잡음 제거를 위해 가우시안 필터를 적용합니다. 두번째, 그래디언트 계산 첫번째 작업을 통해 잡음이 제거된 이미지에서, … Read more

[OpenCV] 에지 검출 – 소벨 필터(Sobel filter)

이번 글에서는 소벨 필터 마스크에 대해 알아보겠습니다. 소벨 필터 마스크는 에지 검출 개념에 대한 글에서 설명했던 마스크처럼 1 X 3 또는 3 X 1 크기의 마스크를 사용하지 않습니다.소벨 마스크는 3 X 3 크기를 가집니다. OpenCV에서 소벨 함수는 아래와 같습니다. 2차원 공간에서 에지를 찾으려면 소벨과 같이 x축 방향과 y축 방향 편미분을 모두 사용해야합니다.그래디언트(gradient)는 x축 방향 미분과 … Read more

[OpenCV] 얼굴 인식 관련 정리 – Facial Landmark, Dlib

이 글은 OpenCV를 사용하여 얼굴 인식 프로그램을 만든 뒤 그 내용에 대한 정리 글입니다. 얼굴 인식을 하는 프로그램을 만들고 싶어 자료 조사 중 FaceMark API에 대해 알게 되었습니다.Facial Landmark Detection라고도 불리며 얼굴 인식을 하는 기능을 제공하며, 예시로 아래와 같이 인식이 가능합니다. FaceMark API를 사용하기 위해서는 아래 툴이 설치되어 있어야합니다. 개발 환경은 Windows 10 x64이며 Visual Studio 2019, cmake-3.23.2 … Read more

[OpenCV] 에지 검출 – 개념 설명

이번 글에서는 에지(edge) 검출에 대해 개념을 간단히 알아보겠습니다. 에지는 경계면, 윤곽선을 의미합니다. 에지를 구별하는 것은 사람에게는 쉬운 일입니다. 영상 처리에서 에지를 구별하려면 어떻게 해야 할까요? 영상에서 에지는 픽셀 값이 급격하게 바뀌는 부분을 의미합니다. 아래와 같은 1차원 연속함수가 있습니다. 연속함수의 값이 변하는 부분을 에지라고 했을 때 에지를 검출하는 방법은 미분을 하면 됩니다.1차원 연속함수 f(x)대한 미분 f'(x)에서 0이 … Read more

[OpenCV] 잡음 제거 – 2. 미디언 필터

이번 글에서는 미디언 필터(median filter)에 대해 알아보겠습니다. 영상의 잡음 중에는 소금과 후추를 뿌린 것같은 소금, 후추 잡음이 있습니다. 잡음의 픽셀값이 0 또는 255이여서 흰색과 검은 소금 후추를 뿌린것 같다하여 생긴 이름입니다. 소금, 후추 잡음을 생성하는 예제 코드는 아래와 같습니다. 미디언 필터는 소금 후추 잡음과 같이 잡음의 픽셀 값이 주변 값과 차이가 클 때 사용하면 효과적인 필터입니다.미디언 필터는 주변 픽셀에 대한 … Read more

[OpenCV] 잡음 제거 – 1. 양방향 필터

이번 글에서는 영상에서 잡음(noise)을 제거하는 방법을 알아보겠습니다. 잡음은 주로 영상 얻는 과정에서 발생하며, 영상에서 원치않는 값이 추가되는 것을 말합니다.잡음이 추가된 영상은 아래와 같습니다. 실제로 얻어지는 영상에 대해 아래와 같은 식으로 표현합니다. 잡음이 생성되는 방식을 잡음 모델이라고 하며, 가장 대표적인 잡음 모델은 가우시안 잡음 모델입니다.잡음을 생성하는 예제 코드는 아래와 같습니다. 잡을을 제거 하기 위해서는 잡음의 픽셀값이 주변 영상의 픽셀값과 … Read more

[OpenCV] 샤프닝 – 선명한 영상 만들기

이번 글에서는 영상을 또렷하고 선명하게 만드는 기법인 샤프닝(sharpening)에 대해 알아보겠습니다. 샤프닝 처리가 된 영상은 아래 영상 중 우측 영상입니다. 이렇게 영상을 선명하게 처리 하려면 엣지 부근의 영상의 명암비가 높아져야 합니다.레나 영상의 모자 부분을 확대해서 보면 아래와 같이 한눈에 봐도 명암비가 높아진 것을 확인할 수 있습니다. 이렇게 샤프닝을 처리하기 위해서는 역설적이게도 블러링된 영상을 사용한다는 것입니다.이전에 블러링 … Read more

[OpenCV] 블러링 – 가우시안 필터

이번 글에서는 가우시안 필터(Gaussian filter)에 대해 알아보겠습니다. 가우시안 필터는 확률론과 통계학에서 가우시안 분포에 대하여, 함수를 근사하여 생성한 필터 마스크를 사용하는 기법입니다.가우시안 분포는 보통 아래와 같이 좌우대칭의 종모양을 가지며, 자연계에서 발생하는 대부분 사건은 가우시안 분포를 따르는 것으로 알려져 있습니다. 가우시안 분포 함수식은 아래와 같습니다. σ(sigma)는 표준편차이며, μ(mu)는 평균을 나타내며, 가우시안 필터는 평균(μ)이 0인 가우시안 분포 함수를 사용합니다. … Read more

[OpenCV] 블러링 – 평균값 필터

이번 글에서는 평균값 필터(mean filter)에 대해 알아보겠습니다. 영상 처리 기법 중에는 영상을 부드럽게 만드는 블러링 기법이 있습니다. 아래 두 이미지 중 두번째 이미지가 블러링 처리된 이미지 입니다. 영상을 부드럽게 처리하는 것은 경계면에서 급격하게 변화하는 곳을 완만하게 처리하는 것입니다. 평균값 필터는 영상을 부드럽게 만드는 블러링에 사용되는 필터 중 하나입니다.평균값 필터는 모든 원소값이 1로 되어있고 원소 개수만큼 나누면 … Read more