哈里斯角点检测

克里斯·哈里斯(Chris Harris)和迈克·史蒂芬斯(Mike Stephens)在1988年的论文《组合式拐角和边缘检测器》(《A Combined Corner and Edge Detector》)中做了一次找到这些拐角的尝试,所以现在将其称为哈里斯拐角检测器。这篇论文把这个简单的想法变成了数学形式。它基本上找到了在所有方向上位移的强度差异。

官方api解释直达

1
cornerHarris(src, dst, blockSize, ksize, k)
  1. src:必须是单通道灰度图
  2. dst:返回类型是CV_32FC1,大小与 src 相同。
  3. blockSize:角点检测考虑的领域大小,int类型
  4. kszie:Sobel算子的大小,int类型
  5. k:自由度参数,值越小检测出的结果越多。double类型
1
2
3
4
5
6
7
8
9
10
11
12
13
Mat gray, points;
cvtColor(src, gray, COLOR_BGR2GRAY);
cornerHarris(gray, points, 2, 3, 0.04);
double points_max;
src.copyTo(dst);
minMaxLoc(points, nullptr, &points_max);
for (int i = 0; i < dst.size().height; i++) {
for (int j = 0; j < dst.size().width; j++) {
if (points.at<float>(i, j) > 0.01 * points_max) {
dst.at<Vec3b>(i, j) = {0, 0, 255};
}
}
}

harris

史-托马斯角点检测

J. Shi 和 C. Tomasi 在其论文 《Good Features to Track》 中对其进行了小的修改,与Harris Corner Detector相比,该方法表现出出更好的结果。

官方api解释直达

1
goodFeaturesToTrack(src, corners, maxCorners, qualityLevel, minDistance)
  1. src:8位单通道或者32位浮点单通道图像
  2. corners:检测到的角的点集,类型为vector<Point>
  3. maxCorners:最大角数
  4. qualityLevel:最低接收的质量百分比
  5. minDistance:点之间的最小距离
1
2
3
4
5
6
7
8
Mat gray;
vector<Point> points;
src.copyTo(dst);
cvtColor(src, gray, COLOR_BGR2GRAY);
goodFeaturesToTrack(gray, points, 25, 0.01, 10);
for (int i = 0; i < points.size(); i++) {
circle(dst, points[i], 3, {0, 0, 255}, -1);
}

shiTomasi

完整代码:https://github.com/AskeyNil/BlogCode/blob/master/OpenCV/cc/CornerDetector.cc

评论