《数字图像处理》基本实验指导书文档格式.docx
- 文档编号:18477878
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:32
- 大小:2.43MB
《数字图像处理》基本实验指导书文档格式.docx
《《数字图像处理》基本实验指导书文档格式.docx》由会员分享,可在线阅读,更多相关《《数字图像处理》基本实验指导书文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
)
此时图片会自动存入默认路径下。
②将图像用save命令以mat文件形式保存到磁盘中,以后可用load命令调用。
save保存的文件名变量名(图像)
load保存的文件名
3、数字图像的表示和类别
一幅图像可以被定义为一个二维函数f(x,y),其中x和y是空间(平面)坐标,f在任何坐标处(x,y)处的振幅称为图像在该点的亮度。
灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由单个二维图像组合形成的。
例如,在RGB彩色系统中,一幅彩色图像是由三幅独立的分量图像(红、绿、蓝)组成的。
因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三副独立的分量图像即可。
图像关于x和y坐标以及振幅连续。
要将这样的一幅图像转化为数字形式,就要求数字化坐标和振幅。
将坐标值数字化成为取样;
将振幅数字化成为量化。
采样和量化的过程如图1-1所示。
因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。
作为MATLAB基本数据类型的数值数组本身十分适于表达图像,矩阵的元素和图像的像素之间有着十分自然的对应关系。
图1-1图像的采样和量化
根据图像数据矩阵解释方法的不同,MATLAB把其处理为4类:
索引图像(Indexedimages)
灰度图像(Intensityimages)
二值图像(Binaryimages)
RGB图像(RGBimages)
MATLAB图像处理工具箱为开发者提供了丰富的图像处理函数,内容包括图像I/O、图像空间变换、图像配准、图像变换、线性滤波及滤波器设计、邻域与块处理、图像增强、图像模糊消除、感兴趣区域操作和图像形态学分析等。
⑴索引图像
索引图像包括图像矩阵与颜色图数组。
其中颜色图是按照图像中颜色值进行排序后的数
组。
对于每个象素,图像矩阵包含一个值,这个值就是颜色图数组中的索引。
索引颜色通常也称为映射颜色,在这种模式下,颜色都是预先定义的,并且可供选用的一组颜色也很有限,索引颜色的图像最多只能显示256种颜色。
一幅索引颜色图像在图像文件里定义,当打开该文件时,构成该图像具体颜色的索引值就被读入程序里,然后根据索引值找到最终的颜色。
颜色图为m*3双精度值矩阵,各行分别指定红、绿、蓝单色值。
图像矩阵与颜色图的关系依赖于图像矩阵是双精度还是无符号8位整数(unit8)。
⑵灰度图像
灰度图像也成为亮度图像,一幅灰度。
图像是一个数据矩阵,其归一化的取值表示亮度。
若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。
若图像是double类,则像素取值就是浮点数。
规定双精度型归一化亮度图像的取值范围是[0,1]
⑶二值图像
二值图像也成为二进制图像,一幅二值图像是一个取值只有0和1的逻辑数组。
而一幅取值只包含0和1的uint8类数组,在MATLAB中并不认为是二值图像。
使用logical函数可以把数值数组转化为二值数组或逻辑数组。
创建一个逻辑图像,其语法为:
B=logical(A)
其中,B是由0和1构成的数值数组。
要测试一个数组是否为逻辑数组,可以使用函数:
islogical(c)
若C是逻辑数组,则该函数返回1;
否则,返回0。
⑷RGB图像
一幅RGB图像就是彩色像素的一个M×
N×
3数组,M和N表示图像像素的行列数。
其中每一个彩色相似点都是在特定空间位置的彩色图像相对应的红、绿、蓝三个分量。
按照惯例,形成一幅RGB彩色图像的三个图像常称为红、绿或蓝分量图像。
令fR,fG和fB分别代表三种RGB分量图像。
一幅RGB图像就利用cat(级联)操作将这些分量图像组合成彩色图像:
rgb_image=cat(3,fR,fG,fB)
在操作中,图像按顺序放置。
4、数据类和图像类型间的转化
⑴数据类型间的转换
表1-1中列出了MATLAB表示像素所支持的各种数据类。
表中的前8项称为数值数据类,第9项称为字符类,最后一项称为逻辑数据类。
工具箱中提供了执行必要缩放的函数(见表1-2)。
以在图像类和类型间进行转化。
预览:
表1-1MATLAB和IPT支持数据类型
表1-2格式转换函数⑵图像类型间的转换
MATLAB支持BMP(windows位图格式)、JPG(联合图像专家组格式)、PCX(windows画刷格式)、PNG(可移动网络图形格式)、TIF(编制图像文件格式)等多种图像文件格式。
①灰度图像与索引图像的相互转换:
gray2ind(),ind2gray()。
[X,MAP]=gray2ind(I,[n])
其中,I表示存放灰度图像的变量,n为颜色值(缺省64)。
I=ind2gray(X,MAP)
其中,X表示图像矩阵变量,MAP表示颜色图数组变量。
②RGB图像与灰度图像的转换:
rgb2gray()。
格式:
I=rgb2gray(RGB)
表示将真彩图像RGB转换为灰度级亮度图像I。
注意!
灰度图像是不能转成RGB图像的。
③RGB图像与索引图像的相互转换:
rgb2ind(),ind2rgb()。
[X,MAP]=rgb2ind(RGB)
RGB=ind2rgb(X,MAP)
其中X表示索引图像变量名,MAP为索引图像调色板。
④将索引图像、灰度图像、RGB图像转换为二值图像:
im2bw()。
需要注意的是,只有灰度图像可以直接调用im2bw()来转成二值图像,而其他类型的图像都需要先转成灰度级图像再转成二值图像。
输出图像在输入图像所有亮度小于给定值(level)像素点处均为0,在其他地方均为1。
level值得取值范围为[0,1]。
BW=im2bw(I,level)
BW=im2bw(X,MAP,level)
BW=im2bw(RGB,level)
5、图像的运算和空间域操作
⑴图像的运算
图像的代数运算是图像的标准算术操作的实现方法,是两幅输入图像之间进行的点对点的加、减、乘、除运算后得到输出图像的过程。
如果输入图像为A(x,y)和B(x,y),输出图像为C(x,y),则图像的代数运算有如下四种形式:
C(x,y)=A(x,y)+B(x,y)
C(x,y)=A(x,y)-B(x,y)
C(x,y)=A(x,y)*B(x,y)
C(x,y)=A(x,y)/B(x,y)
图像的代数运算在图像处理中有着广泛的应用,它除了可以实现自身所需的算术操作,还能为许多复杂的图像处理提供准备。
例如,图像减法就可以用来检测同一场景或物体生产的两幅或多幅图像的误差。
使用MATLAB的基本算术符(+、-、*、/等)可以执行图像的算术操作,但是在此之前必须将图像转换为适合进行基本操作的双精度类型。
为了更方便地对图像进行操作,MATLAB图像处理工具箱包含了一个能够实现所有非稀疏数值数据的算术操作的函数集合。
下表列举了所有图像处理工具箱中的图像代数运算函数。
表1-3图像处理工具箱中的代数运算函数
使用图像处理工具箱中的图像代数运算函数无需再进行数据类型间的转换,这些函数能够接受uint8和uint16数据,并返回相同格式的图像结果。
虽然在函数执行过程中元素是以双精度进行计算的,但是MATLAB工作平台并不会将图像转换为双精度类型。
代数运算的结果很容易超出数据类型允许的范围。
例如,uint8数据能够存储的最大数值是255,各种代数运算尤其是乘法运算的结果很容易超过这个数值,有时代数操作(主要是除法运算)也会产生不能用整数描述的分数结果。
图像的代数运算函数使用以下截取规则使运算结果符合数据范围的要求:
超出数据范围的整型数据将被截取为数据范围的极值,分数结果将被四舍五入。
例如,如果数据类型是uint8,那么大于255的结果(包括无穷大inf)将被设置为255。
图像可以和常数进行运算,它表示对图像中的每一个像素点来进行相应的操作,相当于把矩阵中所有元素都进行扩大或缩小的操作。
所以,如果是图像和图像间的逻辑运算,必须要让两幅图的尺寸,也就是长和宽保持一致,相当于操作的两个数组是同样的大小,即维数相同,并且运算后会得到相同维数的数组,也就是说进行了逻辑运算以后的图像尺寸并不会改变。
能够进行逻辑运算的两幅图像除了要满足尺寸一致这个条件以外,还需要满足图像类型一致的条件。
图像加法(函数:
imadd())
功能:
实现两幅图像相加或图像加上一个常数
两幅图像的像素值相加时产生的结果很可能超过图像数据类型所支持的最大值,尤其对于uint8类型的图像,溢出情况最为常见。
当数据值发生溢出时,imadd函数将数据截取为数据类型所支持的最大值,这种截取效果称之为饱和。
为了避免出现饱和现象,在进行加法计算前最好将图像转换为一种数据范围较宽的数据类型。
例如,在加法操作前将uint8图像转换为uint16类型。
图像减法(函数:
imsubtract())
实现两幅图像相减或图像减去一个常数。
图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。
图像减法可以作为许多图像处理工作的准备步骤。
例如,可以使用图像减法来检测一系列相同场景图像的差异。
图像减法与阈值化处理的综合使用往往是建立机器视觉系统最有效的方法之一。
在利用图像减法处理图像时往往需要考虑背景的更新机制,尽量补偿由于天气、光照等因素对图像显示效果造成的影响。
减法操作有时会导致某些像素值变为一个负数,对于uint8或uint16类型的数据,如果发生这种情况,那么imsubtract函数自动将这些负数截取为0。
为了避免差值产生负值,同时避免像素值运算结果之间产生差异,可以调用函数imabsdiff。
imabsdiff将计算两幅图像相应像素差值的绝对值,因而返回结果不会产生负数。
该函数的调用格式与imsubtract函数类似。
图像乘法(函数:
immultiply())
实现两幅图像相乘或图像的亮度缩放。
两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。
一幅图像乘以一个常数通常被称为缩放,这是一种常见的图像处理操作。
如果使用的缩放因子大于1,那么将增强图像的亮度,如果因子小于1则会使图像变暗。
缩放通常将产生比简单添加像素偏移量自然得多的明暗效果,这是因为这种操作能够更好地维持图像的相关对比度。
此外,由于时域的卷积或相关运算与频域的乘积运算对应,因此乘法运算有时也被作为一种技巧来实现卷积或相关处理。
uint8图像的乘法操作一般都会发生溢出现象。
Immultiply函数将溢出的数据截取为数据类型的最大值。
为了避免产生溢出现象,可以在执行乘法操作之前将uint8图像转换为一种数据范围较大的图像类型,例如uint16。
图像除法(函数:
imdivide())
实现两幅图像相除或图像的亮度缩放。
除法运算可用于校正成像设备的非线性影响,这在特殊形态的图像(如断层扫描等医学图像)处理中常常用到。
图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法也称为比率变换。
⑵图像的空间域操作
①图像的缩放(函数:
imresize())
J=imresize(I,n),其中n为缩放比例
②图像的旋转(函数:
imrotate())
J=imrotate(I,旋转度数,‘方法’,‘crop’)
其中旋转度数一般在[0,360]之间,‘方法’一般来说有3种'
nearest'
(最邻近插值法),'
bilinear'
(双线性插值法),'
bicubic'
(三次卷积插值法)。
不同的插值方法得到的旋转图像有细微的差,缺省时matlab默认为选最邻近插值法,此时图像会有一定的失真,这个失真主要是因为matlab在计算每个点的新坐标的时候得到的数值不是整数,要去整所造成的。
最后如果加上‘crop’表示旋转完成以后,将新得到的图像裁剪到跟原来同样的大小。
③图像的剪切(函数:
imcrop())
J=imcrop(I,[xminyminxmaxymax],)
xminyminxmaxymax表示剪切时,从原图什么地方开始和终止的坐标。
三、实验例题
1、任选一幅图像对其进行各种图像变换
a=imread('
'
subplot(2,2,1)
subimage(a)
title('
原彩色图像'
i=rgb2gray(a);
subplot(2,2,2)
subimage(i)
灰度图像'
[X,MAP]=rgb2ind(a,256);
subplot(2,2,3)
subimage(X)
索引图像
'
2、为图像中每个像素增加亮度x=imread('
aaa.tif'
I=rgb2gray(x);
J=imadd(I,100);
subplot(1,2,1);
subimage(I);
subplot(1,2,2);
subimage(J);
四、实验报告要求
1、简述实验目的及实验原理。
2、选取两幅大小一样的图像,首先转换成灰度图像,然后对其中一幅进行旋转(旋转角度自定),再对两幅图像进行代数运算,并附上程序及处理前后的图像。
3、对实验结果进行总结。
实验二数字图像变换
1、了解图像变换的意义和手段
2、熟悉傅立叶变换的基本性质
3、熟练掌握FFT变换方法及应用
4、通过实验了解二维频谱的分布特点
5、掌握图片的压缩技术原理
1、应用傅立叶变换进行图像处理
傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。
通过实验培养这项技能,将有助于解决大多数图像处理问题。
对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。
离散傅里叶变换具有许多重要的性质,这些性质为实际运算提供了极大的方便。
例如,根据变换核的可分离性,二维离散傅里叶变换可以通过两次一维离散傅里叶变换来实现;
根据周期性,只需要一个周期就可以将整个变换完全确定;
根据共轭对称性,只需要半个周期的变换就可以获得整个频谱。
图像傅里叶变换是将图像从图形的空间变换到频率空间,从而可利用傅里叶频谱特性进行图像处理,使运算变得简单。
2、傅立叶(Fourier)变换的定义
对于二维信号,二维Fourier变换定义为:
F(u,v)
uy)dxdy(uxj2f(x,y)e逆变换:
f(x,y)
uy)dudv(uxF(u,v)ej2二维离散傅立叶变换为:
11Nn)1N(mj2ik
00kf(i,k)eNiNNF(m,n)
逆变换:
n)NN(mik1j21NF(m,n)eN00nNm1f(i,k)
图像的傅立叶变换与一维信号的傅立叶变换变换一样,有快速算法,具体参见参考书目,有关傅立叶变换的快速算法的程序不难找到。
实际上,现在有实现傅立叶变换的芯片,可以实时实现傅立叶变换。
3、离散傅里叶变换
计算机处理傅立叶变换用离散傅立叶变换,输入/输出数据均为离散,便于计算机处理。
在使用离散傅立叶变换时,可以使用其快速算法FFT。
MATLAB提供的相关函数:
FFT、FFT2、FFTn。
对二值图像进行傅里叶变换以后观察其频谱,我们会发现直流成分主要集中在右上角,分辨率比较低。
所以必须通过fftshift函数提供补零和直流成分显示区域调整后得到调整,再进行观察。
4、离散余弦变换
使用傅立叶变换时存在一个问题,它的参数均为复数,数据描述上相当于实数的两倍,也就是说数据的计算量比较大,而离散余弦变换较好的解决了这个问题。
离散余弦变换,根据实的偶函数的离散傅里叶变换只包含余弦项(实部)的特性,可将实图像构造成实的偶函数,再求它的离散傅里叶变换,从而构成所谓的离散余弦变换(DCT)。
它是实的正交变换,变换核可分离且具有对称性,可以通过傅里叶变换的实部求得,所以具有快速算法。
DCT变换具有良好的信息压缩能力,因而在图像的压缩编码等领域具有广泛的应用。
离散余弦的MATLAB实现一种是基于图像离散余弦变换的算法,这是通过MATLAB工具箱提供的dct2函数和idct2函数实现的;
另一种是DCT变换矩阵方法。
变换矩阵方法非常适合做8*8或16*16的图像块的DCT变换,工具箱提供了dctmtx函数来计算变换矩阵。
离散余弦变换具有很强的“能量集中”特性,而且能量主要集中在左上角处,因此在实际图像应用中,能量不集中的地方可在余弦编码中忽略。
于是我们可以通过对mask矩阵进行变换来实现,即将mask矩阵左上角置1,其余全部置0。
然后通过离散余弦反变换后,图像得以恢复,这种处理方法叫做图像的压缩。
5、沃尔什变换
由于傅里叶变换和余弦变换的变换核由正弦、余弦函数组成,运算速度受影响。
在特定问题中,往往引进不同的变换方法,以求运算简单且变换核矩阵产生方便。
沃尔什变换中的变换矩阵简单(只有1和-1),占用存储空间少,产生容易,有快速算法,所以在需要实时处理大量数据的图像处理问题中,应用广泛。
6、图像的压缩
离散余弦变换是先将整体图像分成N×
N像素块,然后对N×
N像素块逐一进行离散余弦变换。
由于大多数图像的高频分量较小,相应于图像高频分量的系数经常为零,加上人眼对高频成分的失真不太敏感,所以可以用更粗的量化。
这样起到压缩图像的目的,使传输的数码率要远远小于实际图像的数码率,接收端通过反变换得到的恢复图像也不会有明显的改变。
图像压缩主要任务是取不同的DCT系数,观察即满足不影响图像质量有能达到较大的压缩率。
对图像进行分块处理时,我们会用到函数blkproc()。
调用格式:
B=blkproc(A,[mn],fun,parameter1,parameter2,...)
B=blkproc(A,[mn],[mbordernborder],fun,...)
B=blkproc(A,'
indexed'
...)
参数说明:
[mn]:
图像以m*n为分块单位,对图像进行处理(如8*8)
Fun:
应用此函数对分别对每个m*n分块的像素进行处理
parameter1,parameter2:
要传给fun函数的参数
mbordernborder:
对每个m*n块,上下进行mborder个单位的扩充,左右进行nborder个单位的扩充,扩充的像素值为0,fun函数对整个扩充后的分块进行处理。
这里:
fun='
P1*x*P2'
,fun的参数P1,P2,将T,T'
传递给fun的参数,即:
P1=T,P2=T'
。
1、有一矩形函数f(m,n),矩形区域为1,其余为0,对该矩形作傅立叶变换。
clear;
N=100;
f=zeros(50,50);
f(15:
35,23:
28)=1;
subplot(2,1,1)
imshow(f)
subplot(2,1,2)
F=fft2(f);
imshow(log(abs(F)))
2、fftshift函数实现补零操作和改变图象显示象限
F=fft2(f,256,256);
F2=fftshift(F);
imshow(log(abs(F2)));
3、对图像进行离散余弦变化,观察其余弦变换系数及余弦反变换后恢复图像。
⑴将变换后小于10的元素忽略
I=imread('
cameraman.tif'
);
%装入原始图像
subplot(3,1,1);
imshow(I);
J=dct2(I);
%对I进行二维DCT
subplot(3,1,2);
imshow(log(abs(J)),[]);
%图像大部分能量集中在左上角处J(abs(J)<
10)=0;
%将DCT变换值小于10的元素设为0K=idct2(J)/255;
%对逆DCT变换值归一化
subplot(3,1,3);
imshow(K);
⑵将变换后小于255的元素忽略
figure
subplot(1,3,1);
subplot(1,3,2);
imshow(log(abs(J)),[]);
255)=0;
%将DCT变换值小于255的元素设为0K=idct2(J)/255;
subplot(1,3,3);
4、选取一幅图像,取不同的压缩度,对其进行压缩处理。
A=imread('
I=rgb2gray(A);
trueImage=im2double(I);
%转换图像矩阵为双精度型
imshow(trueImage);
title('
原始图像'
dctm=dctmtx(8);
%计算离散余弦变换
imageDCT=blkproc(trueImage,[88],'
dctm,dctm.'
%对图像I的每个不同8*8数据块应用矩阵式’P1*x*P2’进行处理。
M10=[11110000
11100000
11000000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像处理 数字图像 处理 基本 实验 指导书