光場相機重聚焦--焦點堆疊深度估計法
上一篇部落格中介紹了光場相機重聚焦演算法原理介紹,對光場影象進行重聚焦可以聚焦在不同的深度處,使位於不同深度物體清晰,因此,我們可以對光場影象進行重聚焦,然後進行深度估計。
焦點堆疊深度估計法原理介紹
計算焦點堆疊每一個畫素的梯度,然後對每張影象梯度影象進行均值濾波,然後計算三個通道梯度值的平方和取均值,再開根號,即為該張影象的梯度值,焦點堆疊的同一位置畫素梯度最大則說明該深度時該畫素最清晰,也就是說該深度面上的物體最清晰,記錄該深度的索引值。
焦點堆疊
焦點堆疊就是聚焦在不用平面處的一系列影象
因此,對光場原始影象進行256次重聚焦,這一系列重聚焦影象就稱之為焦點堆疊。
梯度
梯度的概念可以自己瞭解一下
步驟:計算整副影象的梯度值,然後做均值濾波,每個通道梯度的平方去均值再開根號,為該影象的梯度值。
X方向梯度:
Y方向梯度:
該畫素點梯度:
這裡用到了Matlab的gradient函式,自己瞭解一下
梯度計算程式碼:
function img_gradient = DEFOCUS_ANALYSIS(img)//%img為double型別
grad_map = abs(gradient(IM_Refoc_alpha)) ;%梯度計算
h= fspecial('average',[5,5]) ;%定義一個均值濾波器
shear_std_map = imfilter(grad_map,h,'symmetric' ) ;%對梯度進行均值濾波
shear_std_map = ((shear_std_map(:,:,1).^2 ...%梯度圖三個通道的平方相加取平均值 然後開根號,就是其梯度值
+shear_std_map(:,:,2).^2 ...
+shear_std_map(:,:,3).^2)/3).^(1/2) ;
img_gradient = shear_std_map ;%img_gradient就是這個影象梯度值,為[m,n]大小的單通道影象
end
放一張梯度圖:
原圖如下:
比較亮的地方就說明該張圖片在整個焦點堆疊中梯度值較大,最清晰
結果展示
我們利用上一篇部落格中的256層重聚焦生成的焦點堆疊進行深度估計
部分焦點堆疊展示:
關於索引值
比如第一個畫素,在焦點堆疊中的第25張影象中梯度值最大,那麼該點的索引值即為25,我們對整幅影象m*n個畫素計算其索引值,256層重聚焦,因此索引值應該∈(0,256)
索引影象
部分索引值
然後可以根據焦距,像距和物距公式計算深度,1/U+1/V=1/F,alpha*F就是V,alpha為上一篇部落格中講到的
這種方法估計深度比較粗糙,而且在紋理重複和邊界估計不準確,需要進行優化,比如MRF優化等
參考:
1.論文Depth from Combining Defocus and Correspondence Using Light-Field Cameras-W.Tao
2.Panoramic Reconstruction from Multiple Light-Field Images-Buyukalp,Yasin