数字图像处理作业
学院:
专业班级:
姓名:
学号:
摘要
MATLAB全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。这一特点也就决定了MATLAB在处理数字图像上的独特优势。理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。二维图像进行均匀采样,就可以得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。
MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读、写和显示。MATLAB对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。
一、MATLAB语言的基本操作
MATLAB语言是一种运算纸型的运算语言,其特点就是与平时在运算纸上书写运算的形式相同,这使得它成为一种比较容易掌握的语言;其变量均以矩阵向量形式表示(单独一个数据可以认为是一维向量);其程序语法类似于C语言,只要有一点C语言基础的人可以很快掌握。针对数字图像处理的需要,可以重点掌握以下几个内容:矩阵、向量的输入和操作(包括如何输入一个矩阵,如何产生一个全零全一的矩阵,如何对一个矩阵的行列元素进行读取、写入);矩阵与向量的基本运算(包括加、减、点乘等)
二、MATLAB中图像文件的读/写
(a)imread
imread函数用于读入各种图像文件,其一般的用法为
[X,MAP]=imread( ‘filename’, ‘fmt’)
语法如下:
imshow(I, n)
或imshow(I_BW);imshow(X, MAP);imshow(I_RGB)
其中imshow(I, n)用于显示灰度图像,I是图像数据矩阵,n为灰度级数目(n可缺省,缺省值为256)。其它的分别用于显示二值图像、索引色图像和RGB真彩色图像。另外,对RGB彩色图像,还可以用imshow( RGB(:, :, 1) )、imshow( RGB(:, :, 2) )、imshow( RGB(:, :, 3) )分别显示RGB图像的R、G、B三个分量(注意:这样显示出的图像是以各分量值为对应的灰度值所显示的灰度图像)。
需要显示多幅图像时,可以使用figure语句,它的功能就是打开一个新的图像显示窗口。也可以使用subplot函数将多幅图像显示在同一个图像显示窗口的不同区域位置。
四、图像的旋转
在工具箱中的函数imrotate可用上述三种方法对图像进行插值旋转,默认的插值方法也是最邻近插值法。
imrotate的语法格式为:
B = imrotate(A, angle, ‘method’)
函数imrotate对图像进行旋转,参数’method’用于指定插值的方法,可选用的值为'nearest'(最邻近法),'bilinear'(双线性插值),'bicubic'(双三次插值),默认为'nearest'。一般说来旋转后的图像会比原图大,超出原图部分值为0。
五、对比度调整
如果原图像f(x, y)的灰度范围是[m, M],我们希望对图像的灰度范围进行线性调整,调整后的图像g(x, y)的灰度范围是[n, N],那么下述变换:
就可以实现这一要求。
MATLAB图像处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度调整。imadjust函数的语法格式为:
J = imadjust(I,[low_in high_in], [low_out high_out])
J = imadjust(I, [low_in high_in], [low_out high_out])返回原图像I经过对比度调整后的新图像J。其中[low_in high_in]为原图像中要变换的灰度范围,[low_out high_out]指定了变换后的灰度范围,灰度范围可以用 [ ] 空矩阵表示默认范围,默认值为[0, 1](注意:灰度范围只能在0~1之间)。
代数运算是指对两幅输入图像进行点对点的加、减、乘或除运算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。在一般情况下,输入情况之一可能为常数。
四种图像处理代数运算的数学表达式如下:
其中A(x,y)和B(x,y)为输入图像,而C(x,y)为输出图像。还可以通过适当的组合形成涉及几幅图像的复合代数运算方程。
在MATLAB中,我们可以用函数imread很容易的得到数字图像的图像数据矩阵(即A(x,y)和B(x,y)),有了这些矩阵后我们只要适当地设计代数运算的形式并写出方程,就可以得到一个输出图像的矩阵(即C(x,y))。
图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效的降低加性随机噪声的影响。在求平均值的过程中,图像的静止部分不会改变,而对每一幅图像,各不相同的噪声图案则累积很慢。对M幅图像进行平均,使图像中每一点的平方信噪比提高了M倍,幅度信噪比是功率信噪比的平方根,因此达到了提高信噪比降低噪声的作用。
六、图像加入噪声
本次实验要求完成人为的往一幅图像中加入随机噪声,并通过多次相加求平均的方法降低所加入的噪声对图像的影响。
在MATLAB中提供了给图像加入噪声的函数imnoise,imnoise的语法格式为
J = imnoise(I, type)
J = imnoise(I, type, parameters)
其中J = imnoise(I, type)返回对原始图像I添加典型噪声的有噪图像J。参数type和parameters用于确定噪声的类型和相应的参数。
下面的命令是对图像eight.tif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:
例:
I = imread('eight.tif');
J1 = imnoise(I, 'gaussian', 0, 0.02);
J2 = imnoise(I, 'salt & pepper', 0.02);
J3 = imnoise(I, 'speckle', 0.02);
subplot(2,2,1), imshow(I), title('原图像');
subplot(2,2,2), imshow(J1), title('加高斯噪声');
subplot(2,2,3), imshow(J2), title('加椒盐噪声');
subplot(2,2,4), imshow(J3), title('加乘性噪声');
程序:
I=imread('E:\8.tif');
J = imrotate(I, 30, 'bilinear');
imshow(I); title('原图像')
figure, imshow(J); title('旋转后的图像')
J = imadjust(I, [0.3 0.7], [ ]); %输出灰度范围为默认范围,即为[0, 1]
figure, imshow(J);title('对比度调整')
J1 = imnoise(I, 'gaussian', 0, 0.02);
J2 = imnoise(I, 'salt & pepper', 0.02);
J3 = imnoise(I, 'speckle', 0.02);
subplot(2,2,1), imshow(I), title('原图像');
subplot(2,2,2), imshow(J1), title('加高斯噪声');
subplot(2,2,3), imshow(J2), title('加椒盐噪声');
subplot(2,2,4), imshow(J3), title('加乘性噪声');
¥29.8
¥9.9
¥59.8