• 大小: 3KB
    文件类型: .cpp
    金币: 2
    下载: 2 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签:

资源简介

使用opencv实现Forstner点特征提取过程: 计算某一窗口内各个像元的Robert’s梯度 计算一定窗口中灰度的协方差矩阵 计算兴趣值q与w 确定待选点 选取候选点中的极值点作为特征点(抑制局部非最大)

资源截图

代码片段和文件信息

#include   
#include 
#include 
#include
#include 

using namespace std;
using namespace cv;
int main()
{
int threshval = 170;//设定阈值为170

Mat pic_orig = cv::imread(“Image.png“ -1);
Mat pic_gray = cv::imread(“Image.png“ 0);
Mat pic_bw;
int nrows = pic_orig.rows;
int ncols = pic_orig.cols;
Mat result = Mat::zeros(nrows ncols pic_bw.type());
int dg[4] = { 0 };

cv::imshow(“原始标准图像“ pic_orig);
cv::imshow(“灰度图像“ pic_gray);
threshold(pic_gray pic_bw threshval 255 CV_THRESH_BINARY);
cv::imshow(“二值化图像“ pic_bw);

for (int i = 2; i < nrows-1;i++)
{
for (int j = 2; j < ncols-1;j++)
{
dg[0] = abs(pic_bw.at(i j) - pic_bw.at(i+1 j));
dg[1] = abs(pic_bw.at(i j) - pic_bw.at(i j+1));
dg[2] = abs(pic_bw.at(i j) - pic_bw.at(i-1 j));
dg[3] = abs(pic_bw.at(i j) - pic_bw.at(i j-1));
sort(dg dg + 4 greater());  //降序:sort(beginendgreater()).
if (dg[2]>=1)
{
result.at(i j) = 255;
}
else{
result.at(i j) = 0;
}
}
}
cv::imshow(“初选点“ result);

cv::Mat wMatrix = cv::Mat::zeros(nrows ncols CV_64FC1);
double gu2 gv2 guv;
double Tq = 0.8DetN = 0.0 trN = 0.0 q = 0.0;


for (int i = 2; i < nrows - 1; i++)
{
for (int j = 2; j < ncols - 1; j++)
{
if (result.at(i j) == 255)
{
gu2 = 0.0;
gv2 = 0.0;
guv = 0.0;
for (int a = i 

评论

共有 条评论

相关资源