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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

同态滤波及其实现

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

一、同態濾波

對于一幅由物理過程產生的圖像f(x,y),可以表示為照射分量i(x,y)和反射分量r(x,y)的乘積。0<i(x,y)<∞,0<r(x,y)<1。i(x,y)描述景物的照明,變化緩慢,處于低頻成分。r(x,y)描述景物的細節,變化較快,處于高頻成分。

因為該性質是乘性的,所以不能直接使用傅里葉變換對i(x,y)和r(x,y)進行控制,因此可以先對f(x,y)取對數,分離i(x,y)和r(x,y)。令z(x,y) = ln f(x,y) = ln i(x,y) + ln r(x,y)。在這個過程中,由于f(x,y)的取值范圍為[0, L-1],為了避免出現ln(0)的情況,故采用ln ( f(x,y) + 1 ) 來計算。

然后取傅里葉變換,得到 Z(u,v) = Fi(u,v) + Fr(u,v)。

然后使用一個濾波器,對Z(u,v)進行濾波,有 S(u,v) = H(u,v) Z(u,v) = H(u,v)Fi(u,v) + H(u,v)Fr(u,v)。

濾波后,進行反傅里葉變換,有 s(x, y) = IDFT( S(u,v) )。

最后,反對數(取指數),得到最后處理后的圖像。g(x,y) = exp^(s(x,y)) = i0(x,y)+r0(x,y)。由于我們之前使用ln ( f(x,y)+1),因此此處使用exp^(s(x,y)) - 1。? i0(x,y)和r0(x,y)分別是處理后圖像的照射分量和入射分量。



二、濾波器H(u,v)

由于我們會得到動態范圍很大,但我們感興趣的部分很暗,無法辨認細節的圖像。這可以認為或者實際上就是由于光照不均所造成的。為了減少光照的影響,增強圖像的高頻部分的細節,我們可以使用同態濾波來增強對比度,增強細節。

在此情況下,我們可以通過衰減低頻成分,增強高頻成分來達到我們的目的。通常可以采用如下高斯高通濾波器的變形濾波來對圖像進行處理。



其中,選擇rh > 1, rl < 1可以達到衰減低頻,增強高頻的目的,常數c控制函數坡度的銳利度。D(u,v)和D0與我們之前說低通濾波的時候意義一樣。分別表示和頻率中心的距離和截止頻率。D0越大,對細節的增強越明顯,最后歸一化之后顯示的圖像越亮。對于不同的圖像,D0的取值差別很大。對于特定的D0,有的圖像顯示之后是黑乎乎的一片,而有的圖像卻是整體白亮。

三、代碼實現

在使用matlab代碼使用如上所說的濾波器H(u,v)進行同態濾波的時候,基本過程和我們之前介紹進行低通濾波器的時候,進行頻率域濾波的過程基本一致。理想低通濾波器、Butterworth濾波器和高斯濾波器(matlab)

只不過,在填充圖像之前,先對圖像進行對數化。在最后提取左上角的部分之后,對圖像進行反對數化(取指數),然后再歸一化,得到最終的圖像。

1. 同態濾波函數代碼如下:

該函數為HomoFilter,輸入為需要進行同態濾波的灰度圖像(灰度級L = 256),同態濾波器的參數rh,rl,c和D0。輸出為濾波后的圖像(已經歸一化到[0, L-1])。

function [image_out] = HomoFilter(image_in, rh, rl, c, D0) % 同態濾波器 % 輸入為需要進行濾波的灰度圖像,同態濾波器的參數rh, rl,c, D0 % 輸出為進行濾波之后的灰度圖像[m, n] = size(image_in); P = 2*m; Q = 2*n;% 取對數 image1 = log(double(image_in) + 1);fp = zeros(P, Q); %對圖像填充0,并且乘以(-1)^(x+y) 以移到變換中心 for i = 1 : mfor j = 1 : nfp(i, j) = double(image1(i, j)) * (-1)^(i+j);end end % 對填充后的圖像進行傅里葉變換 F1 = fft2(fp);% 生成同態濾波函數,中心在(m+1,n+1) Homo = zeros(P, Q); a = D0^2; % 計算一些不變的中間參數 r = rh-rl; for u = 1 : Pfor v = 1 : Qtemp = (u-(m+1.0))^2 + (v-(n+1.0))^2;Homo(u, v) = r * (1-exp((-c)*(temp/a))) + rl;end end%進行濾波 G = F1 .* Homo;% 反傅里葉變換 gp = ifft2(G);% 處理得到的圖像 image_out = zeros(m, n, 'uint8'); gp = real(gp); g = zeros(m, n); for i = 1 : mfor j = 1 : ng(i, j) = gp(i, j) * (-1)^(i+j);end end % 指數處理 ge = exp(g)-1; % 歸一化到[0, L-1] mmax = max(ge(:)); mmin = min(ge(:)); range = mmax-mmin; for i = 1 : mfor j = 1 : nimage_out(i,j) = uint8(255 * (ge(i, j)-mmin) / range);end endend

2. 測試代碼如下:

clear all; close all; clc;image1 = imread('10.bmp'); [m, n] = size(image1);image2 = HomoFilter(image1, 2, 0.25, 1, 80);% 顯示圖像 subplot(1,2,1), imshow(image1), title('原圖像'); subplot(1,2,2), imshow(image2), title('D0 = 80');

3. 結果如下:


可以看到,經過同態濾波之后的圖像,圖像可以看到更多的細節,降低了照射分量的影響。

下面是對另一幅圖像的同態濾波結果,可以看到,對于D0與上面一樣,都為80的情況下,圖片一片黑乎乎。當D0等于500的時候,可以看到很多的細節。說明了對于不同的圖像,D0的差別可能很大。



總結

以上是生活随笔為你收集整理的同态滤波及其实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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