Harris角点检测:
原理:利用矩形窗在图像上移动,若窗内包含有角点,则窗口向各个方向移动时,窗内的灰度值都会发生变化。从而达到检测图像角点的目的。 方法:
(增大α的值,将减小角点响应值R,降低角点检测的灵性,减少被检测角点的数量;减小α值,将增大角点响应值R,增加角点检测的灵敏性,增加被检测角点的数量。) 算法特点:
对亮度和对比度的变化不敏感;具有旋转不变性,但不具有尺度不变性;并不具备仿射不变性; 算法实现:
voiddetectHarrisCorners(const Mat& imgSrc, Mat& imgDst, double alpha) { Mat gray; if (imgSrc.channels() == 3) { cvtColor(imgSrc, gray, CV_BGR2GRAY); } else { gray = imgSrc.clone(); } gray.convertTo(gray, CV_64F); Mat xKernel = (Mat_
filter2D(gray, Iy, CV_64F, yKernel); Mat Ix2, Iy2, Ixy; Ix2 = Ix.mul(Ix); Iy2 = Iy.mul(Iy); Ixy = Ix.mul(Iy); Mat gaussKernel = getGaussianKernel(7, 1); filter2D(Ix2, Ix2, CV_64F, gaussKernel); filter2D(Iy2, Iy2, CV_64F, gaussKernel); filter2D(Ixy, Ixy, CV_64F, gaussKernel); Mat cornerStrength(gray.size(), gray.type()); for (int i = 0; i < gray.rows; i++) { for (int j = 0; j < gray.cols; j++) { double det_m = Ix2.at
算法结果:
Kernel_size=7;k=0.01
OpencvAPI:
K=0.001
Opencv
K=0.1
opencv
附录:
算法执行过程: