matlab12.docx
- 文档编号:3837739
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:59
- 大小:59.61KB
matlab12.docx
《matlab12.docx》由会员分享,可在线阅读,更多相关《matlab12.docx(59页珍藏版)》请在冰豆网上搜索。
matlab12
图像存储
在Matlab中,图像是以矩阵形式存储的,对图像的操作也就是对矩阵的操作。
例:
图像名用Image表示,则Image表示一个图像矩阵,i代表矩阵的行,j代表矩阵的列。
Image(i,j)代表图像在点(i,j)的灰度值。
•图像的显示图像分为•有格式图像:
如.bmp格式;.tif格式;…•无格式图像:
如.img(以二进制格式存储)不同的格式显示方式不同。
1、有格式图像显示
•对有格式图像,可用imread()函数读入,用imshow()函数显示。
例:
I=imread(‘d:
\image\x.bmp‘);
或I=imread(’d:
\image\x’,’bmp’);
路径格式
figure
(1);
imshow(I);%显示图像I
2、无格式图像显示(以二进制格式存储)•首先要用fopen()函数打开某一路径下的文件,然后用fread()函数读到一个变量里,该变量为矩阵变量。
•例:
fid=fopen(‘d:
\img\lena.img’,’r’);%fid为文件句柄data=(fread(fid,[256,256],‘uint8’))’;figure
(1);images(data,[255]);%图像为256级灰度colormap(gray);%显示灰度图像axisimage%对图像加坐标。
•若不能直接对data进行处理,可以进行转换后在处理;转换语句:
data=uint8(data)
3、同屏显示多个图像
•可用subplot(m,n)将图形窗分为m*n个子窗口,然后取第一、第二…子窗口显示不同的图像,实现同屏显示多个图像。
例如:
•figure
(1);%取2×2个子屏中的第一个子屏
subplot(2,2,1);……%显示第一个图像imshow(I1);……
%取2×2个子屏中的第四个子屏subplot(2,2,4);%显示第四个图像
imshow(I4);
图像处理中常用的函数:
Size()函数•Zeros()函数•Fft2(),ifft2()函数•Imhist()函数•Histeq()函数•Imrotate()函数•Imnoise()函数•Edge()函数•Title()函数•Xlable(),Ylable()函数
Size()函数获取图像矩阵大小。
一般是应用于有格式图像,因无格式(二进制)图像的大小在读入时已知。
例:
I=imread(‘d:
\img\radar’,’bmp’);%读入图像[x,y]=size(I);%获取图像大小得到x,y的值,该图像大小就是X×Y。
Zeros()函数零矩阵函数。
例:
I=zeros(100,100);%I为100×100的零矩阵,矩阵%中元素全为零。
Imshow(I);%显示一个100×100的黑方块。
例如作业题1,生成一个外边黑中间一块是白的图像,可以先生成一个全黑的图像,然后在中间作一个双重循环,赋象素值为255或1。
I1=zeros(128,128);%生成一个128×128的全黑图像forI=38:
1:
90forj=58:
1:
70I1(i,j)=255;%或I1(i,j)=1;endendimshow(I1);%I1即为所求图形。
•fft2(),ifft2()函数
fft2()函数为二维快速傅立叶变换函数;
ifft2()函数为二维逆快速傅立叶变换函数。
对一幅图像进行傅立叶变换后,得到它的频谱。
例:
I2=fft2(I1);%对图像I1进行二维快速傅立叶变换
Imshow(I2);%显示频谱图。
I3=ifft2(I2);%对图像I2进行二维逆快速傅立
%叶变换,得到原图像
•Imhist()函数
图像直方图函数。
例:
imhist(I);%显示图像I的直方图;
•Histeq()函数
直方图均衡化函数。
例:
I1=histeq(I);%对图像I进行直方图均衡化。
Imshow(I1);%显示均衡化后的图像I
Imrotate()函数:
旋转图像函数;格式:
J=imrotate(I,angle,method)I:
被旋转图像J:
旋转后的图像angle:
旋转角度method:
可为'nearest‘、'bilinear‘、'bicubic'例:
I=imread(‘ic.tif’);%读入图像ic.tifJ=imrotate(I,45,’bilinear’);%对图像I旋转45度imshow(I);%显示原图Ifigure,imshow(J);%显示旋转后的图像J•Imnoise()函数:
给图像增加噪声。
格式:
J=imnoise(I,’噪声类型’,参数);I:
待加噪声图像;噪声类型:
高斯噪声、盐噪声等;参数:
噪声密度(0--1);J:
加入噪声的图像。
例:
J=imnoise(I,‘salt&pepper’,0.02);%给图象I增加盐噪声
Edge()函数边缘检测函数。
J=edge(I,‘检测算子‘);%J是对图像I用某算子%进行边缘检测后的边缘图;%J是二值图像,即黑、白二色。
例:
J=edge(I,’Roberts’);%用Roberts算子对图像I进行边缘检测imshow(J);%显示边缘图
•Title()函数给图像加标题;例:
title(‘图像变换结果图‘);%图像标题为“图像变换结果图”•Xlable(),Ylable()函数对图像的x轴、y轴加标注。
例:
Xlable(‘时间t’);%x轴代表’时间t’Y1able(‘函数f(t)’);%y轴代表函数f(t)
1月5日
matlab图像处理函数代码(转)
1、图像的读取
MATLAB中从图像文件中读取数据用函数imread(),这个函数的作用就是将图像文件的数据读入矩阵中,此外还可以用imfinfo()函数查看图像文件的信息(见例1)
%例1:
图像数据及图像信息的读取imfinfoc:
\lilizong\boat.bmp
%读取图像信息[A,M]=imread('c:
\lilizong\boat.bmp');%图像数据的读取,将图像数据放入矩阵A中,颜色数据放入矩阵M中imshow(A,M);title('原图像');
M(:
1)=0; %将颜色数据矩阵的一列置零
Figureimshow(A,M);title('改变颜色后的图像')
MATLAB还提供了将数据写入一个文件的函数imwrite以及不同类型文件相互转换的函数,可以参考MATLAB的帮助文件。
2、灰度直方图及直方图均衡化
灰度直方图用于显示图像的灰度值分布情况,是数字图像处理中最简单和最实用的工具。
MATLAB中提供了专门绘制直方图的函数imhist()。
用它可以很简单的绘制出一幅图像的灰度直方图(见例2)。
%例2:
直方图的显示
imshow('c:
\lilizong\boat.bmp');title('原图像')
%显示原图像
A=imread('e:
\matlabwork\tuxiang\Girl.bmp','bmp');
figure;imhist(A),title('对应直方图')
在图像处理中,点运算是简单而又重要的一种技术,其中最常用的一种应用就是直方图的均衡化(见例3)。
%例3:
直方图均衡化
imshow('c:
\lilizong\boat1.bmp');title('原图像')
I=imread('c:
\lilizong\boat1.bmp');
figure;imhist(I),title('对应直方图')
%从得到的直方图可以看出,图像的对比度很低,灰度级集中在70-160范围内,如果只取
%这个范围内的灰度,并扩展到[0,255],则会明显增强图像对比度
J=imadjust(I,[70/255160/255],[]);
figure;imshow(J),title('经灰度级调整后的图')
figure;imhist(J),title('灰度级调整后的直方图')
%MATLAB还提供了histeq函数(自动直方图均衡化)
K=histeq(I);
figure;imshow(K),title('经直方图均衡化后的图')
figure;imhist(K),title('直方图均衡化后的直方图')
3、图像的代数运算
代数运算是指对两幅输入图像进行点对点的加、减、乘和除计算而得到输出图像的运算。
对于相加和相乘的情形,可能不止有两幅图像参加运算。
图像相加的一个重要应用是对同一场景的多幅图像求平均值。
这点被经常用来有效地降低加性(additive)随机噪声的影响(见例4)
%例4:
图象加噪声再通过多次相加求平均的方法祛除噪声
[I,M]=imread('c:
\boat.png');J=imnoise(I,'salt&pepper',0.005);
subplot(1,2,1),imshow(I,M),title('原图象');subplot(1,2,2),imshow(J,M),title('加噪声后图象');K=zeros(256);fori=1:
100
J=imnoise(I,'salt&pepper',0.005);J1=im2double(J);% K=K+J1;K=K+J1;
end
K=K/100;
figure,imshow(K),title('相加求平均后的图象');
4、图像滤波处理
在数字图像处理中,常常会遇到图像中混杂有许多的噪声。
因此,在进行图像处理中,有时要先进行祛除噪声的工作。
最常用的祛除噪声的方法是用滤波器进行滤波处理。
MATLAB的图像处理工具箱里也设计了许多的滤波器。
如均值滤波器、中值滤波器、维纳滤波器等。
用户可以很方便的运用一些函数完成数字滤波工作。
(见例5)。
%例5:
用滤波器祛除图象噪声(分别用均值滤波,中值滤波,及维纳滤波器祛除加入高斯噪声的图象)
I=imread('C:
\boat.png');
J=imnoise(I,'gaussian',0,0.002);%加入高斯噪声
%进行均值滤波
h=fspecial('average',3); %fspecial函数用于产生预定义滤波器
I2=uint8(round(filter2(h,I))); %filter2函数用于图像滤波,此处h是滤波参数(均值),I是要处理的图像
%进行中值滤波
I3=medfilt2(J,[3,3]); %medfilt2函数用于图像的中值滤波
%进行维纳滤波
I4=wiener2(J,[3,3]);%进行一次维纳滤波
I5=wiener2(I4,[3,3]);%进行二次维纳滤波subplot(2,3,1),imshow(I),title('原图象')
subplot(2,3,2),imshow(J),title('加噪声图象')subplot(2,3,3),imshow(I2),title('均值滤波后图象')subplot(2,3,4),imshow(I3),title('中值滤波后图象')subplot(2,3,5),imshow(I4),title('维纳滤波后图象')subplot(2,3,6),imshow(I5),title('两次维纳滤波后图象')
5、傅立叶变换
傅立叶变换是线性系统分析的一个有力的工具。
它在图像处理,特别是在图像增强、复原和压缩中,扮演着非常重要的作用。
实际中一般采用一种叫做快速傅立叶变换(FFT)的方法,MATLAB中的fft2指令用于得到二维FFT的结果,ifft2指令用于得到二维FFT逆变换的结果。
(见例6)
%例6:
近似冲击函数的二维快速傅立叶变换(FFT)
x=1:
99;y=1:
99;
[X,Y]=meshgrid(x,y);
A=zeros(99,99);
A(49:
51,49:
51)=1;
B=fft2(A);
subplot(1,2,1),imshow(A),xlabel('空域图象');
subplot(1,2,2),imshow(B),xlabel('时域图象');
figure
subplot(1,2,1),mesh(X,Y,A),xlabel('空域'),gridon;
subplot(1,2,2),mesh(X,Y,abs(B)),xlabel('时域'),gridon;
6、图像压缩
在图像的变换和压缩中,常常用到离散余弦变换(DCT)。
DCT具有能使图像的最重要的信息集中在DCT的几个系数上的性能。
正是基于此,DCT通常应用于图像的压缩。
(见例7)
JPEG图像压缩算法:
输入图像被分成8*8或16*16的小块,然后对每一小块进行二维DCT(离散余弦变换)变换,变换后的系数量化、编码并传输;
JPEG文件解码量化了的DCT系数,对每一块计算二维逆DCT变换,最后把结果块拼接成一个完整的图像。
在DCT变换后舍弃那些不严重影响图像重构的接近0的系数。
DCT变换的特点是变换后图像大部分能量集中在左上角,因为左上放映原图像低频部分数据,右下反映原图像高频部分数据。
而图像的能量通常集中在低频部分。
%例7:
DCT变换用于图象的压缩实例
I=imread('d:
\lilizong\test.jpg');
%该图片在安装matlab的目录中找,原图为灰度图象
I=im2double(I);%图像存储类型转换
T=dctmtx(8);%离散余弦变换矩阵
B=blkproc(I,[88],'P1*x*P2',T,T');
%对原图像进行DCT变换
mask=[11110000
11100000
11000000
10000000
00000000
00000000
00000000
00000000];
B2=blkproc(B,[88],'P1.*x',mask);
%数据压缩,丢弃右下角高频数据
I2=blkproc(B2,[88],'P1*x*P2',T',T);
%进行DCT反变换,得到压缩后的图像
imshow(I)
title('原始图像')
figure;
imshow(I2)
title('压缩后的图像')
应用到的函数:
I=imread('图像文件名'):
读取图像数据,保存在矩阵I中;
imshow(I):
显示灰度图像I,其他用法见matlab帮助;
I2=im2double(I1):
把图像数组I1转换成double精度类型;
D=dctmtx(n):
二维离散余弦变换函数,返回n*n离散余弦变换矩阵。
一个n*n的变换矩阵T被定义成:
Tpq=1/sqrt(n)
当p=0,0<=q<=M-1;
Tpq=sqrt(2/n)*cos[pi*(2q+1)*p/2n]
当1<=p<=M-1,0<=q<=M-1。
B=blkproc(A,[mn],fun,P1,P2...):
块操作函数。
对图像A的每个不同的m*n块应用fun函数,P1,P2等为fun函数参数。
在图像边缘用0来扩展;只有当fun的返回矩阵是m*n矩阵时,B和A的大小才相同。
figure:
强制生成一个新的个绘图窗口;
可以看出,尽管由于85%的DCT系数被抛弃而使恢复后的图像质量有所降低,图像内容仍能清晰可辨,达到了图像压缩的目的。
Matlab图像处理工具箱
缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点
数,所需存储量很大;MATLAB还支持另一种类型无符号整型(uint8),即图像矩
阵中每个数据占用1个字节。
在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。
另外,uint8
与double两种类型数据的值域不同,编程需注意值域转换。
从uint8到double的转换
---------------------------------------------
图像类型 MATLAB语句
---------------------------------------------
索引色 B=double(A)+1
索引色或真彩色B=double(A)/255
二值图像 B=double(A)
---------------------------------------------
从double到uint8的转换
---------------------------------------------
图像类型 MATLAB语句
---------------------------------------------
索引色 B=uint8(round(A-1))
索引色或真彩色B=uint8(round(A*255))
二值图像 B=logical(uint8(round(A)))
---------------------------------------------
2.图像处理工具箱所支持的图像类型
2.1真彩色图像
R、G、B三个分量表示一个像素的颜色。
如果要读取图像中(100,50)处的像素值,
可查看三元数据(100,50,1:
3)。
真彩色图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的存储方法是用无
符号整型存储,亮度值范围[0,255]
2.2索引色图像
包含两个结构,一个是调色板,另一个是图像数据矩阵。
调色板是一个有3列和若干行
的色彩映象矩阵,矩阵每行代表一种颜色,3列分别代表红、绿、蓝色强度的双精度数。
注意:
MATLAB中调色板色彩强度[0,1],0代表最暗,1代表最亮。
常用颜色的RGB值
--------------------------------------------
颜色RGB 颜色RGB
--------------------------------------------
黑 001 洋红101
白 111 青蓝011
红 100 天蓝0.6701
绿 010 橘黄10.50
蓝 001 深红0.500
黄 110 灰0.50.50.5
--------------------------------------------
产生标准调色板的函数
-------------------------------------------------
函数名 调色板
-------------------------------------------------
Hsv 色彩饱和度,以红色开始,并以红色结束
Hot 黑色-红色-黄色-白色
Cool 青蓝和洋红的色度
Pink 粉红的色度
Gray 线型灰度
Bone 带蓝色的灰度
Jet Hsv的一种变形,以蓝色开始,以蓝色结束
Copper线型铜色度
Prim 三棱镜,交替为红、橘黄、黄、绿和天蓝
Flag 交替为红、白、蓝和黑
--------------------------------------------------
缺省情况下,调用上述函数灰产生一个64×3的调色板,用户也可指定调色板大小。
索引色图像数据也有double和uint8两种类型。
当图像数据为double类型时,值1代表调色板中的第1行,值2代表第2行……
如果图像数据为uint8类型,0代表调色板的第一行,,值1代表第2行……
2.3灰度图像
存储灰度图像只需要一个数据矩阵。
数据类型可以是double,[0,1];也可以是uint8,[0,255]
2.4二值图像
二值图像只需一个数据矩阵,每个像素只有两个灰度值,可以采用uint8或double类型存储。
MATLAB工具箱中以二值图像作为返回结果的函数都使用uint8类型。
2.5图像序列
MATLAB工具箱支持将多帧图像连接成图像序列。
图像序列是一个4维数组,图像帧的序号在图像的长、宽、颜色深度之后构成第4维。
分散的图像也可以合并成图像序列,前提是各图像尺寸必须相同,若是索引色图像,
调色板也必须相同。
可参考cat()函数A=cat(4,A1,A2,A3,A4,A5)
3.MATLAB图像类型转换
图像类型转换函数
---------------------------------------------------------------------------
函数名 函数功能
---------------------------------------------------------------------------
dither 图像抖动,将灰度图变成二值图,或将真彩色图像抖动成索引色图像
gray2ind将灰度图像转换成索引图像
grayslice通过设定阈值将灰度图像转换成索引色图像
im2bw 通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图
ind2gray将索引色图像转换成灰度图像
ind2rgb 将索引色图像转换成真彩色图像
mat2gray将一个数据矩阵转换成一副灰度图
rgb2gray将一副真彩色图像转换成灰度图像
rgb2ind 将真彩色图像转换成索引色图像
----------------------------------------------------------------------------
4.图像文件的读写和查询
4.1图形图像文件的读取
利用函数imread()可完成图形图像文件的读取,语法:
A=imread(filename,fmt)
[X,map]=imread(filename,fmt)
[...]=imread(filename)
[...]=imread(filename,idx)(只对TIF格式的文件)
[...]=imread(filename,ref)(只对HDF格式的文件)
通常,读取的大多数图像均为8bit,当这些图像加载到内存中时,Matlab就将其存放在类uint8中。
此为Matlab还支持16bit的PNG和TIF图像,当读取这类文件时,Matlab就将其存贮在uint16中。
注意:
对于索引图像,即使图像阵列的本身为类uint8或类uint16,imread函数仍将颜色映象表读取并存贮到一个双精度的浮点类型的阵列中。
4.2图形图像文件的写入
使用imwrite函数,语法如下:
imwrite(A,filename,fmt)
imwrite(X,map,filename,fmt)
imwrite(...,filename)
imwrite(...,para
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab12