同态滤波彩色图像matlab代码
时间: 2023-10-26 12:03:21 浏览: 185
彩色图像增强的同态滤波的MATLAB实现
5星 · 资源好评率100%
同态滤波是一种图像增强技术,常用于去除图像中的光照不均匀问题。下面是使用MATLAB编写的同态滤波彩色图像的代码:
```matlab
% 读取彩色图像
img = imread('input_image.jpg');
% 将图像转换为双精度灰度图像
gray_img = im2double(rgb2gray(img));
% 定义同态滤波参数
rho = 0.5;
epsilon = 0.1;
a_low = 0.2;
a_high = 2.0;
b_low = 0.6;
b_high = 1.8;
% 对灰度图像进行同态滤波
filtered_img = homomorphic_filter(gray_img, rho, epsilon, a_low, a_high, b_low, b_high);
% 将滤波后的灰度图像转换为彩色图像
filtered_img = repmat(filtered_img, [1,1,3]);
% 显示原始图像和滤波后的图像
subplot(1,2,1);
imshow(img);
title('原始图像');
subplot(1,2,2);
imshow(filtered_img);
title('滤波后的图像');
% 定义同态滤波函数
function filtered_img = homomorphic_filter(gray_img, rho, epsilon, a_low, a_high, b_low, b_high)
% 计算图像的对数变换
log_img = log(1 + gray_img);
% 傅里叶变换
fft_img = fftshift(fft2(log_img));
% 计算频域的高通滤波器
[h, w] = size(log_img);
[x, y] = meshgrid(-floor(w/2):floor(w/2)-1, -floor(h/2):floor(h/2)-1);
c = 2 * pi * epsilon^2;
highpass_filter = rho - exp(-c * (x.^2 + y.^2) / 2);
% 频域滤波
filtered_fft_img = highpass_filter .* fft_img;
% 傅里叶逆变换
filtered_log_img = real(ifft2(ifftshift(filtered_fft_img)));
% 计算滤波后的图像
filtered_img = exp(filtered_log_img) - 1;
filtered_img = (filtered_img - min(filtered_img(:))) ./ (max(filtered_img(:)) - min(filtered_img(:)));
end
```
这段代码首先读取彩色图像,并将其转换为双精度灰度图像。然后,定义了同态滤波的参数。接下来,对灰度图像进行同态滤波处理。最后,将滤波后的灰度图像转换为彩色图像,并显示原始图像和滤波后的图像。同态滤波的具体实现在`homomorphic_filter`函数中,该函数首先对灰度图像进行对数变换,然后进行傅里叶变换,并计算频域的高通滤波器。接着,对频域滤波,再进行傅里叶逆变换,最后计算滤波后的图像。最终,滤波后的图像经过归一化处理并返回。
阅读全文