天天看点

MATLAB环境下使用同态滤波方法进行医学图像增强

作者:哥廷根数学学派

目前图像增强技术主要分为基于空间域和基于频率域2大方面,基于空间域图像增强的方法包括了直方图均衡化方法和Retinex方法等,基于频率域的方法包括同态滤波方法。

其中直方图均衡化方法只是根据图像的灰度概率分布函数进行简单的全局拉伸,没有考虑像素间的灰度联系情况,进行直方图均衡化后,会在一定程度上提高图像的对比度,但是图像的灰度级会进行合并进而减少,造成细节的丢失。而Retinex方法假定空间照度是缓慢变化的,在图像明暗变化剧烈的区域,容易出现光晕现象。因此在处理井下光照差异很明显的图片,基于频率域的同态滤波方法有更好的效果。

同态滤波是一种结合了频率过滤和灰度变换的方法,它以图像的照度反射模型作为频域的处理基础,分别对低频信息进行增强,高频信息进行抑制,可以有效解决图像上照度不均匀和 动态范围过大对图像产生影响的问题,在不损失亮区细节信息的同时,有效增强暗区的细节信息。

本文以医学图像为例,使用同态滤波方法进行医学图像增强。

部分代码如下:

% homomorphicFilter 同态滤波器
% originImg:原始医学图像
% resultImg: 结果医学图像
% 以下参数可选,要么全设置,要么设置为默认
% rL: 低频分量
% rH: 高频分量
% c: c为一个常数,控制滤波器的形态,即从低频到高频过渡段的陡度(斜率),其值越大,斜坡带越陡峭
% D0: 截止频率
% 当函数没有设置参数时
if nargin < 5,D0 = 20;end
% 锐化参数
if nargin < 4,c = 2.0;end
% 可根据需要效果调整参数
if nargin < 3,rH = 2.2;end
if nargin < 2,rL = 0.25;end
%转换数据类型为double型
I=im2double(originImg);
% I=double(originImg);
[Hight,Width]=size(I);
%对图像进行填充
extendedHight = 2*Hight; extendedWidth = 2*Width;
interimImg = zeros(extendedHight,extendedWidth);
for i = 1:Hight
for j =1:Width
interimImg(i,j) = I(i,j);
end
end
%取对数
interimImg=log(interimImg+1);

%傅里叶变换
FI=fft2(interimImg);
n1=floor(extendedHight/2);
n2=floor(extendedWidth/2);
for u=1:extendedHight
for v=1:extendedWidth
D(u,v)=sqrt(((u-n1).^2+(v-n2).^2)); %频率域中点(u,v)与频率矩形中心的距离
H(u,v)=(rH-rL).*(1-exp(-c.*(D(u,v)^2./D0^2)))+rL; %高斯同态滤波
end
end           

结果如下:

MATLAB环境下使用同态滤波方法进行医学图像增强
MATLAB环境下使用同态滤波方法进行医学图像增强
MATLAB环境下使用同态滤波方法进行医学图像增强
MATLAB环境下使用同态滤波方法进行医学图像增强
MATLAB环境下使用同态滤波方法进行医学图像增强
MATLAB环境下使用同态滤波方法进行医学图像增强
MATLAB环境下使用同态滤波方法进行医学图像增强

算法代码地址:

https://mbd.pub/o/bread/mbd-ZJuYmZ1r

擅长现代信号处理(改进小波分析系列,改进变分模态分解,改进经验小波变换,改进辛几何模态分解等等),改进机器学习,改进深度学习,机械故障诊断,改进时间序列分析(金融信号,心电信号,振动信号等)

MATLAB环境下使用同态滤波方法进行医学图像增强
MATLAB环境下使用同态滤波方法进行医学图像增强

继续阅读