日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(学习笔记)图像处理——同态滤波

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (学习笔记)图像处理——同态滤波 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 前言
    • 原理
    • 改進
    • 實現

前言

一種將頻率濾波和空域灰度變換結合起來的圖像處理方法,根據圖像的照度或反射率模型作為頻域處理的基礎,利用壓縮亮度范圍和增強對比度來改善圖像的質量。對增強陰影部分有較好的優勢,能消除乘性噪聲,能同時壓縮圖像的整體動態范圍,并增加圖像中相鄰區域間的對比度,在信號與圖像處理中應用廣泛。

原理

輸入圖像由照度分量和反射分量兩部分組成,即:
f(x,y)=i(x,y)r(x,y)f(x,y)=i(x,y)r(x,y)f(x,y)=i(x,y)r(x,y)
其中,0<i(x,y)<∞0<i(x,y)<\infty0<i(x,y)<為照度分量,描述照明,變化緩慢,處于低頻部分;0<r(x,y)<10<r(x,y)<10<r(x,y)<1為反射分量,描述景物細節,變化較快,處于高頻部分。
濾波步驟如下:

第一步:對原圖做對數變換,將乘性信號轉變為加性信號,即:
ln?f(x,y)=ln?i(x,y)+ln?r(x,y)\ln{f(x,y)}=\ln{i(x,y)}+\ln{r(x,y)}lnf(x,y)=lni(x,y)+lnr(x,y)
但是為了避免出現ln?0\ln{0}ln0,所以一般采用ln?(f(x)+1)\ln{(f(x)+1)}ln(f(x)+1)進行計算。
第二步:做傅里葉變換,得到其對應的頻域表示為:
F[ln?f(x,y)]=F[ln?i(x,y)]+F[ln?r(x,y)]F[\ln{f(x,y)}]=F[\ln{i(x,y)}]+F[\ln{r(x,y)}]F[lnf(x,y)]=F[lni(x,y)]+F[lnr(x,y)]
照度分量F[ln?i(x,y)]F[\ln{i(x,y)}]F[lni(x,y)]頻譜特性集中在低頻段;反射分量F[ln?r(x,y)]F[\ln{r(x,y)}]F[lnr(x,y)]頻譜特性集中在高頻段。
第三步:設計一個頻域濾波器H(u,v),進行對數圖像的頻域濾波:
S(x,y)=H(x,y)F[ln?f(x,y)]=H(x,y)F[ln?i(x,y)]+H(x,y)F[ln?r(x,y)]S(x,y)=H(x,y)F[\ln{f(x,y)}]=H(x,y)F[\ln{i(x,y)}]+H(x,y)F[\ln{r(x,y)}]S(x,y)=H(x,y)F[lnf(x,y)]=H(x,y)F[lni(x,y)]+H(x,y)F[lnr(x,y)]
H(x,y)H(x,y)H(x,y)通常采用如下形式:
Hmo(u,v)=(γH?γL)Hhp(u,v)+γLH_{mo}(u,v)=(\gamma_{H}-\gamma_{L})H_{hp}(u,v)+\gamma_{L}Hmo?(u,v)=(γH??γL?)Hhp?(u,v)+γL?
其中,γL<1,γH>1\gamma_{L}<1,\gamma_{H}>1γL?<1,γH?>1,用來控制濾波器的幅度范圍;HhpH_{hp}Hhp?為高通濾波器,常用的有高斯高通濾波器、Butterworth高通濾波器、Laplacian濾波器等。如果采用高斯高通濾波器,則有:
Hhp(u,v)=1?e?c(D2(u,v)D02)H_{hp}(u,v)=1-e^{-c(\frac{D^{2}(u,v)}{D_{0}^{2}})}Hhp?(u,v)=1?e?c(D02?D2(u,v)?)
其中,c為一個常數,控制高頻與低頻過渡段的曲線陡度,值越大表示越陡;D0D_{0}D0?表示截止頻率,其值越大對細節的增強越明顯;D(u,v)D(u,v)D(u,v)表示和頻率中心的距離。如圖:

注:圖片來源百度搜索
第三步:進行傅里葉反變換,返回空域對數圖像:
s(x,y)=F?1[S(x,y)]=F?1[H(x,y)F[ln?i(x,y)]]+F?1[H(x,y)F[ln?r(x,y)]]s(x,y)=F^{-1}[S(x,y)]=F^{-1}[H(x,y)F[\ln{i(x,y)}]]+F^{-1}[H(x,y)F[\ln{r(x,y)}]]s(x,y)=F?1[S(x,y)]=F?1[H(x,y)F[lni(x,y)]]+F?1[H(x,y)F[lnr(x,y)]]
第四步:取指數,將對數的信號轉換為原始形式信號,的到空域濾波結果:
g(x,y)=es(x,y)g(x,y)=e^{s(x,y)}g(x,y)=es(x,y)
需要注意的是,在第一步操作中使用ln?(f(x,y)+1)\ln{(f(x,y)+1)}ln(f(x,y)+1),則此處需要使用es(x,y)?1e^{s(x,y)}-1es(x,y)?1

改進

利用小波變換
傳統的同態濾波與傅里葉變換作為變換工具,這種方法從圖像的整體角度對光照不均勻進行修正,雖然可以很好地保持圖像的原始面貌,但它沒有充分考慮圖像的空域局部特征,在增強一部分像素時導致另一部分增強。然而將小波變換作為域變換工具,在時域和頻域上都具有局部性。

注:一般三層小波分解便能有較好的效果。
基于空域的同態濾波
上述兩種均為頻域的同態濾波方法,在轉換為空域時需要花費時間,因此基于空域的同態濾波方法被人們提出。具體方法是:
第一步:進行對數變換;
第二步:對圖像使用低通濾波器;
第三步:使用某一模型利用低通濾波器得到的數據來估計照明分量;
第四步:對照明分量和反射分量進行處理。
需要注意的是,該方法目前沒有一種很好的方法能夠對照度分量和反射分量進行估計,對特定的圖像需要選取適當的濾波器并調節濾波器的系數以達到最好效果。

實現

import cv2 import numpy as np from skimage.metrics import peak_signal_noise_ratio from skimage.metrics import structural_similarity import csvdef homomorphic_filter(src, d0=10, rl=0.5, rh=2.0, c=4, h=2.0, l=0.5):gray = src.copy()if len(src.shape) > 2:gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # 轉換成灰度(RGB)圖像gray = np.log(1e-5 + gray) # 取對數rows, cols = gray.shape #設置數據維度gray_fft = np.fft.fft2(gray) # FFT傅里葉變換gray_fftshift = np.fft.fftshift(gray_fft) # FFT中心化M, N = np.meshgrid(np.arange(-cols // 2, cols // 2), np.arange(-rows // 2, rows // 2))D = np.sqrt(M ** 2 + N ** 2) # 計算距離Z = (rh - rl) * (1 - np.exp(-c * (D ** 2 / d0 ** 2))) + rl # H(u,v)傳輸函數,使用高斯濾波dst_fftshift = Z * gray_fftshiftdst_fftshift = (h - l) * dst_fftshift + ldst_ifftshift = np.fft.ifftshift(dst_fftshift)dst_ifft = np.fft.ifft2(dst_ifftshift) # IFFT逆傅里葉變換dst = np.real(dst_ifft) # IFFT取實部dst = np.exp(dst) - 1 # 還原dst = np.uint8(np.clip(dst, 0, 255))return dst#創建CSV表格用于存儲數據 def writeCsv(image, psnr, ssim):row = [image, psnr, ssim]out = open("D:/homomorphic_filter/gauss/result.csv", "a", newline="")csv_writer = csv.writer(out, dialect="excel")csv_writer.writerow(row)#同態濾波并計算psnr和ssim進行保存 #writeCsv("image", "psnr", "ssim") for j in range(10, 100):#同態濾波img = cv2.imread('D:/homomorphic_filter/Infrared_image/00{}.jpg'.format(str(j)))print(f"00{j}.jpg:")img_new = homomorphic_filter(img)#cv2.imshow("img", img)#cv2.imshow("img_new", img_new)cv2.imwrite("D:/homomorphic_filter/gauss/result_image/00{}.jpg".format(str(j)), img_new)# 指標計算img_1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 由于img是BGR圖片,而img_new是RGB圖像,所以計算psnr和ssim之前需要將img轉化為RGB格式psnr = peak_signal_noise_ratio(img_1, img_new)ssim = structural_similarity(img_1, img_new, multichannel=True)print(psnr)print(ssim)writeCsv(j, psnr, ssim)#key = cv2.waitKey(0) #cv2.destroyAllWindows()

效果如下:



個人學習筆記分享,錯誤望請指正!

總結

以上是生活随笔為你收集整理的(学习笔记)图像处理——同态滤波的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。