如何在Matlab中实现同态滤波器?

时间:2017-07-21 23:37:10

标签: image matlab image-processing homomorphic-filter

我已从here获取源代码并尝试修改它以满足我的需要。但是,过滤器没有按预期工作。我无法在我的代码中找到问题。

修改后的代码有什么问题?

预期输出

enter image description here

实际输出

enter image description here

源代码

的main.m

clc
close all
clear all
d=10;
order=2;
im=double(imread('tun.png'));
subplot(121)
imshow(im./255);
[r, c]=size(im);
j = homofil(im,d,order);
imshow(j);

homofil.m

function output = homofil(I, d, n)
    I = double(I);

    H = butter_hp_kernel(I, d, n); 

    alphaL = .0999;
    aplhaH = 1.01;
    H = ((aplhaH-alphaL).*H)+alphaL;
    H = 1-H;

    im_l = log2(1+I);
    im_f = fft2(im_l);
    im_nf = H.*im_f;
    im_n = abs(ifft2(im_nf));
    output = exp(im_n);

butter_hp_kernel.m

function k = butter_hp_kernel(I, Dh, n) 
    Height = size(I,1); 
    Width = size(I,2); 

    [u, v] = meshgrid( ...
                    -floor(Width/2) :floor(Width-1)/2, ...
                    -floor(Height/2): floor(Height-1)/2 ...
                 ); 

    k = butter_hp_f(u, v, Dh, n);

function f = butter_hp_f(u, v, Dh, n)
    uv = u.^2+v.^2;
    Duv = sqrt(uv);
    frac = Dh./Duv;
    %denom = frac.^(2*n);
    A=0.414; denom = A.*(frac.^(2*n));    
    f = 1./(1.+denom);

输入图片

enter image description here

1 个答案:

答案 0 :(得分:1)

我有一个更详细的解释和stackoverflow进入维护,我无法发布。所以这是一行解释。

你的j是错误的范围:[1,1.08]所以它显示白色 执行imshow(j, [])或使用mat2gray

转换j