[OpenCV] 영상의 이진화 – threshold

이번 글에서는 그레이스케일 영상의 이진화에 대해 간략한 설명과 threshold 함수의 사용법에 대해 알아보겠습니다. 설명 영상의 이진화는 픽셀을 검은색 또는 흰색같이 두 개의 값으로 나누는 작업을 말합니다. 영상에서 의미가 있는 관심 영역(ROI)과 비관심 영역을 구분할 때 이진화가 사용됩니다. 예를 들어 특정 색상의 세포를 구분할 때, 수도쿠에 입력된 글자를 인식할 때 이진화를 사용합니다. 그레이스케일에서는 영상을 이진화 시킬 때 특정값 T를 정해놓고 픽셀 값이 특정값보다 … Read more

[OpenCV] 영상 산술 연산 – 3. 논리 연산(AND, OR, XOR, NOT)

이번 글에서는 영상의 논리 연산, 비트단위 연산인 AND, OR, XOR, NOT에 대해 알아보겠습니다. 영상에서의 비트단위 연산은, 영상에서의 픽셀값을 비트단위로 표현하여 논리연산을 수행하는 것을 말합니다.비트 단위 연산이라는 것에 대해서 처음 들어보신다면 여기를 참고하시길 바랍니다. 함수 원형 AND, OR, XOR, NOT의 함수는 모두 비슷하니 한꺼번에 알아보도록 하겠습니다. NOT 연산은 비트를 반전 시키므로 입력 영상이 하나이고 나머지 AND, OR, XOR은 … Read more

[OpenCV] 영상 산술 연산 – 2. 곱셈, 나눗셈

안녕하세요 이번 글에서는 영상에서의 산술 연산 곱셈 나눗셈에 대해 알아보겠습니다. 이전 글에서도 설명했지만 곱셈, 나눗셈은 잘 사용되지 않습니다. 곱셈 OpenCV에서는 곱셈 연산을 할 경우 multiply 함수를 사용합니다. 샘플 코드는 아래와 같습니다. 실행 결과는 아래와 같습니다. src1과 src2가 곱해져서 dst1에 입력되어 있는 것을 볼 수있습니다. 나눗셈 나눗셈에 대해 알아보겠습니다. 나눗셈은 divide 함수를 사용합니다. 샘플 코드는 아래와 같습니다. 실행 결과는 아래와 … Read more

[OpenCV] 영상 산술 연산 – 1. 덧셈, 뺄셈

안녕하세요 이번 글에서는 영상에서의 산술 연산에 대해 알아보겠습니다. OpenCV에서 영상은 행렬로 표현하기 때문에 두개의 영상을 더하거나 빼는 연산을 수행할 수 있습니다.영상의 덧셈, 뺄셈, 곱셈, 나눗셈 모두 가능하지만 곱하기, 나누기는 잘 사용하지 않습니다.먼저 덧셈, 뺄셈 연산에 대해 알아보겠습니다. 덧셈 OpenCV에서는 덧셈 연산을 할 경우 add() 함수를 사용합니다. 샘플 코드는 아래와 같습니다. 실행 결과는 아래와 같습니다. addWeighted 함수를 사용하면 두 영상을 … Read more

[OpenCV] 원 검출 – 허프 그래디언트(Hough gradient)

번 글에서는 허프 변환을 이용하여 원 검출 하는 방법에 대해 알아보겠습니다. 우선 원 검출 방법에 대해 알아보겠습니다. 중심 좌표가 (a, b)이고 반지름이 r인 원의 방정식은 아래와 같습니다. 위 방정식에서 파라미터는 3개이므로, 3차원 파라미터 공간에서 축적 배열을 정의 후 누적이 많은 위치를 찾아야 합니다.하지만 이 방식은 메모리와 시간을 많이 필요하므로 허프 그래디언트를 사용합니다. 허프 그래디언트는 아래 두 단계로 … Read more

[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