[PAMI2013] Guided Image Filtering 导向滤波器以及OpenCV-Python代码实现
論文地址:https://www.researchgate.net/profile/Xiaoou_Tang/publication/236228168_Guided_Image_Filtering/links/54e999640cf27a6de1103c64.pdf
He, K. , J. Sun , and X. Tang . “Guided Image Filtering.” IEEE Transactions on Pattern Analysis & Machine Intelligence 2013:1397-1409.
摘要:在本文中,我們提出了一種新型的顯式圖像濾波器-引導濾波器。該引導濾波器由局部線性模型推導而來,通過考慮引導圖像的內容來生成濾波輸出,引導圖像可以是輸入圖像本身,也可以是另一幅不同的圖像。引導濾波器可以像常用的雙邊濾波器一樣作為保持邊緣的平滑算子,但是在邊緣附近有更好的行為。它與消光拉普拉斯矩陣也有理論聯系,是比平滑算子更通用的概念,可以更好地利用制導圖像中的結構。此外,該導引濾波器具有快速的非近似線性時間算法,其計算復雜度與濾波核的大小無關。我們證明了引導濾波器在很多計算機視覺和計算機圖形應用中都是有效的,包括降噪,細節平滑/增強、HDR壓縮、圖像摳圖/羽化、去霧和聯合上采樣。
Guided Image Filtering
- 引導濾波定義
- 引導濾波與其他方向相比優勢所在
- 引導濾波的主要特點及應用
- 引導濾波的算法原理
- OpenCV-Python代碼實現
- 參考資料
引導濾波定義
即需要引導圖的濾波器,引導圖可以是單獨的圖像或者是輸入圖像,當引導圖為輸入圖像時,引導濾波就成為一個保持邊緣的濾波操作,可以用于圖像重建的濾波。
引導濾波與其他方向相比優勢所在
像高斯濾波等線性濾波算法所用的核函數相對于待處理的圖像是獨立無關的,也就意味著,對任意圖像都是采用相同的操作。但是,有時候我們是希望在濾波過程中可以加入引導圖像中的信息的,例如,在上色處理過程中,結果圖像的色度通道需要包含跟給定亮度通道一致的連續邊緣。
引導濾波的主要特點及應用
1、引導濾波(導向濾波)是一種圖像濾波技術,通過一張引導圖I,對初始圖像p(輸入圖像)進行濾波處理,使得最后的輸出圖像大體上與初始圖像P相似,但是紋理部分與引導圖I相似。其典型應用有兩個:保邊圖像平滑,摳圖。
2、 引導濾波(導向濾波)的目的是,保持雙邊濾波的優勢(有效保持邊緣,非迭代計算),而克服雙邊濾波的缺點(設計一種時間復雜度為 O(1) 的快速濾波器,而且在主要邊緣附近沒有梯度的變形)。
3、 引導濾波(導向濾波)不僅能實現雙邊濾波的邊緣平滑,而且在檢測到邊緣附近有很好的表現,可應用在圖像增強、HDR壓縮、圖像摳圖及圖像去霧等場景。
引導濾波的算法原理
從圖中也可以看出,導向濾波的輸入為兩個,一個是真實的輸入p,另一個是引導輸入I。輸出為q,是p和I共同作用的產物。
噪聲和邊緣的區別,噪聲一般周圍的像素梯度變化較大,并且以其為中心,向四周的梯度大體相似。而邊緣出現了梯度的階躍,并且梯度最大的方向在邊緣的法線方向,其他方向遠離法線方向逐漸變小。一般的濾波無法區分噪聲和邊緣,于是對其統一處理,因此很多情況下,濾波的同時,邊緣也被處理模糊了。
引導濾波算法也屬于可以保持邊緣的一種濾波算法。導向濾波之所以叫這個名字,大概是因為算法在進行濾波時需要一幅引導圖像,引導圖像可以是另外單獨的圖像,也可以是輸入圖像本身,當引導圖為輸入圖像本身時,引導濾波就成為一個保持邊緣的濾波操作。引導濾波可以用于降噪、細節平滑、HDR壓縮、摳圖、去霧以及聯合采樣等方面。
相關算法比較:
像高斯濾波等線性濾波算法所用的核函數相對于待處理的圖像是獨立無關的,也就意味著,對任意圖像都是采用相同的操作。但是,有時候我們是希望在濾波過程中可以加入引導圖像中的信息的,例如,在上色處理過程中[2],結果圖像的色度通道需要包含跟給定亮度通道一致的連續邊緣。
方式1:通過引導圖像獲得約束條件,轉化為非齊次方程的求解問題,此方法設計到大型稀疏方程求解,所以會比較耗時。
方式2:直接利用引導圖像得到濾波核函數。例如在之前說的雙邊濾波[3]中,在某像素點的輸出為周邊像素與該點相似度相關的權重和,只是雙邊濾波所用的引導圖像是它本身;另外,在[4]中,引導圖像則是另外一幅圖像。
當然這些方法也有缺點:一是可能引入梯度反轉偽影,二是計算量的快速優化難度。在[5]中,作者證明了雙邊濾波可以是一種解決高斯親和矩陣時的雅克比插值,這就比原始優化方法在速度上要優化不少;針對這些缺點,引導濾波算法做出了改進。
OpenCV-Python代碼實現
# -*- coding: utf-8 -*-import cv2 import numpy as npsrc_img_path = 'src_img.jpg' guided_img_path = 'guided_img.jpg'def my_guidedFilter_oneChannel(srcImg, guidedImg, rad=9, eps=0.01):srcImg = srcImg / 255.0guidedImg = guidedImg / 255.0img_shape = np.shape(srcImg)P_mean = cv2.boxFilter(srcImg, -1, (rad, rad), normalize=True)I_mean = cv2.boxFilter(guidedImg, -1, (rad, rad), normalize=True)I_square_mean = cv2.boxFilter(np.multiply(guidedImg, guidedImg), -1, (rad, rad), normalize=True)I_mul_P_mean = cv2.boxFilter(np.multiply(srcImg, guidedImg), -1, (rad, rad), normalize=True)var_I = I_square_mean - np.multiply(I_mean, I_mean)cov_I_P = I_mul_P_mean - np.multiply(I_mean, P_mean)a = cov_I_P / (var_I + eps)b = P_mean - np.multiply(a, I_mean)a_mean = cv2.boxFilter(a, -1, (rad, rad), normalize=True)b_mean = cv2.boxFilter(b, -1, (rad, rad), normalize=True)dstImg = np.multiply(a_mean, guidedImg) + b_meanreturn dstImg * 255.0def my_guidedFilter_threeChannel(srcImg, guidedImg, rad=9, eps=0.01):img_shape = np.shape(srcImg)dstImg = np.zeros(img_shape, dtype=float)for ind in range(0, img_shape[2]):dstImg[:, :, ind] = my_guidedFilter_oneChannel(srcImg[:, :, ind],guidedImg[:, :, ind], rad, eps)dstImg = dstImg.astype(np.uint8)return dstImgdef main():src_img = cv2.imread(src_img_path)guided_img = cv2.imread(guided_img_path)print(np.shape(src_img))print(np.shape(guided_img))dstimg = my_guidedFilter_threeChannel(src_img, guided_img, 9, 0.01)print(np.shape(dstimg))cv2.imwrite('output.jpg', dstimg)cv2.imshow('output', dstimg)cv2.waitKey(0)if __name__ == '__main__':main()import matplotlib.pyplot as pltsrc_img = plt.imread(src_img_path)guided_img = plt.imread(guided_img_path)output_img = plt.imread('output.jpg')plt.subplot(131)plt.imshow(src_img)plt.axis('off')plt.title('src')plt.subplot(132)plt.imshow(guided_img)plt.axis('off')plt.title('guided')plt.subplot(133)plt.imshow(output_img)plt.axis('off')plt.title('output')plt.show()參考資料
總結
以上是生活随笔為你收集整理的[PAMI2013] Guided Image Filtering 导向滤波器以及OpenCV-Python代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyTorch项目使用Tensorboa
- 下一篇: ElasticSearch权威指南学习(