Bee最近被問到視差值如何計算,還是貼圖舉例說明比較容易。
首先找二張有視差的圖:
相減圖片:
其實有人從相減的圖片中就已經在猜視差值。
在數學計算上面,要找出最像的地方。最簡單的就是做移位再相減取絕對值。
每移動一個點,就會產生一個值。
但因單點判定有可能誤判,所以通常是連同附近的圖一併做計算,將所有的差值和記錄下來。
如果圖片夠像,其差值和就會最小。所以找出最小值是移位多少pixel,其移位值就是視差值。
以下為x=71,y=106(Matlab座標)附近取出的sad值分布圖:
x軸為位移,y軸為和。
可以知道此處以15為最低的值。故視差即為15。
這只是計算一個點,其實是整個圖每一點都要算,所以運算量很大。
以下為Matlab程式:
close all;clear all;
l_img=imread('corridorL.bmp');
r_img=imread('corridorR.bmp');
figure;imshow(l_img);
figure;imshow(r_img);
l=double(l_img);
r=double(r_img);
d=l-r;
figure;imshow(uint8(abs(d)));
[hight,weight]=size(l_img);
range=8;
search=64;
x=71;
y=106;
m=1;
if( search > weight-2*range )
search = weight-2*range;
end
while(m <= search)
n=1;
sad(m)=0;
while( n <= 2*range+1)
sad(m)=sad(m)+abs(l(x+n,y)-r(x-m+n-1,y));
n=n+1;
end
m=m+1;
end
figure;plot(sad);
大大您好,小弟剛入門所以問的問題可能會有些愚蠢,請見諒!
回覆刪除請問大大利用兩台攝相機各自模擬左右眼的生成圖像
之後相減取得圖3(相減圖片)
請問這結果轉灰階之後是否就為所謂的depth map?
[版主回覆12/22/2010 18:21:46]不是,那只是depth有變化的地方。和真正的depth map差很多。
那請問假如我已有兩張雙眼BMP圖檔
回覆刪除如果我想用C使之產生成一張depth map該如何做呢?
爬了很多文,知道要產生深度資訊最好的辦法是用兩張圖取得
但怎麼取得的辦法就是沒找著
能請大大指點一下嗎?
謝謝!
[版主回覆12/23/2010 09:28:15]單點的程式也有,圖也有,只差二件事。
單點變成二維的圖,以及找出最小值在那。這在一般程式的書都有。
如果連這點程度的修改都做不好,那這個題目對您來說也許是太難了。
請問大大
回覆刪除"單點變成二維的圖,以及找出最小值在那。"
圖片本身不就是2D了嗎?不太懂您的意思!
找出最小值的意思是要找出該圖最小的像素值嗎?
[版主回覆12/23/2010 13:23:07]我真的很不想說明原理。因為以研究生來說那是基本功課。
不過我還是找說明原理的網站給你參考。
http://inperc.com/wiki/index.php?title=Stereo_vision
首先要找到在3D中同一點,因為視角關係,在左右視窗上會各有一點對應點。
再利用三角關係回推可以得到相對距離。
現實上可以得到的只有左右視覺的影像。只能用圖形比對去找出對應的點。
這就是我的程式所做的。
謝謝大大的指教,我再研究看看!
回覆刪除[版主回覆12/25/2010 21:44:40]您要的資料,要等我畢業後,我才會公布。
沒辦法這個關係到我能不能順利畢業。要是我提早公布,可能有人會比我早一步做出來。
這在資料的取得上,我們屬於相競爭的對手。這點希望您可以見諒。