资源简介
基于相关系数的影像匹配,最终结果显示将两张图片合并显示,用线将匹配点连接在一起。并输出匹配点的行列号。
代码片段和文件信息
#include “stdafx.h“
#include “Match.h“
#include “math.h“
#include “Moravec.h“
CMatch::CMatch()
{
windowsize = 11; //设置匹配窗口的大小
Threshold = 0.8; //设置阈值
pPoint2i = NULL;
num = 0;
}
CMatch::~CMatch()
{
}
void CMatch::showresult(const Mat LeftImgColor const Mat RightImgColor Mat &ResultImg)
{
int rResult= LeftImgColor.rows > RightImgColor.rows ? LeftImgColor.rows : RightImgColor.rows;
ResultImg.create(rResult LeftImgColor.cols + RightImgColor.cols LeftImgColor.type());
for (int i = 0; i {
for (int j = 0; j {
ResultImg.at(i j) = LeftImgColor.at(i j);
}
}
for (int i = 0; i {
for (int j = 0; j {
ResultImg.at(i j + LeftImgColor.cols) = RightImgColor.at(i j);
}
}
}
double CMatch::NCCValue(int lr int lc int rr int rc)
{
double gLeftAverage = 0;//左影像窗口灰度平均值
double gRightAverage = 0;//右影像窗口灰度平均值
int halfsize = windowsize / 2;
for (int i = -halfsize; i {
for (int j = -halfsize; j {
gLeftAverage += LeftImgEpi.at(lr + i lc + j);
gRightAverage += RightImgEpi.at(rr + i rc + j);
}
}
gLeftAverage /= windowsize*windowsize;
gRightAverage /= windowsize*windowsize;
double a = 0;
double b = 0;
double c = 0;
for (int i = -halfsize; i {
for (int j = -halfsize; j {
double left_av = LeftImgEpi.at(lr + i lc + j) - gLeftAverage;
double right_av = RightImgEpi.at(rr + i rc + j) - gRightAverage;
a += left_av*right_av;
b += left_av*left_av;
c += right_av*right_av;
}
}
return a / sqrt(b*c);//返回相关系数的大小
}
void CMatch::FeatureMatchMain(Mat LeftImg Mat RightImg Mat LeftImgColor Mat RightImgColor)
{
LeftImgEpi = LeftImg;
RightImgEpi = RightImg;
Point offset = Point(0170);
int delta = 15;
Mat Result;
showresult(LeftImgColor RightImgColor Result);//将两张彩色影像和合并1个
//imshow(“拼接结果“ Result);
//cvWaitKey();
Mat Interest;//兴趣矩阵
CMoravec CM;
int FeatureNum;//特征点个数
CM.Moravec(LeftImgEpi LeftImgColor);//Moravec特征提取
Mat mFeaturePoint = CM.resMorMat.clone();
FeatureNum = CM.FeatureNum;
Interest = CM.Interest.clone();
pPoint2i = new struct MatchPoint2i[FeatureNum];//给同名点结构体数组分配内存空间
int halfsize = windowsize / 2;
int Lr = LeftImgEpi.rows;
int Lc = LeftImgEpi.cols;
int Rr = RightImgEpi.rows;
int Rc = RightImgEpi.cols;
//搜索匹配点
for (int i = halfsize; i {
for (int j = 20; j {
if (Interest.at(i j) == 0)
//特征点作为模板中心
{
double maxscore = 0;
for (int r = i + offset.x - delta; r < i + offset.x + delta; r++){
for (int c = j + offset.y - delta; c< j + offset.y + delta; c++)
{
double score = NCCValue(i j r c
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5165982 2017-12-30 00:06 基于相关系数的数字影像匹配\result.bmp
文件 4251 2017-12-30 01:02 基于相关系数的数字影像匹配\相关系数实现类\Match.cpp
文件 821 2017-12-29 23:39 基于相关系数的数字影像匹配\相关系数实现类\Match.h
目录 0 2018-12-02 15:00 基于相关系数的数字影像匹配\相关系数实现类
目录 0 2018-12-02 15:02 基于相关系数的数字影像匹配
----------- --------- ---------- ----- ----
5171054 5
- 上一篇:全球UTM格网图及UTM带号
- 下一篇:真正的破解版PDFView4NET
相关资源
- 2014年数字影视后期制作试题
- 影像匹配、特征点提取、影像相关、
- 基于Moravec算子特征提取的影像匹配
- 影像匹配-------相关系数法
- 相关系数法影像匹配
- 点特征提取、相关系数影像匹配程序
- 皮尔逊相关系数-距离相关-最大信息系
- 基于相关系数影像匹配实习报告
- 影像特征点提取和影像匹配
- 摄影测量影像匹配
- LMD分解信号-相关系数筛选分量-提取信
- 协方差与相关系数--ppt
- Morvac点提取和相关系数匹配
- 矩阵互相关系数计算与直方图
- 皮尔森相关系数 之用户推荐的协同过
- 二元空间自相关系数计算
- 经典的相关系数法求解系统的脉冲响
- 斯皮尔曼的等级相关系数
- sift、surf、sift+ransac方法影像匹配代码
- 空间计量-空间相关系数计算-stata脚本
- 论文研究-基于DCI标准的数字影院系统
- 基于光学影像匹配技术的地震形变监
- CEEMD分解-imf分量相关系数-信息熵特征
- CEEMD-相关系数-样本熵特征,用于故障
- 相关系数fortran程序
- 数字摄影测量图像匹配
评论
共有 条评论