Computer Vision 44

[OpenCV] 소벨 필터 마스크 에지 검출 방법

에지(edge)란 영상에서 에지(edge)란 한쪽 방향으로 픽셀 값이 급격하게 바뀌는 부분을 말한다. 즉, 어두운 영역에서 갑자기 밝아진다거나, 밝은 영역에서 갑자기 어두워지는 부분을 에지라고 한다. ​ 일반적으로 객체와 배경의 경계 또는 객체와 다른 객체의 경계에서 에지가 발생한다. 영상에서 에지를 찾아내는 작업은 객체의 윤곽을 알아낼 수 있는 유용한 방법이며 비전 시스템에서 객체 판별을 위한 전처리로 에지 검출이 사용되고 있다. ​ 기본적으로 영상에서 에지를 찾아내려면 픽셀 값의 변화율을 측정하여 변화율이 큰 픽셀을 선택해야 한다. ​ 2차원 공간에서 정의된 영상에서 에지를 찾으려면 x축 방향과 y축 방향의 편미분을 모두 사용해야 한다. 2차원 공간에서 정의된 함수 f(x, y)가 있을 때 이 함수의..

[OpenCV] 투시 변환

영상의 투시 변환(perspective transform) 영상의 투시 변환이란 직사각형 형태의 영상을 임의의 블록 사각형 형태로 변경하는 변환이다. ​ 점 4개의 이동 관계에 의해 결정되는 투시 변환의 예이다. 왼쪽 직사각형 꼭지점 4개를 표시하고, 이 점들이 이동한 위치를 꼭지점으로 사용하는 사각형의 변환 형태이다. 투시 변환은 직선의 평행 관계가 유지되지 않기 때문에 결과 영상의 형태가 임의의 사각형 형태로 나타나게 된다. ​ 투시 변환은 보통 3 x 3 크기의 실수 행렬로 표현한다. 투시 변환은 8개의 파라미터로 표현할 수 있지만, 좌표 계산의 편의상 9개의 원소를 갖는 3 x 3 행렬을 사용한다. ​ OpenCV는 투시 변환 행렬을 구하는 함수와 투시 변환을 수행하는 함수를 모두 제공한다. ​ ..

[OpenCV] 영상의 변환 방법

영상의 이동 변환(translation transformation) 영상의 이동 변환이란 영상을 가로나 세로 방향으로 일정 크기만큼 이동 시키는 연산을 의미한다. 시프트(shift) 연산 이라고도 한다. 노란색으로 표현한 사각형이 w x h 크기의 원본 영상이다. 녹색으로 표현한 사각형은 가로 방향으로 a, 세로 방향으로 b 만큼 이동 변환 결과 영상이다. ​ 위의 그림과 같이 영상을 x 방향으로 a 만큼, y 방향으로 b 만큼 이동하는 어파인 변환 행렬은 M과 같이 구할 수 있다. OpenCV에서 영상을 이동 변환하려면 2 x 3 형태의 실수 행렬을 만들고, 이를 warpAffine() 함수 인자로 전달한다. #include "opencv2/opencv.hpp" #include using namespa..

[OpenCV] 어파인 변환(Affine Transformation)

어파인 변환의 개념 어파인 변환(affine transformation)이란 영상의 평행 이동, 확대 및 축소, 회전 등의 조합으로 만들 수 있는 기하학적 변환을 나타낸다. 영상을 확대 또는 축소하는 크기 변환과 임의의 각도만큼 회전하는 작업은 다양한 컴퓨터 비전 시스템에서 전처리 과정으로 널리 사용된다. ​ 어파인 변환은 영상을 평행 시키거나 회전, 크기 변환 등을 통해 만들 수 있는 변환을 통칭한다. 영상을 한쪽 방향으로 밀어서 만든 것 같은 전단 변환도 어파인 변환에 포함된다. 영상에 어파인 변환을 적용할 경우 직선은 그대로 직선으로 나타나고, 직선 간의 길이 비율과 평행 관계가 그대로 유지된다. 직사각형 형태의 영상은 어파인 변환에 의해 평행사변형에 해당하는 모습으로 변경된다. ​ 영상의 기하학적..

[OpenCV] 잡음 제거 필터링

영상 처리 관점에서 잡음(noise)란 원본 신호에 추가된 원치 않은 신호를 뜻한다. 영상에서 잡음은 주로 영상을 획득하는 과정에서 발생하며, 디지털 카메라에서 사진을 촬영하는 경우 광학적 신호를 전기적 신호로 변환하는 센서에서 주로 잡음이 추가된다. ​ 카메라에서 획득되는 영산신호는 보통 위와 같은 식으로 표현한다. ​ f(x, y) : 실제로 카메라에서 획득되는 영상 신호 s(x, y) : 디지털 카메라에서 카메라 렌즈가 바라보는 원본 신호 n(x, y) : 영상에 추가되는 잡음 ​ 잡음이 생성되는 방식을 잡음 모델(noise model) 이라고 하며, 다양한 잡음 모델 중 가장 대표적인 잡음 모델은 가우시안 잡음 모델이다. 가우시안 잡음 모델은 보통 평균이 0인 가우시안 분포를 따르는 잡음을 의미한..

[OpenCV] 샤프닝(Sharpening)

샤프닝(sharpening)이란 샤프닝이란 블러링과 반대되는 개념으로, 초점이 잘 맞은 사진처럼 사물의 윤곽이 뚜렷하고 선명한 느낌이 나도록 영상을 변경하는 필터링 기법이다. ​ 이미 촬영된 사진을 초점이 잘 맞은 사진처럼 보이게끔 변경하려면 영상 에지 근방에서 픽셀 값의 명암비가 커지도록 해야한다. 샤프닝을 구현하기 위해서는 블러링된 영상을 사용해야 한다. ​ 부드러워진 영상을 날카로운 영상으로 생성하는 것인데, 여기서 블러링이 적용된 영상을 날카롭지 않아 언샤프(unsharp)라고 하며, 언샤프한 영상을 이용하여 역으로 날카로운 영상을 생성하는 필터를 언샤프 마스크 필터라고 한다. ​ 언샤프 마스크의 과정으로, x축은 픽셀 좌표의 이동, y축은 픽셀 값을 나타낸다. 영상의 에지 부근에서 픽셀 값이 증..

[OpenCV] 블러링 기법과 가우시안 필터

블러링 기법 블러링(bluring)이란 마치 초점이 맞지 않은 사진처럼 영상을 부드럽게 만드는 필터링 기법이다. 스무딩(smoothing)이라고도 한다. 영상에서 인접한 픽셀 간의 픽셀 값 변화가 크지 않은 경우 부드러운 느낌을 받을 수 있다. 블러링은 거친 느낌의 입력 영상을 부드럽게 만드는 용도로 사용되거나 영상에 존재하는 잡음의 영향을 제거하는 전처리 과정으로 사용한다. ​ ​ 평균값 필터 블러링 필터 중 단순하고 구현하기 쉬운 평균값 필터(mean filter)가 있다. 평균값 필터란 입력 영상에서 특정 픽셀과 주변 픽셀들의 산술 평균을 결과 영상 픽셀 값에 설정하는 필터이다. 평균값 필터에 의해 생성되는 결과 영상은 픽셀 값의 변화가 줄어들고, 날카로운 에지가 무뎌지며 노이즈의 영향이 크게 사라..

[OpenCV] 필터링 개념과 filter2D함수

영상 처리에서 필터링(filtering)이란 원하는 정보만 통과시키고 원하지 않는 정보는 걸러 내는 작업을 뜻한다. 필터링에는 영상의 노이즈 성분을 걸러 영상을 깔끔하게 만드는 필터가 있고, 부드러운 느낌의 성분을 제거해 영상을 날카로운 느낌이 들도록 하는 필터가 있다. ​ 영상의 필터링은 보통 마스크(mask)라고 부르는 작은 크기의 행렬을 이용한다. 마스크는 필터링의 성격을 정의하는 행렬이며, 커널(kernel), 윈도우(window) 라고도 부른다. 마스크 자체를 필터라고 부르기도 한다. ​ 마스크는 다양한 크기와 모양으로 정의할 수 있으며, 마스크 행렬의 원소는 보통 실수로 구성된다. 1 x 3, 3 x 1 형태의 직사각형 행렬, 5 x 5, 3 x 3 등 형태의 정사각형 행렬, 십자가 모양 등 ..

[OpenCV] 영상의 논리 연산 방법

OpenCV에서 영상의 논리 연산(logical operation)이란 픽셀 값을 2진수로 표현하여 각 비트 단위 논리 연산을 수행하는 것을 의미한다. OpenCV에서는 논리합(OR), 논리곱(AND), 부정(NOT), 배타적 논리합(XOR) 연산을 지원한다. ​ 논리합(OR) : 2개의 입력 비트 중 1개라도 1이면 결과가 1이 되는 연산 논리곱(AND) : 2개의 입력 비트 중 모두 1인 경우만 결과가 1이 되는 연산 부정(NOT) : 입력 비트가 0이면 결과가 1, 1이면 결과가 0이 되는 연산 배타적 논리합(XOR) : 2개의 입력 비트 중 1개만 1인 경우 결과가 1이 되는 연산 ​ 입력 비트 논리 연산 결과 a b OR AND NOT a XOR 0 0 0 0 1 0 0 1 1 0 1 1 1 0..

[OpenCV] 영상의 산술 연산 방법

OpenCV에서 영상은 일종의 2차원 행렬이기 때문에 산술 연산이나 논리 연산을 적용할 수 있다. 2개의 영상을 서로 더하거나 빼는 등 산술 연산을 수행함으로써 다른 영상을 생성할 수 있다. 영사들끼리 곱셈이나 나눗셈의 연산은 거의 사용하지 않는다. ​ ​ 영상의 덧셈 영상의 덧셈은 2개의 입력 영상에서 같은 위치 픽셀 값을 서로 더하여 결과 영상 픽셀 값으로 설정하는 연산이다. ​ dst는 덧셈 연산의 결과이고, src1과 src2가 입력 영상이다. 영상의 덧셈 연산을 통하여 그 결과 값이 그레이스케일의 최대값인 255보다 커질 수 있으므로 포화 연산을 함께 적용한다. ​ OpenCV에서 산술 연산을 위해 제공하는 함수가 있다. ​ add(); void add(InputArray src1, InputA..