双目立体匹配算法--SAD(C++\FPGA)
来源:互联网 发布:java助理工程师要求 编辑:程序博客网 时间:2024/06/04 19:40
SAD(Sum of absolute differences)是一种图像局部匹配算法。
1、本文结构
首先介绍SAD算法的基本原理与流程,之后使用C++和Verilog实现算法。
2、算法流程
输入:左摄像机图片,右摄像机图片,最大视差等级
(1)确定模板大小(一般是3*3,5*5);
(2)用这个模板提取左图像的一块区域中的像素值;
(3)用这个模板提取右图相对应位置的一块区域中的像素值;
(4)用左图像中提取的数据分别减去右图像中提取的数据,结果取绝对值;
(5)在搜索范围内移动右图像的模板,重复(4)
(6)找到这个范围内SAD最小值对应的位置,即找到了左边图像在右图像中的最佳匹配像素块。
#pragma once#include <iostream>#include <iomanip>#include <opencv2\opencv.hpp>using namespace std;using namespace cv;class mySAD{public :mySAD() :wsize(3), dsr(30) {}mySAD(unsigned int _size, int _dsr) :wsize(_size), dsr(_dsr) {}Mat computeSAD(Mat &L,Mat &R);private:int wsize;int dsr;};
#include "stdafx.h"#include "mysad.h"Mat mySAD::computeSAD(Mat &L, Mat &R){Mat Disparity(L.rows,L.cols,CV_8U,Scalar::all(0));float temp=0;float temp_min = 0;for (int nrow = 1; nrow < L.rows-1; nrow++){for (int ncol = 1; ncol < L.cols-1; ncol++){temp_min = 100000;for (int d = 0; (d < this->dsr && ncol+d+1<L.cols-1); d++){temp = abs( L.at<unsigned char>(nrow - 1, ncol - 1) - R.at<unsigned char>(nrow - 1, ncol + d - 1)+ L.at<unsigned char>(nrow - 1, ncol ) - R.at<unsigned char>(nrow - 1, ncol + d )+ L.at<unsigned char>(nrow - 1, ncol + 1) - R.at<unsigned char>(nrow - 1, ncol + d + 1)+ L.at<unsigned char>(nrow , ncol - 1) - R.at<unsigned char>(nrow , ncol + d - 1)+ L.at<unsigned char>(nrow , ncol ) - R.at<unsigned char>(nrow , ncol + d )+ L.at<unsigned char>(nrow , ncol + 1) - R.at<unsigned char>(nrow , ncol + d + 1)+ L.at<unsigned char>(nrow + 1, ncol - 1) - R.at<unsigned char>(nrow + 1, ncol + d - 1)+ L.at<unsigned char>(nrow + 1, ncol ) - R.at<unsigned char>(nrow + 1, ncol + d )+ L.at<unsigned char>(nrow + 1, ncol + 1) - R.at<unsigned char>(nrow + 1, ncol + d + 1));if (temp < temp_min){temp_min = temp;Disparity.at<unsigned char>(nrow,ncol) = d*16;}}}float rate = (float)(nrow / L.rows);}return Disparity;}
// SAD.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <opencv2/opencv.hpp>#include "mysad.h"using namespace std;using namespace cv;int main(){Mat imgl_gray = imread("C:\\Users\\WangDongwei\\Documents\\Visual Studio 2015\\Projects\\SAD\\pic\\im6.png", CV_LOAD_IMAGE_GRAYSCALE);Mat imgr_gray = imread("C:\\Users\\WangDongwei\\Documents\\Visual Studio 2015\\Projects\\SAD\\pic\\im2.png", CV_LOAD_IMAGE_GRAYSCALE);Mat d;mySAD my_sad;d = my_sad.computeSAD(imgl_gray,imgr_gray); return 0;}
fpga的实现将在之后补上
阅读全文
0 0
- 双目立体匹配算法--SAD(C++\FPGA)
- 双目立体匹配 SAD
- 双目立体视觉SAD匹配算法
- 双目立体视觉(一):SAD算法
- 双目立体视觉匹配算法-----SAD匹配算法、BM算法、SGBM算法、GC算法
- 双目立体视觉匹配算法-----SAD匹配算法、BM算法、SGBM算法、GC算法
- 双目立体视觉匹配算法-----SAD匹配算法、BM算法、SGBM算法、GC算法
- 立体匹配中的NCC,SAD,SSD算法
- 立体匹配中的NCC,SAD,SSD算法
- 立体匹配中的NCC,SAD,SSD算法
- 立体匹配中的NCC,SAD,SSD算法
- SAD立体匹配算法在opencv中的实现
- SAD立体匹配算法在opencv中的实现
- 双目测距(三)--立体匹配
- 双目立体匹配 Census
- 立体视觉--stereo correspondence(双目立体匹配)
- 立体视觉–stereo correspondence(双目立体匹配)
- 立体视觉–stereo correspondence(双目立体匹配)
- Warring the /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql' user
- 算法系列-topk问题
- 【Python】Python3 List copy()方法
- 【机器学习-西瓜书】六、支持向量机(SVM):最大间隔;对偶问题;KKT条件
- CentOS 7 VM下修改网卡名为eth0并启动问题解决
- 双目立体匹配算法--SAD(C++\FPGA)
- ffmpeg视频压缩的一些参考信息
- html5图片展示
- Runnable和Callable的区别:
- 《C++ Primer》第五版课后习题解答_第三章(5)(37-45)
- global.js
- 彻底删除的文件还能找回来吗?
- PL/SQL
- 测试