MATLAB---同态滤波

286 篇文章 32 订阅
236 篇文章 15 订阅

在这里插入图片描述

% 同态滤波
clc,clear,close all  % 清理命令区、清理工作区、关闭显示图形
warning off       % 消除警告
feature jit off      % 加速代码运行
tic
[filename ,pathname]=...
    uigetfile({'*.bmp';'*.tif';'*.jpg';},'选择图片'); %选择图片路径
str=[pathname filename]; % 合成路径+文件名
im = imread(str);        % 读图
im = imnoise(im,'gaussian',0,1e-3); % 原图像 + 白噪声

%同态滤波参数设置
rL = 0.3999;  % 低频增益
rH = 0.71;   % 高频增益
D0 = 1;   % 截止频率
figure,
subplot(121),imshow(im);title('原始图像')
colormap(jet)  % 颜色
shading interp % 消隐
im_e = Homom_filter(im,D0,rL,rH);   % 同态滤波
subplot(122),imshow(im_e,[]);title('同态滤波图像')
colormap(jet)  % 颜色
shading interp % 消隐
toc
function im_e = Homom_filter(im,d,rL,rH)
% 同态滤波
%函数输入: 
%         im:  输入的二维图像矩阵
%         d:   截止频率
%         rL   低频增益
%         rH   高频增益
%函数输出: 
%         im_e: 重构滤波图像

if ~isa(im,'double')
    im = double(im);
end

[r c]=size(im); % 输入图像维数
% 高斯高通滤波
A=zeros(r,c);
for i=1:r
    for j=1:c
        A(i,j)=(((i-r/2).^2+(j-c/2).^2)).^(.5);
        B(i,j)=A(i,j)*A(i,j);
        H(i,j)=(1-exp(-((B(i,j)).^2/d.^2)));  % 传递函数
    end
end

% 同态滤波器传递函数:
H=((rH-rL).*H)+rL;
% 取对数
im_l=log2(im + 1e-5);
% 离散傅里叶变换
im_f=fft2(im_l);
% 滤波
im_nf=H.*im_f;
% DFT反变换
im_n=abs(ifft2(im_nf));
% 指数变换,消除取对数
im_e = exp(im_n);  % 滤波矩阵
im_e = uint8(im_e);

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值