当前位置:首页 >> 信息与通信 >>

密集点匹配opencv程序


//由于 cvut 版本进行了更新,致使该工程不能在最新 cvut 版本下编译,请使用工程包含的 cvut 库进行 编译 #include "cv.h" #include "highgui.h"

#include "cvut/cvut.h"

#include <iostr

eam> #include <fstream> #include <string> #include <vector>

using namespace std; using namespace cvut;

#pragma comment(lib,"cxcore") #pragma comment(lib,"cv") #pragma comment(lib,"highgui")

//#define REAL_TIME_MATCHING_SHOW

int main(int argc,char** argv) { Image<uchar> temp("image/Luxor02StereoSm2.jpg");

Image<uchar> left(temp.size().width/2,temp.size().height,8,3); Image<uchar> right(temp.size().width/2,temp.size().height,8,3);

//分割图像 int i,j,t,k; for (i=0;i<temp.height;++i) { j=0; for (;j<temp.width/2;j++) { for (t=0;t<temp.channels;++t) { left(i,j,t) = temp(i,j,t); } } j++; for (k=j+1,j=0;k<temp.width;++k,++j) { for (t=0;t<temp.channels;++t) { right(i,j,t) = temp(i,k,t); } } }

left.show("left"); right.show("right",400,0); cvWaitKey(); left.close(); right.close();

/************************************************************************ 特征匹配 *************************************************************************/ cout<<"特征匹配……"; int depth_count = 0; vector<vector<int> > depth(left.width*left.height,vector<int>(3)); vector<int> depth_buf(3); // 匹 配 窗 口 大 小

//////////////////////////////////////////////////////////////////////// int win_size = 9;

Matrix<double> left_wins(left.width-win_size/2-win_size/2,win_size*win_size*3,1); Matrix<double> right_wins(left.width-win_size/2-win_size/2,win_size*win_size*3,1);

//设定最大可能视差/////////////////////////////////////////////////////////// int depth_max = 10; int depth_min = left.height; bool is_match = false;

int l,m,n; for (i=win_size/2;i<left.height-win_size/2;i++) { cout<<i<<" "; /* 建立第 i 行所有的源向量和目的向量 */ for (int k=win_size/2;k<left.width-win_size/2;k++) { int p=0,q=0; for (l=i-win_size/2;l<=i+win_size/2;l++) { for (m=k-win_size/2;m<=k+win_size/2;m++) { for (n=0;n<3;n++) { left_wins(k-win_size/2,p++,0) = left(l,m,n); } } for (m=k-win_size/2;m<=k+win_size/2;m++) { for (n=0;n<3;n++) { right_wins(k-win_size/2,q++,0) = right(l,m,n); }

} } } //遍历极线进行匹配 for (j=win_size/2;j<left.width-win_size/2;j++) { depth_buf[0] = i; depth_buf[1] = j; /* 初始最大误差 */ double cos_val = 0.9; int index=0; is_match = false; for (int k=j;k<min(left.width-win_size/2,j+depth_max);k++) { /* 计算向量误差 */ double cos_temp = 0,val1 = 0,val2 = 0,val3 = 0; for (int u=0;u<left_wins.cols;++u) { val1 left_wins(j-win_size/2,u,0)*right_wins(k-win_size/2,u,0); val2 left_wins(j-win_size/2,u,0)*left_wins(k-win_size/2,u,0); val3 right_wins(k-win_size/2,u,0)*right_wins(k-win_size/2,u,0); } cos_temp = val1/sqrt(val2)/sqrt(val3); /* 判断是否匹配 */ if (cos_temp > cos_val){ depth_buf[2] = k-depth_buf[1]; cos_val = cos_temp; index = k; is_match = true; } } if (is_match) { depth_min = depth_buf[2]<depth_min?depth_buf[2]:depth_min; depth[depth_count] = depth_buf; depth_count++; is_match = false; /* 实时匹配显示 */ #ifdef REAL_TIME_MATCHING_SHOW cvCircle(left.cvimage,cvPoint(j,i),1,CV_RGB(255,255,255)); cvCircle(right.cvimage,cvPoint(index,i),1,CV_RGB(255,255,255)); left.show("left",0,0); right.show("right",400,0); cvWaitKey(); += += +=

left.close(); right.close(); #endif } } } cout<<"完成"<<endl; /************************************************************************ 显示深度图像 *************************************************************************/ cout<<"最小视差:"<<depth_min<<endl <<"最大视差:"<<depth_max<<endl;

Image<uchar> depth_image(left.size(),8,1); for (i=0;i<depth.size();i++) { depth_image(depth[i][0],depth[i][1]) (uchar)(255*(double)(depth[i][2]-depth_min)/(double)(depth_max-depth_min)); } =

depth_image.show("depth"); cvWaitKey(); depth_image.close();

return 0; }


相关文章:
基于Opencv的几种立体匹配算法+ELAS
基于Opencv 的几种立体匹配算法 +ELAS 0:ELAS 这里...如果当前 SAD 窗口内所有邻 居像素点的 x 导数...// 注意在程序调试阶段最好 保持该值为 -1,以便...
图像匹配算法在OPENCV中的研究与实现
图像匹配算法在OPENCV中的研究与实现_计算机软件及应用_IT/计算机_专业资料。一...二、学习的知识点 1、 sift 算法(surf 算法基本与 sift 算法相同) sift 算法...
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)___...
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)___朱万革(最终版)_计算机软件及应用_IT/计算机_专业资料。sift特征点提取以及匹配 ransac算法的运用图像拼接测距标...
尺度不变的模板匹配(opencv源码)
尺度不变的模板匹配(opencv源码)_计算机软件及应用_IT/计算机_专业资料。尺度不...密集点匹配opencv程序 4页 免费 OpenCV人脸检测及附加源... 23页 1下载券 ...
基于块匹配的人群运动估计_图文
方法是块匹配,工具有 OpenCV 和 vc6,程序用 C ...运动估计算法的整体效率主要体现在初始搜索点的选择、...对于密集型号数组 (CvMat, CvMatND or IplImage) ...
Opencv 模板匹配
Opencv 模板匹配_计算机软件及应用_IT/计算机_专业资料。OPencv2.0模板匹配说明文档...密集点匹配opencv程序 4页 免费 openCV的模板匹配程序 2页 免费 OpenCV 110页 ...
基于opencV的动态背景下运动目标检测及跟踪(修改版)
两个函数来实现效果,在用 openCV 结合上面的算法最后处理出的结果如下图: 结论由此可以看出在 openCV 环境下用特征点匹配的算法可以对动态背景下的运动目标进行 ...
OpenCV2学习笔记
Opencv_highgui 模块:包含读写图像及视频的函数,以及操作图形用户界面函数。 Opencv_features2d 模块:包含兴趣点检测子,描述子以及兴趣点匹配框架。 Opencv_calib3d...
叶杰-3110403158-电信112-特征点检测与匹配
OpenCV 分别对两幅图像进行特征点提取,然后使用特征点匹配方法对特征点进行匹配。...2. 项目要求: (1) 完成程序代码。 (2) 使用自己拍摄的照片(3 组,每组照片...
Opencv2图像算法库分析
Opencv2图像算法库分析_计算机软件及应用_IT/计算机_...旨在特定的应该程序中,选择性地提取图像中被认为传达...特征点匹配效果图 5.视频序列处理 基于视频序列的...
更多相关标签:
opencv 密集匹配 点云 | opencv 密集匹配 | opencv 图像密集匹配 | 密集匹配 | 影像密集匹配 | 什么是密集匹配 | 倾斜影像密集匹配 | 密集匹配算法 |