资源简介
使用C++实现莫拉维克算子特征点提取的算法。算法效率高。便于调用。

代码片段和文件信息
#include “stdafx.h“
#include “Moravec.h“
#include
#include
CMoravec::CMoravec()
{
kSize = 5;
threshold = 20000;
}
CMoravec::~CMoravec()
{
}
//***********moravec角点检测函数*******************
void CMoravec::Moravec(Mat srcImage Mat srcImgColor){
//角点检测的结果图
resMorMat = srcImage.clone();
//存储兴趣点位置
Interest = Mat::ones(srcImage.rows srcImage.cols CV_8U);
int r = kSize / 2;
//获取图像的高和宽
const int nRows = srcImage.rows;
const int nCols = srcImage.cols;
int nCount = 0;
//保存角点的坐标
CvPoint *pPoint = new CvPoint[nRows*nCols];
//遍历图像
for (int i = r; i < srcImage.rows - r; i++)
{
for (int j = r; j < srcImage.cols - r; j++)
{
int wV1 wV2 wV3 wV4;
wV1 = wV2 = wV3 = wV4 = 0;
//计算水平方向窗内的兴趣值
for (int k = -r; k <= r; k++)
{
for (int m = -r; m <= r; m++)
{
//判断移动的过程中是否越界,越界的话就跳过当前的循环,以免出错
int a = i + k;
int b = j + m + 1;
if (b >= srcImage.cols)
{
continue;
}
wV1 += (srcImage.at(i + k j + m + 1) - srcImage.at(i + k j + m))
*(srcImage.at(i + k j + m + 1) - srcImage.at(i + k j + m));
}
}
//计算垂直方向窗内的兴趣值
for (int k = -r; k <= r; k++)
{
for (int m = -r; m <= r; m++)
{
int a = i + k + 1;
int b = j + m;
if (a >= srcImage.rows)
{
continue;
}
wV2 += (srcImage.at(i + k + 1 j + m) - srcImage.at(i + k j + m))
*(srcImage.at(i + k + 1 j + m) - srcImage.at(i + k j + m));
}
}
//计算45°方向窗内的兴趣值
for (int k = -r; k <= r; k++)
{
for (int m = -r; m <= r; m++)
{
int a = i + k + 1;
int b = j + m + 1;
if (a >= srcImage.rows || b >= srcImage.cols)
{
continue;
}
wV3 += (srcImage.at(i + k + 1 j + m + 1) - srcImage.at(i + k j + m))
*(srcImage.at(i + k + 1 j + m + 1) - srcImage.at(i + k j + m));
}
}
//计算135°方向窗内的兴趣值
for (int k = -r; k <= r; k++)
{
for (int m = -r; m <= r; m++)
{
int a = i + k + 1;
int b = j + m - 1;
if (a >= srcImage.rows || b < 0)
{
continue;
}
wV4 += (srcImage.at(a b) - srcImage.at(i + k j + m))
*(srcImage.at(a b) - srcImage.at(i + k j + m));
}
}
int value = min(min(wV1 wV2) min(wV3 wV4));
//如果兴趣值大于阈值,那么将坐标存入数组中
if (value > threshold)
{
pPoint[nCount] = cvPoint(j i);
nCount++;
Interest.at(i j) = 0;
}
}
}
FeatureNum = nCount;
for (int i = 0; i < nCount; i++)
{
circle(resMorMat pPoint[i] 5 Scalar(255 0 0)180);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2945 2017-12-30 01:02 莫拉维克角点检测\Moravec.cpp
文件 459 2017-12-30 00:04 莫拉维克角点检测\Moravec.h
目录 0 2018-12-02 14:56 莫拉维克角点检测
----------- --------- ---------- ----- ----
3404 3
相关资源
- ORB特征点提取
- SIFT检测特征点及特征点描述
- 三维重建 特征点提取 立体匹配
- Sift特征点提取与匹配opencv库
- OPENCV人脸检测加角点检测并输出坐标
- 基于特征点匹配的视频稳像
- Moravec算子
- harris角点检测和特征匹配
- 特征点提取和影像匹配
- SURF特征点检测 程序 by浅墨
- OpenCV检测图片中的角点程序 by浅墨
- 人脸特征点检测瞳孔、眼角、鼻子、
- 人脸特征点检测,轻量级的MTCNN实现
- Harris角点检测算法实现C++
- fast角点检测c++
- OPENCV角点检测
- 基于opencv3.2的Moravec、Forstner、Harris算
- 图像Susan角点检测算法代码非常稳健的
- opencv harris角点检测
评论
共有 条评论