MATLAB数字图像处理(一)基础操作和傅立叶变换
MATLAB进行数字图像处理的基本操作和傅立叶变换方法。包括:图像显示、图像保存、图像数字化、灰度直方图、图像噪声、傅立叶正逆变换等。
数字图像处理是一门集计算机科学、光学、数学、物理学等多学科的综合科学。随着计算机科学的发展,数字图像处理技术取得了巨大的进展,呈现出强大的生命力,已经在多种领域取得了大量的应用,推动了社会的发展。其中,遥感领域中,对于影像数据的处理均基于数字图像处理的技术。而遥感影像数据作为地理信息科学的重要数据源,如何从中获取有用的信息,是地理信息数据处理中重要的内容。
MATLAB作为数学领域应用最广泛的一种软件,集成了对于图片处理的函数和功能,成为了处理数字图像问题的佼佼者。其出众的计算能力和简便的绘图能力可以有效进行数字图像的变换和操作。本文探究了MATLAB(R2014a)软件下数字图像处理部分简单内容方法的操作实现,包括图像变换、图像增强等。
由于时间所迫和水平不足,对于本文中的问题请指出。
在这里首先将介绍基本的操作。
1 数字图像处理基础
1.1 MATLAB图像处理基本操作
本文中对于大多数的操作,是对数字图像处理领域中最为著名的“lena”图片进行操作的。原图如下(Figure 1):
Figure 1
首先,在MATLAB中显示这幅图片:
I=imread(\'lena.jpg\'); imfinfo(\'lena.jpg\') imshow(I);
其中,imread()可以读取图片,imfinfo()可以获取图片的信息(Figure 2),imshow()可以显示图片。
Figure 2
从Figure 2中可以看出,该图片格式为png,长宽均为512px,颜色类型为真彩色。
处理后的图片还需要进行保存:
imwrite(I,\'lenaSave.jpg\');
1.2 图像数字化
使用imread()读取图像后,可以看到,读入的图片I是以一个512*512*3的矩阵进行保存的,即分别是RGB颜色的数字图片。为了方便起见,在本文中,笔者将lena图进行了转换,转换为灰度图,即保存为一个512*512*1的矩阵。
为了完成这样一个步骤,MATLAB中提供了相应的函数:
I1=rgb2gray(I); imshow(I1);
I1以512*512*1的矩阵形式进行存储。效果如下图(Figure 3):
Figure 3
1.3 直方图
为了显示图像灰度的分布情况,还需要绘制灰度直方图。可以使用如下代码:
figure,imhist(I1);
效果如下(Figure 4):
Figure 4
1.4 图像噪声的添加
为了完成多种图像处理的操作和试验,还可以对图片添加噪声。所用函数为imnoise (I, type),该函数中的type可以为5种噪声参数,分别为:\’gaussian\'(高斯白噪声),\’localvar\'(与图象灰度值有关的零均值高斯白噪声),\’poisson\'(泊松噪声),\’salt & pepper\'(椒盐噪声)和\’speckle\'(斑点噪声)。
以下为高斯噪声(Figure 5)和椒盐噪声(Figure 6)的代码和效果:
I2=imnoise(I1,\'gaussian\'); figure,imshow(I2);
Figure 5
I3=imnoise(I1,\'salt & pepper\'); figure,imshow(I3);
Figure 6
2 图像变换
2.1 傅立叶变换
傅立叶变换可以将图像从空间域转换到频率域,然后再进行相应的处理。MATLAB中有傅立叶变换的函数。
原图:
Figure 7
傅立叶变换:
F=fft2(I1); S=abs(F); figure,imshow(S,[]);
效果:
Figure 8
看上去是一片黑,事实上在全图的左上角可以看出有一个白点(即左上角缺失了)。
平移:
Fc=fftshift(F); figure,imshow(abs(Fc),[]);
效果:
Figure 9
将频率平移到中间。
频谱图:
figure,imshow(uint8(abs(Fc/256)));
效果:
Figure 10
之所以在本例中没有使用lena的图片,是因为该图傅立叶频谱图并无特点。
傅立叶逆变换:
f=real(ifft2(F)/255); figure,imshow(f);
效果:
Figure 11
经过逆变换后,仍然为原图。
具体代码请参考:https://github.com/kkyyhh96/DigitalImageProcessing/tree/master/code中kyh_One.m和kyh_Two1.m的内容。