立體匹配SAD演算法matlab實現

2021-09-11 02:21:51 字數 2553 閱讀 9573

sad(sum of absolute differences)是一種影象匹配演算法。用公式表示為:

sad(u,v) = sum選擇最小值。基本思想:差的絕對值之和。此演算法常用於影象塊匹配,將每個畫素對應數值之差的絕對值求和,據此評估兩個影象塊的相似度。該演算法快速、但並不精確,通常用於多級處理的初步篩選。

輸入:兩幅影象,一幅left,一幅right

對左圖,依次掃瞄,選定乙個錨點:

(1)構造乙個小視窗,類似於卷積核;

(2)用視窗覆蓋左邊的影象,選擇出視窗覆蓋區域內的所有畫素點;

(3)同樣用視窗覆蓋右邊的影象並選擇出覆蓋區域的畫素點;

(4)左邊覆蓋區域減去右邊覆蓋區域,並求出所有畫素點灰度差的絕對值之和;

(5)移動右邊影象的視窗,重複(3)-(4)的處理(這裡有個搜尋範圍,超過這個範圍跳出);

(6)找到這個範圍內sad值最小的視窗,即找到了左圖錨點的最佳匹配的畫素塊。

下面我寫一下對於這個演算法的理解:

我們要構造乙個視窗d分別用於覆蓋左邊影象和右邊影象,視窗的size大小可以自己去定義,然後用d視窗圈出了ab兩幅影象後,我們需要左右視窗內的選定的畫素做差,然後求取其絕對值,並且對絕對值求和。在視差範圍內移動視窗 ,並重複作差,求取絕對值,並求和。找到最小的匹配塊,並且標記記錄下來

w=9; %視窗半徑

depth=20; %最大偏移距離,同樣也是最大深度距離

imgn=zeros(m,n);

for i=1+w:m-w

for j=1+w+depth:n-w

tmp=;

lwin=left(i-w:i+w,j-w:j+w);

for k=0:-1:-depth

rwin=right(i-w:i+w,j-w+k:j+w+k);

diff=lwin-rwin;

tmp=[tmp sum(abs(diff(:)))];

end[junk imgn(i,j)]=min(tmp); %獲得最小位置的索引

(其實不難發現,演算法中存在大量的冗餘計算,主要體現在,你需要反覆地計算出,已經計算過的差值,絕對值,求和,所以,能不能只計算一次插值呢,能不能先求取插值,比如生成乙個插值影象(imgl-imgr),然後利用視窗d在插值影象上面滑動,計算和,然後在針對每個點進行匹配) (這份**是在網上找到的,寫**還是一件費勁的事,自己還是很菜,有些地方還沒看懂,慢慢努力吧…)

d=20; %最大視差

n=9; %視窗半徑

[h,w]=size(im1);

%計算右圖減去左圖,相減產生d個矩陣放到imgdiff中

imgdiff=zeros(h,w,d);

e=zeros(h,w);

for i=1:d

e(:,1:(w-i))=abs(im2(:,1:(w-i))- im1(:,(i+1):w));

e2=zeros(h,w);%計算視窗內的和

for y=(n+1):(h-n)

for x=(n+1):(w-n)

e2(y,x)=sum(sum(e((y-n):(y+n),(x-n):(x+n))));

endend

imgdiff(:,:,i)=e2;

end%找到最小的視差,到dispmap

dispmap=zeros(h,w);

for x=1:w

for y=1:h

[val,id]=sort(imgdiff(y,x,:));

if abs(val(1)-val(2))>10

dispmap(y,x)=id(1);

endend

end%顯示

imshow(dispmap,);

此程式提高了計算效率,程式執行時間大大減少。

原圖:

SAD立體匹配詳解

1.概念 sad sum of absolute differences 是一種影象匹配演算法。基本思想 差的絕對值之和。此演算法常用於影象塊匹配,將每個畫素對應數值之差的絕對值求和,據此評估兩個影象塊的相似度。該演算法快速 但並不精確,通常用於多級處理的初步篩選。2.步驟 1 構造乙個小視窗,類似...

SAD立體匹配演算法的PYTHON實現

這是第一次發csdn部落格,因為在機器視覺的學習中csdn幫助了我很多,那麼我也應該為csdn社群做一些貢獻,所以本文將介紹我用python實現的sad匹配演算法。sad演算法是立體匹配演算法中,隸屬於區域性區域匹配演算法中的乙個演算法,原理是從左圖中找出乙個小視窗,利用極線約束,在 右圖中同一行中...

立體匹配 立體匹配過程

立體匹配就4個步驟 匹配代價計算,代價聚合,計算視差,視差精化 匹配代價計算 一般是通過計算左右兩圖對應畫素3個通道的灰度值差來決定匹配代價的,常用的就是基於畫素點匹配代價計算,一般有ad,sd,tad什麼的,基於區域的匹配代價計算一般有sad,ssd,stad之類的。匹配代價計算會生成乙個disp...