matlab彩色图像同态滤波
时间: 2023-10-16 21:12:43 浏览: 109
matlab图像;41 同态滤波实现图像增强.zip
同态滤波是一种能够增强图像的低频部分而抑制高频噪声的滤波技术。在MATLAB中,可以使用以下步骤对彩色图像进行同态滤波:
1. 读入彩色图像并将其转换为双精度灰度图像。
```matlab
rgbImage = imread('image.jpg');
grayImage = double(rgb2gray(rgbImage));
```
2. 对灰度图像进行对数变换,将其转换为频域表示。
```matlab
logImage = log(1 + grayImage);
```
3. 对频域图像进行高斯滤波,以便于后续处理。
```matlab
filterSize = 15;
sigma = 5;
h = fspecial('gaussian', filterSize, sigma);
logImage = imfilter(logImage, h, 'symmetric');
```
4. 对频域图像进行高通滤波,以便于增强低频部分。
```matlab
alpha = 0.2;
beta = 1.5;
gamma = 1.2;
H = hpf(size(logImage), alpha, beta, gamma);
logImage = logImage .* H;
```
其中,hpf函数是一个高通滤波器,其代码如下:
```matlab
function H = hpf(siz, alpha, beta, gamma)
u = 1:siz(1);
v = 1:siz(2);
[V, U] = meshgrid(v, u);
D = sqrt((U - siz(1)/2).^2 + (V - siz(2)/2).^2);
H = gamma * (1 - exp(-alpha*(D.^2)./(beta^2)));
end
```
5. 对处理后的频域图像进行反变换,将其转换为空域表示。
```matlab
hImage = exp(logImage) - 1;
hImage = uint8(hImage);
```
6. 将处理后的灰度图像转换为彩色图像。
```matlab
hImage = cat(3, hImage, hImage, hImage);
```
完整的代码如下:
```matlab
% 读入彩色图像并将其转换为灰度图像
rgbImage = imread('image.jpg');
grayImage = double(rgb2gray(rgbImage));
% 对灰度图像进行对数变换,将其转换为频域表示
logImage = log(1 + grayImage);
% 对频域图像进行高斯滤波
filterSize = 15;
sigma = 5;
h = fspecial('gaussian', filterSize, sigma);
logImage = imfilter(logImage, h, 'symmetric');
% 对频域图像进行高通滤波
alpha = 0.2;
beta = 1.5;
gamma = 1.2;
H = hpf(size(logImage), alpha, beta, gamma);
logImage = logImage .* H;
% 对处理后的频域图像进行反变换,将其转换为空域表示
hImage = exp(logImage) - 1;
hImage = uint8(hImage);
% 将处理后的灰度图像转换为彩色图像
hImage = cat(3, hImage, hImage, hImage);
% 显示原图像和处理后的图像
figure;
subplot(1, 2, 1);
imshow(rgbImage);
title('Original Image');
subplot(1, 2, 2);
imshow(hImage);
title('Homomorphic Filtered Image');
% 高通滤波器函数
function H = hpf(siz, alpha, beta, gamma)
u = 1:siz(1);
v = 1:siz(2);
[V, U] = meshgrid(v, u);
D = sqrt((U - siz(1)/2).^2 + (V - siz(2)/2).^2);
H = gamma * (1 - exp(-alpha*(D.^2)./(beta^2)));
end
```
阅读全文