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

密集点匹配opencv程序


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

#include "cvut/cvut.h"

#include <iostream> #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简单的滚动条程序
密集点匹配opencv程序 4页 免费 opencv人脸检测程序求详... 9页 1下载券 openCV的模板匹配程序 2页 免费 linux下第一个OpencV程序... 2页 免费 opencv建立mfc...
尺度不变的模板匹配(opencv源码)
尺度不变的模板匹配(opencv源码)_计算机软件及应用_IT/计算机_专业资料。尺度不...密集点匹配opencv程序 4页 免费 OpenCV人脸检测及附加源... 23页 1下载券 ...
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)___...
基于ransac算法的sift特征匹配研究(OpenCV+VS2010)___朱万革(最终版)_计算机软件及应用_IT/计算机_专业资料。sift特征点提取以及匹配 ransac算法的运用图像拼接测距标...
基于Opencv的几种立体匹配算法+ELAS
基于Opencv 的几种立体匹配算法 +ELAS 0:ELAS 这里...如果当前 SAD 窗口内所有邻 居像素点的 x 导数...// 注意在程序调试阶段最好 保持该值为 -1,以便...
OpenMP并行编程应用—加速OpenCV图像拼接算法
OpenMP并行编程应用—加速OpenCV图像拼接算法_计算机...在程序中添加简单的指令,就可以编写高效的并行程序,...//获得匹配特征点,并提取最优配对 FlannBasedMatcher...
图像处理和识别中常用的OpenCV函数
图像处理和图像识别中常用的 OpenCV 函数 (2010-12...密集透视变换(单应性); 163、cv...模板匹配; 184、cvCreateMemStorage:用于创建一个...
基于ransac算法的sift特征匹配研究(OpenCV VS2010)(最...
基于ransac算法的sift特征匹配研究(OpenCV VS2010)(最终版)_军事/政治_人文社科...然后,进行粗匹配。最后用 RANSAC 算法对所提取出来的 SIFT 特征点 匹配对进行...
图像处理和图像识别中常用的OpenCV函数汇总
密集透视变换(单应性); 163、cv...使用矩进行匹配; 195、cvInitLineIterator:对任意直线...opencv学习程序大集合 76页 免费 liucg的opencv学习...
一种基于OpenCV的三维重建实现方案
匹配中极线约束方法 的使用,给出了基于 OpenCV 的...特征点提取、立体匹配、深度确定和后处理等 6 大...可以得到很高的定位精度和密集的视差表面;缺点是依赖...
基于OpenCv的图像识别
基于OpenCv的图像识别_计算机软件及应用_IT/计算机_...人脸识别技术的研究方向通过匹配人脸的特征点的过程就...主要面对科学计算、 可视化和交互式程序设计的高科技...
更多相关标签: