数字图像处理-DFT&DCT&WHT&小波变换分解重构(Matlab)
基本的matlab图像处理函数的使用
| 函数 |
功能 |
imread('图像名') |
读取图像 |
imshow(color_pic) |
显示图像 |
rgb2gray(color_pic) |
将彩色图像转换成灰度图像 |
imhist(gray_pic,n) |
查看灰度图像的灰度直方图 |
代码块
%-----------------Matlab基本图像处理函数使用------------------
clear ;
close all;
color_pic=imread('lena512color.bmp'); %读取图像
figure('name','图像读取');
subplot(2,2,1);
imshow(color_pic); %显示图像
title('原彩色图像');
gray_pic=rgb2gray(color_pic); %将彩色图转换成灰度图
subplot(2,2,2);
imshow(gray_pic);
title('灰度图像');
subplot(2,2,3);
imhist(gray_pic); %查看灰度直方图,默认n=256,256个长度为1的灰度空间
title('灰度直方图256等级');
subplot(2,2,4);
imhist(gray_pic,64);%n=64,64个长度为4的灰度空间
title('灰度直方图64等级');
运行效果

傅里叶变换(DFT)
对图像进行傅里叶正变换
%------------------傅里叶变换------------------
clear; %清除变量
close all; %关闭生成的画图窗口
color_pic=imread('lena512color.bmp'); %读取图像
gray_pic=rgb2gray(color_pic); %将彩色图转换成灰度图
figure('name','傅里叶变换'); %傅里叶变换
subplot(2,2,1);
imshow(gray_pic);
title('原灰度图像');
Fourier=fft2(gray_pic); %对灰度图像进行傅里叶正变换
log_Fourier=log(abs(Fourier)+1); %取模并进行缩放,调高频谱图像的低灰度值而对高灰度值仅可能减小
subplot(2,2,2);
imshow(log_Fourier,[]); %未进行频谱搬移时的频谱图
title('傅里叶变换频谱图');
Fourier_shift=fftshift(Fourier); %将频谱图中零频率成分移动至频谱图中心
log_Fourier_shift=log(abs(Fourier_shift)+1); %取模并进行缩放,对于(0,1)之间的x值经过取对数后会变成负值,而log(x+1)则将所有的x值映射到正数范围内
subplot(2,2,3);
imshow(log_Fourier_shift,[]);
title('频移后的频谱图');

- 总结:
在图像的傅里叶频谱中,原空间域图像上的灰度突变部位、图像结构复杂的区域、图像细节及干扰噪声等信息集中在高频区,原空间域图像上灰度变化平缓部位的信息(图像轮廓)集中在低频区。
低频部分(图像轮廓)对应于未进行频移的傅里叶频谱的4个边角角部分,由于低频部分能量较集中,因而在频谱图上的视觉效果较亮。当进行频移后,低频部分移至频谱中央,中央处最亮。
去除部分高频分量后对图像进行傅里叶逆变换
%-----------------设置阈值滤除高频 傅里叶逆变换----------------
clear;
close all;
color_pic=imread('lena512color.bmp'); %读取图像
gray_pic=rgb2gray(color_pic); %将彩色图转换成灰度图
threshold=[100000,30000,5000,500]; %设置不同阈值 (高频部分能量低)
figure('name','傅里叶逆变换图像');
for i=1