matlab 同态滤波
【摘要】
文章目录
处理图片:
代码:
clear all
clc
%参数声明
rH = 1;
rL = 0.1;
c = 0.2;%介于rH和rL之间
D0 = 0.2;
image...
代码:
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');
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
运行:
文章来源: chuanchuan.blog.csdn.net,作者:川川菜鸟,版权归原作者所有,如需转载,请联系作者。
原文链接:chuanchuan.blog.csdn.net/article/details/121633402
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)