matlab 同态滤波

简介: matlab 同态滤波

文章目录

处理图片:

image.png

代码:

clear all
clc
%参数声明
rH = 1;
rL = 0.1;
c = 0.2;%介于rH和rL之间
D0 = 0.2;
image = imread('3.bmp');
[M, N] = size(image);
%取对数
img_log = log(double(image) + 1);
%平移到中心,判断语句代替指数计算
img_py = zeros(M, N);
for i = 1:M
   for j= 1:N
       if mod(i+j, 2) == 0
           img_py(i,j) = img_log(i, j);
       else
           img_py(i,j) = -1 * img_log(i, j);
       end
   end
end
% 对填充后的图像进行傅里叶变换
img_py_fft = fft2(img_py);
%同态滤波函数
img_tt = zeros(M, N);
deta_r = rH - rL;
D = D0^2;
m_mid=floor(M/2);%中心点坐标
n_mid=floor(N/2);  
for i = 1:M
   for j =1:N
        dis = ((i-m_mid)^2+(j-n_mid)^2);
        img_tt(i, j) = deta_r * (1-exp((-c)*(dis/D))) + rL;
   end
end
%滤波
img_temp =   img_py_fft.*img_tt;
%反变换,取实部,绝对值
img_temp = abs(real(ifft2(img_temp)));
%指数化
img_temp = exp(img_temp) - 1;
%归一化处理
max_num = max(img_temp(:));
min_num = min(img_temp(:));
range = max_num - min_num;
img_after = zeros(M,N,'uint8');
for i = 1 : M
    for j = 1 : N
        img_after(i,j) = uint8(255 * (img_temp(i, j)-min_num) / range);
    end
end
figure
imshow(image), title('原图像');
figure
imshow(img_after), title('变换后');
imwrite(img_after,'同态滤波.png');

运行:

image.png

相关文章
|
4月前
|
数据可视化 算法 数据挖掘
MATLAB
【7月更文挑战第22天】
42 1
Matlab中复型中I与j效果相同吗
Matlab中复型中I与j效果相同吗
114 0
|
数据采集 机器学习/深度学习 数据可视化
学会MATLAB到底能做什么?
  MATLAB是Mathworks公司于1984年推出的一套高性能的数值计算的可视化软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,可方便地应用于数学计算、算法开发、数据采集、系统建模和仿真、数据分析和可视化、科学和工程绘图、应用软件开发等方面。MATLAB之所以能够被广泛应用,是因为它将科研工作者从乏味的Fortran、C编程中解放出来,使他们真正把精力放在科研和设计的核心问题上,从而大大提高了工作效率。在MATLAB环境中描述问题及编制求解问题的程序时,用户可以按照符合人们的科学思维方式和数学表达习惯的语言形式来书写程序。   MATLAB这个词代表“矩阵实验室”(matrix
3590 0