matlab實現同態濾波

2021-09-19 13:42:43 字數 1510 閱讀 6877

同態濾波的原理框圖

matlab**:

clear,clc;

img = imread('tape.png');

l = size(img); % 計算影象大小

if numel(l)>2 %判斷影象是否是彩色影象

gray = rgb2gray(img); % 影象灰度變換

else

gray = img;

endgray = double(gray);

[m, n] = size(gray);

rl = 0.5; % 高頻增益

rh = 0.8; % 低頻增益

c = 0.5; % 調節濾波器函式的斜面的銳化係數

d0 = 50; % 截止頻率

n = 1; % 濾波器的階數

i1 = log(gray + 1);

f1 = fft2(i1);

h1 = zeros(m,n);

n1 = floor(m/2);

n2 = floor(n/2);

for i = 1:m

for j = 1:n

d(i,j) = sqrt(( (i-n1).^2 + (j-n2).^2));

a = rh - rl;

b = power( d(i,j)/d0, 2*n);

c = 1 - exp(-c*b);

h1 = a * c + rl;

endendi2 = ifft2(h1.*f1);

i3 = real(exp(i2));

i3 = img_normal(i3);

ih1 = uint8(i3*256);

figure(1);

subplot(121); imshow(gray,); title('原始影象');

subplot(122); imshow(ih1,); title('濾波後影象');

function temp = img_normal(img)

%% 函式功能:歸一化輸入影象

% 輸出為【0,1】之間的double資料

img = round(img); % 將影象四捨五入為整數

img_max = max(max(img));

img_min = min(min(img));

[row, col] = size(img);

temp = zeros(row, col);

for i = 1:row

for j = 1:col

temp(i,j) = double((img(i,j) - img_min)/(img_max - img_min));

endendend

同態濾波及其實現

一 同態濾波 對於一幅由物理過程產生的影象f x,y 可以表示為照射分量i x,y 和反射分量r x,y 的乘積。0因為該性質是乘性的,所以不能直接使用傅利葉變換對i x,y 和r x,y 進行控制,因此可以先對f x,y 取對數,分離i x,y 和r x,y 令z x,y ln f x,y ln ...

同態濾波的補充說明

之前介紹過同態濾波的計算公式 本文為一些補充說明。實際應用中,經常碰到這樣一類影象,它們的灰度動態範圍很大,即 黑的部分很黑,白的部分很白,使用者感興趣的中間一部分灰度級範圍又很小,分不清物體的灰度層次和細節。遇到這種情況,一般的灰度線性變換沒法解決問題,因為擴充套件灰度級雖然可以提高影象的反差,但...

巴特沃斯濾波與同態濾波

為了處理手機加速度計感測器資料。function butterworth1d butterworthfilter input1d,d 0,n butterworthfilter 此處顯示有關此函式的摘要 此處顯示詳細說明 1 h x 1 d d 0 2n input1d 輸入一維訊號 d 0 20 ...