#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; }
时间: 2024-04-01 12:32:44 浏览: 55
StdAfx.rar_ stdafx.h_stdafx_stdafx.h_stdafx.h 头文件
5星 · 资源好评率100%
这是 mySAD 类的成员函数 computeSAD 的实现代码。该函数接受两个输入图像 L 和 R,计算它们的 SAD 匹配,并返回一个位于 [0,255] 范围内的灰度图像 Disparity。在该函数中,首先对 Disparity 进行初始化,然后遍历 L 中的每个像素点,对于每个像素点,在 R 中搜索其可能的匹配位置,计算 SAD 值,并找到最小的 SAD 值对应的位移,将其赋值给 Disparity 中对应的像素点。这里使用了一个窗口大小为 3x3 的模板进行计算,共计算了搜索半径 dsr 个位移。最后返回计算得到的 Disparity。
阅读全文