Matlab数字图像处理其中有以下程序Word格式文档下载.docx
- 文档编号:19411730
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:19
- 大小:924.25KB
Matlab数字图像处理其中有以下程序Word格式文档下载.docx
《Matlab数字图像处理其中有以下程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Matlab数字图像处理其中有以下程序Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
文件内容包含文件头、位图信息数据块和图像数据。
选择BMP格式保存一幅灰度模式图像时,可选择以Windows格式保存。
而且在选中4位或8位位图时,还可选压缩(RLE)项,在用RLE方式压缩保存后图像将毫无损失。
这是用得最广的图像格式之一,在本文中都对这种格式的图像进行操作。
C)HDF格式。
有8位,24位光栅图像数据集。
D)JPEG格式。
是一种联合图像专家组的图像压缩格式,是目前所用对静止灰度或彩色图像的压缩标准。
它实际上定义了3种编码系统:
a.基于DCT的有损编码基本系统,可用于绝大多数压缩场合;
b.用于高压缩比、高精度或渐进重建应用的扩展编码系统;
c.用于无失真应用场合的无损系统。
JPEG没有规定文件格式、图像分辨率或所用的彩色空间模型,这使它就有可能适用于MATLAB。
D)TIFF格式。
处理1、4、8、24位非压缩图像,1、4、8、24位packbit压缩图像,1位CCITT压缩图像等。
文件内容包括:
文件头、参数指针表与参数域、参数数据表和图像数据四部分。
它是一种用途广泛的文件格式,其特点是可移植性好,几乎所有的扫描仪及在Windows、Macintosh平台上常用的版面设计软件都支持TIFF文件格式。
以这种格式保存的图像文件结构比较复杂,在不压缩存放时文件比较大。
E)XWD格式。
1、8位Zpixmaps,Xybitmaps,1位XYPixmaps。
F)TGA格式。
处理1、4、8、16、24位非压缩图像和行程编码图像。
文件包由5个固定长度字段和3个可变长度字段组成。
2.3
MATLAB图像文件类型根据数据矩阵和图像象素点颜色的匹配关系,MATLAB中的图像可分为三类:
索引图像、灰度图像和RGB图像。
1)索引图像:
它的数据信息包括一个数据矩阵和一个双精度色图矩阵,它的数据矩阵中的值直接指定该点的颜色为色图矩阵中的某一种。
色图矩阵中,每一行表示一种颜色,每行有三个数据,分别表示该种颜色中红、绿、蓝的比例情况,所有元素值都在[0,1]内。
2)灰度图像:
它的数据矩阵中的元素值一般都在[0,1]或[0,255]之间,灰度图像根据这些数据利用线性插值来和色图中的颜色种类匹配。
3)RGB图像:
图像中每个象素的颜色用三个数据来存储,分别指定红、绿、蓝三原色在象素颜色中的比例关系,组成一个三维数组。
2.4
MATLAB中图像的存储运算和显示方式在MATLAB中,数值一般都采用double型(64位)存储和运算,为了节省存储空间,MATLAB为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称为8位型像。
函数image能够直接显示8位图像,但8位型数据和double型数据在image中意义不一样,对于索引图像,数据矩阵中的值指定该像素的颜色种类在色图矩阵中的行数。
当数据矩阵中的值为0时,表示用色图矩阵中第一行表示的颜色绘制;
当数据矩阵中的值为1时,表示用色图矩阵中的第二行表示的颜色绘制该像素,数据与色图矩阵中的行数总是相差1。
所以,索引图像double型和uint8型在显示方法上没有什么不同,只是8位数据矩阵的值和颜色种类之间有一个偏差1。
调用格式均为image(x);
colormap(map);
对于灰度图像,uint8表示范围[0,255],double型表示范围[0,1]。
可见,double型和uint8型灰度图像不一样,二者转换格式为:
I8=uint8(round(I64*255));
I64=double(I8)/255;
反之,imread根据文件中的图像种类作不同的处理。
当文件中的图像为灰度图像时,imread把图像存入一个8位矩阵中,把色图矩阵转换为双精度矩阵,矩阵中每个元素值在[0,1]内;
当为RGB图像时,imread把数据存入到一个8位RGB矩阵中。
本软件的处理统一针对BMP格式的灰度图。
在编程时图像读入与输出均要求转换为uint8型,中间运算处理过程则要用double型。
2.5
从零开始学用MATLAB
MATLAB对于我来说是一门全新的语言,一般在编辑框中编程存盘后在命令框内运行,在Figure框中显示图像。
在用它作数字图像处理的过程中,最常碰到的问题有:
①图像读入imread(‘文件名.格式’,’格式’),必须是上文提过的MATLAB支持的7种格式之一,而用Photoshop制作的PSD图像保存了所有通道和图层的信息,不能直接用MATLAB来处理。
显示图像用imshow(h)语句,h为图像句柄;
在一幅图片中显示子图用subplot规定子图的位置和大小,用subimage(h)输出子图。
输出图像若需要永久保存,则可用imwrite(h,map,’filename.bmp’,’bmp’),写入存储器。
注意在该语句前要设置调色板,即map=(gray(256))。
②结构化程序语句写法不同于C语言。
比如if,for之后要用end表示这一块结束。
有关条件的语句都不用加括号,而用冒号来表示递增,如
for
i=1:
3:
10
表示i从1以步长3递增到10,即做三次循环。
③要注意图像格式的转化。
须知不同的图像格式对应不同的处理方式,如果处理与格式不符,将引起错误。
比如范例中的图片lena256.bmp表现为灰度图,但其实质仍为RGB图像。
如果不用语句rgb2gray将其转化为256级灰度图,经变换后图像会变红或变蓝。
④数组的定义方式与C语言不同。
由于C语言中含N个元素的一维数组A的下标从0到N-1,数组定义为A[N];
同样的数组,MATLAB规定的下标是从1到N,所以不能再用A[N]来表示数组,只能用它表示数组的第N个元素。
赋值时用A代表数组。
⑤由于在本演示软件中,涉及较多点运算,所以运行速度较慢。
等待时未知其是否顺利运行。
这时最好在最外层循环加上计数标志,即变量名,这样对程序运行的影响不大,却可以知道程序的运行情况,有助于查错。
但如果在内层循环加标志的话,将大大减慢运行速度。
⑥尽管MATLAB允许未定义使用数组,但在实际应用中这样经常出错,特别是遇到在double和uint8型之间的转换时。
所以最好还是养成用前定义的习惯,避免出现不必要的错误。
⑦在做完一定量的运算后,一般要用Clear清除内存变量,以防影响后面的程序运行。
2.2.1 图像文件格式及图像类型
1.MATLAB支持的几种图像文件格式:
⑴JPEG(JointPhotogyaphicExpeytsGroup):
一种称为联合图像专家组的图像压缩格式。
⑵BMP(WindowsBitmap):
有1位、4位、8位、24位非压缩图像,8位RLE(RunlengthEncoded)的图像。
文件内容包括文件头(一个BITMAPFILEHEADER数据结构)、位图信息数据块(位图信息头BITMAPINFOHEADER和一个颜色表)和图像数据。
⑶PCX(WindowsPaintbrush):
可处理1位、4位、8位、16位、24位等图像数据。
文件内容包括文件头、图像数据和扩展色图数据。
⑷TIFF(TaggedIamgeFileFormat):
处理1位、4位、8位、24位非压缩图像,1位、4位、8位、24位packbit压缩图像,1位CCITT压缩图像等。
文件内容包括文件头、参数指针表与参数域、参数数据表和图像数据四部分。
⑸PNG(PortableNetworkGraphics):
包括1位、2位、4位、8位和16位灰度图像,8位和16位索引图像,24位和48位真彩色图像。
⑹GIF(GraphicsInterchangeFormat):
任何1位到8位的可交换的图像。
⑺HDF(HierarchialDataFormat):
有8位、24位光栅图像数据集。
⑻ICO(WindowsIconresource):
有1位、4位、8位非压缩图像。
⑼CUR(WindowsCursorresource):
⑽XWD(XWindowsDump):
包括1位、8位Zpixmaps,XYBitmaps,XYPixmmmaps。
⑾RAS(SunRasterimage):
有1位bitmap、8位索引、24位真彩色和带有透明度的32位真彩色。
⑿PBM(PortableBitmap)。
⒀PGM(PortableGraymap)。
⒁PPM(PortablePixmap)。
2.MATLAB支持五种图像类型,即二值图像、索引图像、灰度图像、RGB图像和多帧图像阵列。
有关它们的定义见下表2.1。
表2.1 图像类型及其对应的像素数据类型
图像类型
Double数据
uint8和uint16数据
二值图像
图像为m×
n的整数矩阵,元素值范围[0,1]
索引图像
n的整数矩阵,元素值范围[0,p]
n的整数矩阵,元素值范围[0,p-1]
灰度图像
n的浮点数矩阵,元素值范围[0,1]
n的整数矩阵,元素值范围[0,255]或[0,65535]
RGB图像
n×
3的浮点数矩阵,元素值范围[0,1]
3的整数矩阵,元素值范围[0,255]或[0,65535]
其中,多帧图像阵列是由多帧图像组成的,每一帧图像可以为前四种图像中的一种,但组成一个多帧图像阵列的图像必须为同一种。
cat函数可以将具有相同尺寸的几个独立图像存成多帧文件。
对于多帧图像也可以从中提取单帧。
2.2.2 图像类型判断及转换1.在MATLAB中如果要判断一个图像文件的类型,可使用如下指令:
l
isbw:
若图像为二值图像,则返回真。
isgray:
若图像为灰度图像,则返回真。
isind:
若图像为索引图像,则返回真。
isrgb:
若图像为RGB图像,则返回真。
2.在MATLAB系统中,要将一个类型的图像文件转换成另一个类型的图像文件,只需将前一个文件的图像数据用imread读出,再用imwrite以适当的格式写到后一个图像文件中去即可。
另外,要将灰度图像I转换成RGB图像,可运用cat指令。
cat函数可以把一些单一的图像合并成图像序列。
在图像序列中每个图像需有相同的大小,如果是索引图像,色图也要一致。
此外,MATLAB还提供了若干函数,用于图像类型的转换。
这些函数有:
dither:
用抖动法(dithering)转换图像。
该函数通过颜色抖动(颜色抖动即改变边沿像素的颜色,使像素周围的颜色近似于原始图像的颜色,从而以空间分辨率来换取颜色分辨率)来增强输出图像的颜色分辨率。
该函数可以把RGB图像转换成索引图像或把灰度图像转换成二值图像。
gray2ind:
灰度图像或二值图像向索引图像转换。
grayslice:
设定阈值将灰度图像转换为索引图像。
im2bw:
设定阈值将灰度、索引、RGB图像转换为二值图像。
im2double:
将图像数组转换为double型。
im2uint8:
将图像数组转换为uint8型。
im2uint16:
将图像数组转换为uint16型。
该函数不支持二值图像序列的转换。
ind2gray:
索引图像向灰度图像转换。
ind2rgb:
索引图像向RGB图像转换。
mat2gray:
将一个数据矩阵转换为灰度图像。
rgb2gray:
RGB图像向灰度图像转换或将彩色色图转换成灰度色图。
rgb2ind:
RGB图像向索引图像转换。
包含三种不同方法:
均衡量化、最小值量化、色图映射。
im2java:
一般图像向Java图像转换。
label2rgb:
标志图像向RGB图像转换。
2.2.3 图像的查询及读写
在MATLAB中要查询一个图像文件的信息,只要用imfinfo指令加上文件及其完整路径名即可。
函数调用格式为:
info=imfinfo(filename,fmt)info=imfinfo(filename)参数fmt对应于所有图像处理工具箱中所有支持的图像文件格式。
MATLAB提供了两个重要的用于图像文件的读写的指令,分别是从图像文件中读取数据的imread,以及将数据写入到图像文件中的imwrite。
1.imread的常见调用格式为:
A=imread(filename,fmt)其作用是将文件名用字符串filename表示的,扩展名用fmt表示的图像文件中的数据读到矩阵A中。
如果filename所指的为灰度级图像,则A为一个二维矩阵;
如果filename所指的为RGB图像,则A为一个m×
3的三维矩阵。
Filename表示的文件名必须在MATLAB的搜索路径范围内,否则需指出其完整路径。
imread的其他几种重要的调用格式为:
[X,map]=imread(filename.fmt)[…]=imread(filename)[…]=imread(URL,…)[…]=imread(…,idx)
(CUR,ICOandTIFFonly)[…]=imread(…,’frames’,idx)
(GIFonly)[…]=imread(…,ref)
(HDFonly)[…]=imread(…,’BackgroundColor’,BG)
(PNGonly)[A,map,alpha]=imread(…)
(ICO,CURandPNGonly)上面一些参数的含义如下:
idx是指读取图标(cur、ico、tiff)文件中第idx个图像,默认值为1。
’frame’,idx是指读取gif文件中的图像帧,idx值可以是数量、向量或’all’。
ref是指整数值。
alpha是指透明度。
2.imwrite的常用调用格式为:
imwrite(A,filename,fmt)imwrite(X,map,filename,fmt)imwrite(…,filename)imwrite(…,Param1,Val1,Param2,Val2…)其中imwrite(…,Param1,Val1,Param2,Val2…)可以让用户控制HDF、JPEG、TIFF等一些图像文件格式的输出特性。
在MATLAB中,默认的保存类型是uint8。
由于PNG和TIFF格式支持16位的图像,所以保存这类图像时,保存类型就是uint16。
2.2.4 图像的显示显示图像的最基本的手段是使用image函数。
该函数还产生了图像对象的句柄,并允许对对象的属性进行设置。
此外,imagesc函数也具有image的功能,所不同的是imagesc函数还自动将输入数据比例化,以全色图的方式显示。
imshow函数比image和imagesc更常用,它能自动设置句柄图像的各种属性。
imshow可用于显示各类图像。
对于每类图像,调用方法如下:
imshowfilename:
显示图像文件。
imshow(BW):
显示二值图像,BW为黑白二值图像矩阵。
imshow(X,map):
显示索引图像,X为索引图像矩阵,map为色彩图示。
imshow(I):
显示灰度图像,I为二值图像矩阵。
imshow(RGB):
显示RGB图像,RGB为RGB图像矩阵。
imshow(I,[lowhigh]):
将非图像数据显示为图像,这需要考虑数据是否超出了所显示类型的最大允许范围,其中[lowhigh]用于定义待显示数据的范围。
有关图像显示的函数或其辅助函数,除了上述的以外,MATLAB还提供了一些用于进行图像的特殊显示的函数。
colorbar:
为图像的显示增加一个颜色条,这一用法对于了解被显示图像的灰度级别特别有用。
getimage:
获取图像数据。
immovie:
将多帧索引图像制作成连续图像格式。
其调用格式为:
mov=immovie(D,map)不过这种功能只对索引图像有效,其中D为多帧索引图像阵列,map为索引图像的对应色阶。
对于其他类型图像,则需要首先将其转换为索引图像。
montage:
多帧图像的一次显示。
它能将每一帧分别显示在一幅图像的不同区域,所有子区的图像都用同一个色彩条。
movie:
播放多帧连续图像。
subimage:
在一个图形区域内显示多个图像。
truesize:
调整图像显示的尺寸。
warp:
显示图像的纹理表面图。
前面提到的图像显示手段都只能在二维平面上显示,MATLAB6.5的一个强大功能是能将平面图像显示在空间三维曲面上。
这是由warp函数的纹理成图功能来实现的,该功能能通过双线性插值将平面图像投影到三维曲面上。
zoom:
将图像或二维图形进行放大或缩小显示。
zoom本身是是一个开关键,zoomon用于打开缩放模式,zoomoff用于关闭该模式,zoomin用于放大局部图像,zoomout用于缩小图像。
至于多个图像的显示,则可分为两个方面:
在不同的图形窗口显示不同的图像,可以用figure指令来实现;
在同一个图形窗口显示多图,可以用subplot来实现。
第三章 图像运算
3.1 图像的点运算
点运算将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应的输入像素点的值决定。
它常用于改变图像的灰度范围及分布,是图像数字化及图像显示的重要工具。
点运算因其作用性质,也被称为对比度增强、对比度拉伸或灰度变换。
在真正进行图像处理之前,有时可以用点运算来克服图像数字化设备的局限性。
点运算实际上是灰度到灰度的映射过程。
点运算不会改变图像内像素点之间的空间关系。
设输入图像为A(x,y),输出图像为B(x,y),则点运算可表示为:
B(x,y)=f[A(x,y)] (3-1)点运算可完全由灰度变换(gray-scaletransformation)函数s=f(r)决定,后者描述了输入灰度级与输出灰度级之间的映射关系。
图像的点运算分为线性点运算和非线性点运算两种。
3.1.1 线性点运算
线性点运算是指灰度变换函数f为线性函数时的运算。
如图3.1,当a>1时,输出图像对比度增大;
当a<1时,输出图像对比度降低;
当a=1,b=0时,输出图像就是输入图像的简单复制;
当a=1,b≠0时,仅使输出图像的灰度值上移或下移,其效果是使整个图像更亮或更暗。
如果a为负值,暗区域将变亮,亮区域将变暗,点运算完成了图像求补。
除了调节对比度以外,还有一种典型的线性点运算的应用就是灰度标准化。
设灰度图像为I[W][H],其中W表示图像宽度,H表示图像的高度,那么灰度图像的平均灰度和方
图3.1 线性函数差由如下计算公式得到:
平均灰度:
(3-2)方差:
(3-3)可以将其变换为具有相同均值和方差的变换函数(线性映射),其形式如下:
(3-4)其中σ0和u0为给定的变换参数。
灰度标准化可以用来生成一些常用的平均模型。
3.1.2 非线性点运算非线性点运算对应于非线性映射函数,典型的映射包括平方函数、对数函数、截取函数(窗口函数)、域值函数、多值量化函数等。
阈值化处理是最常用的一种非线性点运算,它的功能是选择一阈值,将图像二值化,然后使用生成的二进制图像进行图像分割及边缘跟踪等处理。
直方图均衡化也是一种非常常用的非线性点运算。
它是指将一个已知灰度分布的图像使用某种非线性灰度变换函数进行计算,使运算结果变成一幅具有均匀灰度分布的新图像。
经过直方图均衡化的点运算处理后,实际的直方图将呈现参差不齐的外形,这是由于灰度级的可能个数是限造成的。
在一些灰度级处可能没有像素,在另外一些灰度级处则像素很拥挤。
点运算的MATLAB实现:
I=imread('
rice.png'
);
rice=double(I);
rice2=rice*0.5+50;
J=uint8(rice2);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(J);
Matlab数字图像处理
简单程序:
---------------------------------------------------------------------------------------------------
A=imread('
F:
\Mat\work\test_1.jpg'
Hist=zeros(1,256);
Cdf=zeros(1,256);
i=1:
500
j=1:
Hist(A(i,j))=Hist(A(i,j))+1;
end;
Cdf
(1)=Hist
(1);
i=2:
256
Cdf(i)=Hist(i)+Cdf(i-1);
K=Cdf(A(i,j))*255/250000;
A(i,j)=double(K);
imshow(A,[0
255]);
A=ui
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 数字图像 处理 其中 以下 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)