数字图像处理中的一些基本概念

1.图像的频率表征的是图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。跟信号里类似,高频分量对应的是陡峭的跳变沿。
2.实际数字图像存在一个矩阵中,故傅里叶变化是将其作为一个周期离散信号进行处理的;而其频谱也是周期离散的,若用ω表示频谱,周期为2π;若以μ表示频谱,则周期为N(样本数),μ可以看做基频的倍数值。
3.图像经过二维傅里叶变换后,其系数矩阵代表对应的某一频率的信号的幅度(包含幅值大小和相位,幅值大小代表灰度信息,相位包含形状信息)。如果没有进行频谱的平移,则四个角上最亮,因为代表了低频,能量大。

常用matlab指令

1.从图形文件中读取图像

%filename包含后缀名
%对于RGB图像,返回的uint8型的m*n*3的矩阵
A = imread(filename)

2.各种图像之间的转换

%将 RGB 图像转换为索引图像
%RGB代表RGB表示的矩阵 Q代表Q种颜色的索引图像 cmap得到的是Q*3的颜色索引矩阵
[X,cmap] = rgb2ind(RGB,Q)

%将灰度转换为索引图像 注意cmap的所有颜色向量3个坐标都相同,因为表示的是灰度
[X,cmap] = gray2ind(I,c)

%RGB转换为灰度
I = rgb2gray(RGB)

3.显示图像

这里注意如果double的矩阵一定要保证在[0,1]范围内,否则输出会全白

%显示矩阵X代表的索引图像 map为颜色索引矩阵
imshow(X,map)

%显示灰度图像I,根据I中的像素值范围对显示进行转换
imshow(I,[])

4.数据类型转换

%将uint8转换为double,[0,1]
A=im2double(A)

%将double转换为uint8
A=im2uint8(A)

5.傅里叶变化相关

%正变换
F=fft2(A);

%逆变换
F=fftshift(F);

6.其他

%将当前图窗划分为 m×n 网格,并在 p 指定的位置创建坐标区
subplot(m,n,p)

%键盘输入函数 显示 prompt 中的文本并等待用户输入值后按Return(Enter)键。
x = input(prompt)

%串联变量和字符串
out=['operated ' num2str(t) '%'];

相关功能的代码

(1)作出傅里叶变换后的频谱图

%读入图像 uint8 RGB
A0=imread('D:\lineNoise.png');
%将RGB转换为灰度
A=rgb2gray(A0);
%将uint8转换为[0,1]的double,增强运算精度
A=im2double(A);

%二维傅里叶变换,得到各个频率的幅度
F=fft2(A);
%对频谱进行平移,将低频平移到中间位置
F=fftshift(F);
%对幅度进行log缩放
F1=log(1+abs(F));
%直接取幅度的模
F2=abs(F);

% 傅里叶反变换,如果没有平移回来的话,原图像相当于乘了一个(-1)^(x+y),失真
% F=fftshift(F);
% A2=ifft2(F);

F1=uint8(F1);
F2=uint8(F2);

%增加图片的个数
subplot(1,2,1);
%像素值范围对显示进行转换,最小值显示为黑色,将最大值显示为白色
%使用了log进行缩放
imshow(F1,[]);
%未使用log缩放
subplot(1,2,2);
imshow(F2,[]);

imwrite(F2,'D:\b.png');

结果:

在这里插入图片描述

左边是经过log衰减的,减小得到的系数矩阵的变化幅度,右边是未经过处理的,变化较大但是依旧可以观察。

(2)对一幅图像进行离散余弦变换,设置不同的阈值,保留部分系数

A=imread('D:\graycat.png');
%将rgb转换为灰度值
A1=rgb2gray(A);
%作离散余弦变换
C1=dct2(A1);
%对幅度作log缩放
C2=log(1+abs(C1));

%输入阈值的参数t [0,1]
t=input('please input the  threshold value which is between 0 and 1\n');
%将t拓展到和频率相同的取值范围
b=size(C2);
t1=t*b(1);
%将t转换为整数再转换回double
t1=uint16(t1);
t1=double(t1);

%大于阈值频率的都清零
C1(t1:end,:)=0;
C1(:,t1:end)=0;

%离散余弦反变换
A2=idct2(C1);

%输出操作后的图形和原始图像
subplot(1,2,1);
A2=uint8(A2);
imshow(A2);
out=['operated ' num2str(t) '%'];
title(out)
subplot(1,2,2);
imshow(A1)
title('orignal')

%写入图片
imwrite(A2,'D:\a.png');

结果:

在这里插入图片描述当阈值设到0.2以下后,反变换回来的图像才有明显失真,说明图像的能量主要分布在低频区。