오늘은 영상 속의 특징점(Keypoint)를 검출할 수 있는 Harris Corner에 대해 알아보겠습니다.

 

1998년도에 발표된 Harris Corner는 1980년도에 발표된 Moravec's Corner의 방법을 보안한 알고리즘으로서,

영상에서 코너의 특징점을 찾는 것입니다. 간략하게 말하자면 아래 그림과 같이 작은 영역을 이동시키며,

이동된 영역과 비교하여 얼마나 변화했는지 찾는 것입니다.

 

 

출처 : https://darkpgmr.tistory.com/131

 

아래 그림과 같이 이동되기 전과 이동된 영역의 변화의 차이인 R이 0보다 작으면 엣지(Edge), 둘다 0에 가까우면

플렛(Flat), 0보다 크면 코너점이 됩니다.

 

출처 : https://darkpgmr.tistory.com/131

 

 * 위 설명은 수학적 과정에 대한 언급 없이 표면적으로 간단하게 설명한 것입니다. 수학적인 전체의 과정은 추후에
충분히 이해한 뒤 내용을 추가해 작성하도록 하겠습니다.

 

 

 

아래 코드는 Opencv에서 제공하는 라이브러리 속 함수인 cornerHarris()를 사용한 예시입니다.

 

* 본 코드는 Opencv 3.1.0 Version에서 사용하였습니다.

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

// Harris Corner thresh
int thresh = 120;

int main()
{
	Mat img = imread("D:\\sea.jpg");
	Mat gray;

	// Image resize
	resize(img, img, Size(500, 500), 0, 0, INTER_LANCZOS4);

	Mat img_copy = img.clone(); // 원본 이미지 복사
	Mat show_img = img.clone(); // 원본 이미지 복사

	// Grayscale
	cvtColor(img, gray, CV_BGR2GRAY);

	Mat harris_c;
	Mat harris_norm;
	Mat cs_abs;

	harris_norm = Mat::zeros(gray.size(), CV_32FC1);
	
	// Harris Corner
	// cornerHarris(입력 이미지(Grayscale), 출력 이미지, 인접 픽셀 크기(Blocksize), Sobel ksize, Harris parameter, 픽셀 보간법)
	cornerHarris(gray, harris_c, 2, 3, 0.05, BORDER_DEFAULT);

	// 정규화(Normalizing)
	// normalize(입력 이미지, 출력 이미지, normalize range(low), normalize range(high), 픽셀 보간법) 
	normalize(harris_c, harris_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat());

	// 미분한 결과에 절대값을 적용하여 8bit의 unsigned int형으로 바꾸어 표현
	convertScaleAbs(harris_norm, cs_abs);

	// Drawing a circle around corners
	for (int j = 0; j < harris_norm.rows; j += 1)
		for (int i = 0; i < harris_norm.cols; i += 1)
			if ((int)harris_norm.at<float>(j, i) > thresh)
				circle(img_copy, Point(i, j), 7, Scalar(255, 0, 255), 0, 4, 0);

	imshow("Original Image", show_img);
	imshow("convertScaleAbs", cs_abs);
	imshow("Harris Corner Detection", img_copy);

	waitKey(0);
}

Original Image

 

cornerHarris() to convertScaleAbs()

 

Harris Corner Detection (코너점을 마젠타색 원으로 표현)

 

Harris Corner Detection은 영상의 평행이동, 회전변화에는 불변이고, affine 변화, 조명 변화에도 어느정도 강인한

특성을 가지고 있지만 영상의 크기 변화에는 민감함을 보입니다.

 

 

 

 

< 참고 및 인용 자료 >

 

1) https://darkpgmr.tistory.com/131

 

영상 특징점(keypoint) 추출방법

영상 특징점이 무엇이고 어떻게 뽑는지, 그리고 대표적인 방법에는 어떤 것들이 있는지 정리해 봅니다. 1. 영상 특징점이란? 2. Harris corner [1988] 3. Shi & Tomasi [1994] 4. SIFT - DoG [2004] 5. FAST [2006..

darkpgmr.tistory.com

2) http://egloos.zum.com/eyes33/v/6097465

 

Corner 검출 #1- Harris corner detector

이미지에서 특정 물체를 인식하거나, 추적할때 물체를 특징짖을 수 있는 주요 특징점을 매칭 시키면 쉽게 인식하거나, 추적할 수 있다. Harris Corner는 1980년 Moravec 의 아이디어를 수정 보완한것이다. Moravec은 작은 윈도우를 수직, 수평, 좌대각선, 우대각선 4개 방향으로 1 픽셀씩 이동시켰을 때의 변화하는 intensity 의

egloos.zum.com

3) https://leechamin.tistory.com/293

 

[OpenCV] 05-2. Harris Corner Detection

< Harris Corner Detection > " style="clear: both; font-size: 2.2em; margin: 0px 0px 1em; color: rgb(34, 34, 34); font-family: "Roboto Condensed", Tauri, "Hiragino Sans GB", "Microsoft YaHei",..

leechamin.tistory.com

 

+ Recent posts