| 查看: 6994 | 回复: 19 | ||||||||||||
| 【奖励】 本帖被评价18次,作者wayping增加金币 13.8 个 | ||||||||||||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | ||||||||||||
[资源]
分享matlab的一些代码(入门贴)
|
||||||||||||
|
小可在使用matlab的过程中,有些常用的程序经常反复输入,不甚其烦。相信有的童鞋也遇到过相似的情况,所以总结了一下,以飨各位。属于入门贴,欢迎高手交流~~ 1、图像的读取 MATLAB中从图像文件中读取数据用函数imread(),这个函数的作用就是将图像文件的数据读入矩阵中,此外还可以用imfinfo()函数查看图像文件的信息(见例1) 2、灰度直方图及直方图均衡化 灰度直方图用于显示图像的灰度值分布情况,是数字图像处理中最简单和最实用的工具。MATLAB中提供了专门绘制直方图的函数imhist()。用它可以很简单的绘制出一幅图像的灰度直方图(见例2)。 在图像处理中,点运算是简单而又重要的一种技术,其中最常用的一种应用就是直方图的均衡化(见例3)。 3、图像的代数运算 代数运算是指对两幅输入图像进行点对点的加、减、乘和除计算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效地降低加性(additive)随机噪声的影响(见例4) 4、图像滤波处理 在数字图像处理中,常常会遇到图像中混杂有许多的噪声。因此,在进行图像处理中,有时要先进行祛除噪声的工作。最常用的祛除噪声的方法是用滤波器进行滤波处理。MATLAB的图像处理工具箱里也设计了许多的滤波器。如均值滤波器、中值滤波器、维纳滤波器等。用户可以很方便的运用一些函数完成数字滤波工作。(见例5)。 5、傅立叶变换 傅立叶变换是线性系统分析的一个有力的工具。它在图像处理,特别是在图像增强、复原和压缩中,扮演着非常重要的作用。实际中一般采用一种叫做快速傅立叶变换(FFT)的方法,MATLAB中的fft2指令用于得到二维FFT的结果,ifft2指令用于得到二维FFT逆变换的结果。(见例6) 6、图像压缩 在图像的变换和压缩中,常常用到离散余弦变换(DCT)。DCT具有能使图像的最重要的信息集中在DCT的几个系数上的性能。正是基于此,DCT通常应用于图像的压缩。(见例7) 1、图像的读取 MATLAB中从图像文件中读取数据用函数imread(),这个函数的作用就是将图像文件的数据读入矩阵中,此外还可以用imfinfo()函数查看图像文件的信息(见例1) %例1:图像数据及图像信息的读取 imfinfo c:\lilizong\boat.bmp %读取图像信息 [A,M]=imread('c:\lilizong\boat.bmp'); %图像数据的读取,将图像数据放入矩阵A中,颜色数据放入矩阵M中 imshow(A,M);title('原图像'); M(:,1)=0; %将颜色数据矩阵的一列置零 figure imshow(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/255 160/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); for i=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('空域'),grid on; subplot(1,2,2),mesh(X,Y,abs(B)),xlabel('时域'),grid on; 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,[8 8],'P1*x*P2',T,T'); %对原图像进行DCT变换 mask=[1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]; B2=blkproc(B,[8 8],'P1.*x',mask); %数据压缩,丢弃右下角高频数据 I2=blkproc(B2,[8 8],'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,[m n],fun,P1,P2...) :块操作函数。对图像A的每个不同的m*n块应用fun函数,P1,P2等为fun函数参数。在图像边缘用0来扩展;只有当fun的返回矩阵是m*n矩阵时,B和A的大小才相同。 figure:强制生成一个新的个绘图窗口; 可以看出,尽管由于85%的DCT系数被抛弃而使恢复后的图像质量有所降低,图像内容仍能清晰可辨,达到了图像压缩的目的。 发表于 @ 2007年04月06日 14:25:00|评论(3)|编辑 新一篇: 部分matlab代码 | 旧一篇: MATLAB图像处理命令 logerer 发表于2008年1月6日 20:43:43 IP:举报 不错不错,感谢博主。图片也发上来就更好了。为什么 (378209553@QQ.com) 发表于2008年5月28日 0:48:09 IP:举报 imshow('C:\Documents and Settings\系统维护\桌面\a.jpg');title('原图像') I=imread('C:\Documents and Settings\系统维护\桌面\a.jpg'); figure;imhist(I),title('对应直方图') %从得到的直方图可以看出,图像的对比度很低,灰度级集中在70-160范围内,如果只取 %这个范围内的灰度,并扩展到[0,255],则会明显增强图像对比度 J=imadjust(I,[70/255 160/255],[]); figure;imshow(J),title('经灰度级调整后的图') figure;imhist(J),title('灰度级调整后的直方图') %MATLAB还提供了histeq函数(自动直方图均衡化) K=histeq(I); figure;imshow(K),title('经直方图均衡化后的图') figure;imhist(K),title('直方图均衡化后的直方图') ??? Error using ==> iptcheckinput Function IMHIST expected its first input, I or X, to be two-dimensional. Error in ==> imhist>parse_inputs at 270 iptcheckinput(a, {'double','uint8','logical','uint16','int16','single'}, ... Error in ==> imhist at 57 [a, n, isScaled, top, map] = parse_inputs(varargin{:}); |
» 收录本帖的淘帖专辑推荐
matlab学习专辑 | 模拟与仿真 | matlab | matlab |
科研软件资料 | 数理基础收集 | 数字图像处理 | 科研相关 |
氧化锌的例子 | source |
» 猜你喜欢
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
孩子确诊有中度注意力缺陷
已经有12人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
» 本主题相关价值贴推荐,对您同样有帮助:
matlab语言改写成C语言
已经有18人回复
求助大侠帮忙,有关matlab模拟数据
已经有29人回复
如何用MATLAB 实现化学反应方程式(写程序代码)?
已经有20人回复
【致H兄】数列题的万能多项式拟合求法
已经有28人回复
同样的MATLAB程序,为何在别人的电脑上运行不了
已经有21人回复
3楼2012-06-03 09:50:33
2楼2012-06-03 01:53:56
5楼2012-10-02 22:07:22
6楼2012-11-14 09:31:01














回复此楼
