这里要求用我们自己计算得到的视差图和给的视差图作比较来比较我们得到的视差图的好坏程度,我视差图返回的值是计算得到的视差乘以3之后的图,所以在计算时我不是两个值相差大于1,而是大于3,因为两个图像都乘3了,所以要大于3,我传入的参数是两个图像的矩阵,因为我是写了一个脚本咯跑所有测例的,在脚本里边已经把图像读出来了
<span style="font-size:18px;">function [percentnumberbadpixels] = PercentBadPixels(mydisparitymap,groundtruthdisparitymap)
mydisparitymap = double(mydisparitymap);
groundtruthdisparitymap = double(groundtruthdisparitymap);
[Rmydisparitymap, Cmydisparitymap] = size(mydisparitymap);
numbadpixels = 0;
for i = 1:Rmydisparitymap
for j = 1:Cmydisparitymap
if (abs(mydisparitymap(i,j) - groundtruthdisparitymap(i,j)) > 3)
numbadpixels = numbadpixels+1;
end
end
end
percentnumbadpixels = numbadpixels/(Rmydisparitymap*Cmydisparitymap*1.0);
percentnumbadpixels = floor(percentnumbadpixels*100);
str = strcat(num2str(percentnumbadpixels),'%');
percentnumberbadpixels = str;
end
</span>
SSD:
左视差图
右视差图
实现细节:
输入的图像是24位的图像,但是这些计算都是基于强度(intensities)来计算的,在matlab中把彩色图转为灰度图的函数rgb2gray实质上就是转为其强度灰度图像。
原理:
如图:
对于同一图像,左眼看到的图像相对于右眼看到的图像的位置是不一样的,如上图,对于相同位置在右眼看到的图像的位置在左眼看到的图像的位置的前边,所以左视差图和右视差图的搜索方法不同,对于左视差图:
由于其位置比右眼看到的位置要远,则对于在右眼图像相同的物理位置应该往该位置的前边搜索才可能找到最相近的部分,即要减去d。
同理,对于右视差图则刚好相反,要加d。
实现细节:
1)首先把图像通过intensities转为灰度图像:
2)设定搜索深度