二维经验模态分解和小波变换结合进行图像增强matlab
时间: 2023-05-30 18:03:09 浏览: 176
基于matlab二进小波和非线性变换的图像增强
5星 · 资源好评率100%
代码实现:
1. 二维经验模态分解:
```matlab
function [im_enhanced] = EMD_2D(im)
% 二维经验模态分解(EMD)图像增强
% 输入参数: im-原始图像
% 输出参数: im_enhanced-增强后的图像
% 将原始图像转换为灰度图像
if size(im,3)==3
im = rgb2gray(im);
end
% 构造高斯滤波器
g = fspecial('gaussian',[5,5],1);
% 对原始图像进行滤波,减少噪声的影响
im = imfilter(im,g);
% 预定义IMFs的数量
nIMFs = 5;
% 二维EMD分解
[IMFs,residual] = emd2(im,'maxmin',nIMFs);
% 对每个IMF进行小波变换
for i = 1:nIMFs
% 小波变换
[cA,cH,cV,cD] = dwt2(IMFs(:,:,i),'haar');
% 对每个分量进行直方图均衡化
cA = histeq(cA);
cH = histeq(cH);
cV = histeq(cV);
cD = histeq(cD);
% 将每个分量进行小波逆变换
IMFs(:,:,i) = idwt2(cA,cH,cV,cD,'haar');
end
% 将增强后的图像重构
im_enhanced = sum(IMFs,3) + residual;
% 对图像进行归一化
im_enhanced = im_enhanced - min(im_enhanced(:));
im_enhanced = im_enhanced / max(im_enhanced(:));
% 显示原始图像和增强后的图像
figure;
subplot(1,2,1);imshow(im);title('原始图像');
subplot(1,2,2);imshow(im_enhanced);title('增强后的图像');
end
```
2. 小波变换:
```matlab
function [im_enhanced] = wavelet_enhance(im)
% 小波变换图像增强
% 输入参数: im-原始图像
% 输出参数: im_enhanced-增强后的图像
% 将原始图像转换为灰度图像
if size(im,3)==3
im = rgb2gray(im);
end
% 构造高斯滤波器
g = fspecial('gaussian',[5,5],1);
% 对原始图像进行滤波,减少噪声的影响
im = imfilter(im,g);
% 对原始图像进行小波变换
[cA,cH,cV,cD] = dwt2(im,'haar');
% 对每个分量进行直方图均衡化
cA = histeq(cA);
cH = histeq(cH);
cV = histeq(cV);
cD = histeq(cD);
% 将每个分量进行小波逆变换
im_enhanced = idwt2(cA,cH,cV,cD,'haar');
% 对图像进行归一化
im_enhanced = im_enhanced - min(im_enhanced(:));
im_enhanced = im_enhanced / max(im_enhanced(:));
% 显示原始图像和增强后的图像
figure;
subplot(1,2,1);imshow(im);title('原始图像');
subplot(1,2,2);imshow(im_enhanced);title('增强后的图像');
end
```
使用方法:
```matlab
im = imread('lena.jpg');
% 调用二维经验模态分解进行图像增强
im_enhanced1 = EMD_2D(im);
% 调用小波变换进行图像增强
im_enhanced2 = wavelet_enhance(im);
```
阅读全文