JBU联合双边上采样
很多圖像處理算法,如立體視覺中的深度估計,圖像上色,高動態范圍HDR中的tone mapping,圖像分割,都有一個共性的問題:尋找一個全局的解,這個解是指一個分段的piecewise平滑含糊,描述了感興趣的值(可以是深度,色度,曝光值,標簽等)。
另一方面,數字圖像越來越大,從one quarter million到multi-Megapixel到Gigapixel,隨著圖像尺寸的變大,圖像處理的耗時和占用空間也線性增長。一個處理方法就是對原始圖像先進行下采樣的預處理再進行圖像處理,但這也帶來一個問題,就是將處理之后的圖像再恢復到原始的分辨率,這就是圖像的超分辨率重建。很顯然,我們可以利用原始的大尺寸圖像。將原始的圖像與雙邊濾波結合起來,就是本文新提出的算法JBU。
雙邊濾波bilateral filter是一個保邊濾波edge-preserving filter,最早在1998年提出,為了解決傳統的插值的圖像上采樣方法會造成邊緣模糊。為了保留邊緣,BF在不同位置的核參數應該是不一樣的,所以BF屬于非線性的濾波器,也是各向異性的濾波器。具體而言,濾波器會根據不同的空間位置和灰度變化范圍進行調整,這也是“雙邊”的含義,一邊是空域spatial filter(與中心點的距離遠近),一邊是與中心點的灰度差值大小range filter。從表達式上看,最終的濾波器系數的兩個核的乘積。兩個子核都可以是高斯函數,當灰度變化很大或者距離很遠,那么濾波器系數就會很小,所以邊緣就得以保留。
有人利用BF做HDR中的色調映射tone mapping,有人用來去馬賽克,
那么如何將BF和大尺寸的guidance圖像結合在一起呢?是使用灰度差異的子核還是使用空間距離的子核呢?為了利用更準確的邊緣信息,是按照像素在大尺寸圖像中對應的灰度值來計算濾波系數,因為邊緣往往是灰度值跳變造成的,所以使用大圖位置的灰度值更準確。和OpenCV做圖像變換一樣,這種像素坐標的映射關系也是從目標圖像(這里是大圖)到低分辨圖像。
作為引導圖的高分辨圖像是離散采樣的,所以超分重建的效果與上采樣的比例無關。
4 應用
色調映射tone mapping是為了在普通設備中顯示HDR圖像。需要解很大的線性方程組,雖然可以通過multi-resolution solvers高效地解出,但是當數據很大時還是會占用相當大的內存。那么,JBF具體是怎么應用在HDR中的呢?首先,I是低分辨率的圖像,T是某種tone mapping算子,那么T(I)就是這個算子生成的tone mapped圖像。對應的低分辨率的解被定義為映射前后的像素級的比,也就是說,這個圖其實是曝光圖exposure map,表示應用在每個像素上的曝光校正系數。我們就是在這個圖上使用JBF,因為這個圖雖然大部分是平滑的,但是在具有顯著邊緣特性的區域會出現不連續。注意曝光圖可能是單通道的(即只對亮度進行調節),也可能是多通道的(即支持多種色調的調節)。
在Levin的圖像上色和圖像重新著色的方法中也有類似的線性方程組,面對尺寸很大的圖像同樣有計算量大的問題。Yatziv的方法雖然不需要解線性方程組,但依然要迭代地遍歷數據。在這里JBU的應用對象就是著色之后的低分辨率圖像,但是在上采樣之前,需要先將它轉換至YIQ顏色空間(或者其他任意的將亮度與色度解耦的顏色空間),然后在每個色度通道上應用JBU。從圖3中可以看到,JBU避免了在邊緣區域的色度泄漏。
立體視覺深度估計。深度估計的關鍵是得到兩幅圖像中對應點的視差disparities。然而,估計出的深度圖在邊緣處是不連續的discontinuties。將高分辨率圖像作為引導,就可以對低分辨率的深度圖像進行上采樣。
基于圖分割Graph-cut的圖像處理。近來出現的一些用戶交互性的圖像編輯技術涉及到了在圖中尋找最小分割。比如交互性的蒙太奇照片系統,使用最小圖分割技術來計算圖像融合時的最小化接縫。優化的結果是一個標簽圖label map,label表明的是融合圖是每個像素來自于哪個照片。約束條件是用戶指定的幾個圖像,拼接算法做的是計算出label map,指定了剩余的沒有被約束的像素來自于哪個圖像,這樣生成的圖像其拼接感是最小的。這個標簽圖和之前的幾個應用的區別在于標簽是離散的,做法是這樣的,為了得到每個像素的標簽,對每個低分辨率的像素會有一個帶非零權重的投票,獲勝的標簽會有累積最高的權重。
5 表現和準確性
JBU的復雜度是O(Nr2),N是輸出圖像的尺寸,r是濾波器的尺寸。表現與輸出尺寸有關,但是與上采樣因子無關,因為濾波器始終應用在低分辨率圖像上。所有的結果都使用5x5的高斯濾波,速度快,同時可以將足夠距離的像素值考慮進去。
function result = JointBilateralUpsample(color,depth,factor,sigma_w,sigma_c,w) if( size(color,3) ~= 3 ),error( 'color data must be of 3 channel' ); enddepth = double(depth); color = double(color); highHeight = size( color, 1 ); highWidth = size( color, 2 ); lowHeight = size(depth,1); lowWidth = size(depth,2); result = zeros(highHeight,highWidth); for i = 1:highHeightfor j = 1:highWidthid = i/factor;jd = j/factor;iMin = ceil(max(id-w,1));iMax = floor(min(id+w,lowHeight));jMin = ceil(max(jd-w,1));jMax = floor(min(jd+w,lowWidth));depth_sec = depth(iMin:iMax,jMin:jMax);color_sec = color(iMin * factor:factor:iMax * factor,jMin * factor:factor:jMax * factor,:);% Compute Gaussian range weights.dR = color_sec(:,:,1)-color(i,j,1);dG = color_sec(:,:,2)-color(i,j,2);dB = color_sec(:,:,3)-color(i,j,3);range = exp( -(dR.^2 + dG.^2 + dB.^2) / (2*sigma_c^2));% Calculate bilateral filter response.iw = (iMin:iMax) - id;jw = (jMin:jMax) - jd;[mx,my] = meshgrid(jw,iw);spatial = exp( -(mx.^2 + my.^2) / (2*sigma_w^2) );depth_weight = (depth_sec>0) .* range .* spatial;depth_sum = depth_sec .* depth_weight;result(i,j) = sum(depth_sum(:)) / sum(depth_weight(:));endendend對于彩色三通道圖像,可以分別在RGB中進行上采樣,但是可能造成顏色泄漏,通常的做法是先進行顏色空間轉換。原文使用使用的是YIQ,但其實只要是亮度分離的顏色空間都可以。YIQ是電視系統中使用的顏色空間,對應美國和日本的NTSC制式,在matlab中rgb到YIQ的轉換函數是rgb2ntsc.首先YUV和YIQ三通道都是獨立的,所以使得黑白電視機也可以接收彩色電視信號。另外,黑白圖像主要提供細節,所以顏色通道的帶寬可以適當壓縮。
Reference:
1.http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html
2.https://zhuanlan.zhihu.com/p/21983679?
3.https://www.jianshu.com/p/ce4afe599d6a
4.https://blog.csdn.net/CHNguoshiwushuang/article/details/82469162?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
5.https://www.cnblogs.com/magic-428/p/9172406.html
6.ntsc2rgbhttps://www.mathworks.com/help/images/ref/ntsc2rgb.html
?
總結
以上是生活随笔為你收集整理的JBU联合双边上采样的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorflow实现回归
- 下一篇: 图像处理中的通信原理——冈萨雷斯读书笔记