同态滤波 matlab代码,同态滤波处理光照不均匀图像Matlab代码

里面是同态滤波处理图像代码,可供读者参考

clear all;

% 装载图片,将yourimage换成你要处理的图片

img= imread('无标.png');

%img=img0(:,:,1);

% 显示这个图片

J=rgb2gray(img);

figure,imshow(J);

title('灰度图');

figure,imhist(J);

figure,imshow(img);

title('Original Image');

% 构造一个高斯滤波器

f_high = 1.0;

f_low = 0.4;

% 得到一个高斯低通滤波器

gauss_low_filter = fspecial('gaussian', [7 7], 1.414);

matsize = size(gauss_low_filter);

% 由于同态滤波是要滤出高频部分,

% 所以我们得把这个低通滤波器转换成一个高通滤波器.

% f_high 和 f_low 是控制这个高通滤波器形态的参数.

gauss_high_filter = zeros(matsize);

gauss_high_filter(ceil(matsize(1,1)/2) , ceil(matsize(1,2)/2)) = 1.0;

gauss_high_filter = f_high*gauss_high_filter - (f_high-f_low)*gauss_low_filter;

% 显示高通滤波期的频率响应

figure,freqz2(gauss_high_filter);

colormap(jet(64));

% 利用对数变换将入射光和反射光部分分开

log_img = log(double(img));

% 将高斯高通滤波器与对数转换后的图象卷积

high_log_part = imfilter(log_img, gauss_high_filter, 'symmetric', 'conv'); % 显示卷积后的图象

figure,imshow(uint8(255*((high_log_part-1.5)/(2.4-1.5))),[]);

title('巴特沃斯高通滤波结果');

% 由于被处理的图象是经过对数变换的,我们再用幂变换将图象恢复过来

high_part = exp(high_log_part);

minv = min(min(high_part));

maxv = max(max(high_part));

rimg(:,:,1)=(high_part(:,:,1)-minv(1,1,1))/(maxv(1,1,1)-minv(1,1,1));

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
同态滤波是一种用于去除图像光照均匀的有效方法。在Matlab中,可以通过以下代码来实现同态滤波去除光照均匀: ```matlab % 读取原始图像 img = imread('input.jpg'); % 将原始图像转换为灰度图像 gray_img = rgb2gray(img); % 对灰度图像进行同态滤波处理 filtered_img = homomorphic_filter(gray_img); % 显示处理后的图像 imshow(filtered_img); title('同态滤波去除光照均匀'); % 定义同态滤波函数 function filtered_img = homomorphic_filter(img) % 将灰度图像转换为双精度数据类型 img_double = im2double(img); % 对图像进行对数变换 log_img = log(1 + img_double); % 设定同态滤波参数 gamma_l = 0.3; gamma_h = 2.0; c = 1; D0 = 10; % 设定图像频域变换的尺寸 [M, N] = size(img); % 生成频域网格 [U, V] = meshgrid(1:N, 1:M); % 计算频率域滤波器H H = (gamma_h - gamma_l) * (1 - exp(-c * (D0^2 ./ (U.^2 + V.^2)))) + gamma_l; % 对频域图像进行滤波 filtered_log_img = H .* log_img; % 将滤波后的对数图像进行反变换 filtered_img = exp(filtered_log_img) - 1; % 将处理后的图像转换为uint8数据类型 filtered_img = uint8(filtered_img * 255); end ``` 以上代码中,首先读取原始图像,并将其转换为灰度图像。然后定义了一个名为`homomorphic_filter`的函数,利用同态滤波算法对灰度图像进行处理。在此算法中,将图像进行对数变换后,计算频域滤波器H并对频域图像进行滤波,最后对滤波后的对数图像进行反变换,得到处理后的图像。最后通过imshow函数显示处理后的图像,以可视化处理效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值