哈里斯边角侦测
哈里斯边角侦测(Harris Corner Detector)是被广泛运用在电脑死机的演算法,主要是用于从影像中找出代表边角的特征点。
概要介绍
角落的概念是它相邻的区域有两条截然不同方向的边,换句话说,角落也是两条边的连接点,而这条边的附近有剧烈的亮度变化。
为了找出影响中的边角,科学家们提出了不同种的边角测试器包含Kanade-Lucas-Tomasi(KLT)算子,哈里斯算子是其中最简单,有效,及可信赖的方法。这两种受欢迎的方法均是以局部结构矩阵来当作基础,想较于Kanade-Lucas-Tomasi(KLT)边角侦测,就算是影响经过旋转或者是亮度的调整,哈里斯边角侦测具有良好的结果重现性。
函数
dst=cv.cornerHarris(src, blockSize, ksize, k[, dst[, borderType]])
参数
- src:输入图像(应该是灰度和float32类型)
- dst:存储Harris探测器响应的图像,类型为CV_32FC1,图像大小与src相同
- blockSize:领域大小
- ksize:Sobel算子的孔径参数
- k:哈里斯探测器自由参数
- borderType:像素外推法
1 | import cv2 |
输入图片:
结果图(需要方大才看得清楚):
有时可能需要以最高精度找到角落。opencv附带了一个函数cv2.cornerSubPix(),它进一步以亚精度检测到的角点。该函数迭代以找到角点或径向鞍点的亚像素精度位置
1 | corners = cv.cornerSubPix( image, corners, winSize, zeroZone, criteria ) |
- image :输入单通道,8位或浮动图像
- corners:输入角的初始坐标和为输出提供的精细坐标
- winSize:搜索窗口边长的一半。例如,如果winSize=Size(5,5),$(52+1)(5*2+1)=11×11$的搜索窗搜索
- zeroZone:Half of the size of the dead region in the middle of the search zone over which the summation in the formula below is not done.It is used sometimes to avoid possible singularities of the autocorrelation matrix.The value of (-1,-1) indicates that there is no such a size
- criteria:终止角点细化迭代过程的标准。也就是说,角点位置细化的过程在criteria.maxCount迭代之后或在某个迭代是角位置移动小于criteria.epsilon时停止。
1 | retval, labels, stats, centroids = cv.connectedComponentsWithStats( image[, labels[, stats[, centroids[, connectivity[, ltype]]]]] ) |
- image:标记的8位单通道图像
- labels:目标标记图像
- stats:每个标签的统计输出,包括背景标签。
- centroids:每个标签的质心,包括背景标签
- ltype:输出图像的类型。一般为CV_32S、CV_16U类型
1 | import cv2 |
参考网址:
https://docs.opencv.org/3.4.3/dd/d1a/group__imgproc__feature.html#ga354e0d7c86d0d9da75de9b9701a9a87e