应用MATLAB语言进行数字图像处理 应用MATLAB语言进行数字图像处理
来源:互联网 发布:长春 跑腿软件 编辑:程序博客网 时间:2024/05/22 20:37
宦海 (学号:011002028 物理科学与技术学院)
一、前言
MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。作为强大的科学计算平台,它几乎能够满足所有的计算需求。自MATLAB4.0问世以来,MATLAB语言就一直受到工程应用的各个领域的学者和工程师们的关注。2001年Mathworks公司又推出了强大的MATLAB升级版本MATLAB6.0,使其在符号运算和图形处理功能上得到了进一步完善。除此之外,新版本的MATLAB还增强了它的各种应用工具箱,使MATLAB的应用面越来越广,功能也越来越强大。因此MATLAB已成为最为普遍的计算工具之一。
MATLAB软件具有很强的开放性和适用性。在保持内核不便的情况下,MATLAB可以针对不同的应用学科推出相应的工具箱(toolbox)。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己的一席之地。此外,MATLAB还支持用户用自己编写的M文件(MATLAB的程序文件)组成自己的工具箱,极大的方便了用户的使用和维护。本文想就MATLAB中提供的图像处理工具箱(Image Processing Toolbox)的使用作一些实例方面的介绍。
二、MATLAB数字图像处理
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)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。下面用一些实例进行简单说明:
1、图像的读取
MATLAB中从图像文件中读取数据用函数imread(),这个函数的作用就是将图像文件的数据读入矩阵中,此外还可以用imfinfo()函数查看图像文件的信息(见例1)
%例1:图像数据及图像信息的读取
imfinfo e:\matlabwork\tuxiang\Girl.bmp
%读取图像信息
[A,M]=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
%图像数据的读取,将图像数据放入矩阵A中,颜色数据放入矩阵M中
imshow(A,M);title('原图像');
M(:,1)=0; %将颜色数据矩阵的一列置零
figure
imshow(A,M);title('改变颜色后的图像')
图1 图像数据的读取
MATLAB还提供了将数据写入一个文件的函数imwrite以及不同类型文件相互转换的函数,在此就不一一赘述了,可以参考MATLAB 的帮助文件。
2、灰度直方图及直方图均衡化
灰度直方图用于显示图像的灰度值分布情况,是数字图像处理中最简单和最实用的工具。MATLAB中提供了专门绘制直方图的函数imhist()。用它可以很简单的绘制出一幅图像的灰度直方图(见例2)。
%例2:直方图的显示
imshow('e:\matlabwork\tuxiang\Girl.bmp');title('原图像')
%显示原图像
A=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
figure;imhist(A),title('对应直方图')
图2 直方图的显示
在图像处理中,点运算是简单而又重要的一种技术,其中最常用的一种应用就是直方图的均衡化(见例3)。
%例3:直方图均衡化
imshow('e:\matlabwork\tuxiang\Girl2.bmp');title('原图像')
I=imread('e:\matlabwork\tuxiang\Girl2.bmp','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 直方图均衡化
3、图像的代数运算
代数运算是指对两幅输入图像进行点对点的加、减、乘和除计算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效地降低加性(additive)随机噪声的影响(见例4)
%例4:图象加噪声再通过多次相加求平均的方法祛除噪声
[I,M]=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
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(128);
for i=1:100
J=imnoise(I,'salt & pepper',0.005);
J1=im2double(J);
K=K+J1;
end
K=K/100; %求图像的平均
figure;imshow(K),title('相加求平均后的图象');
图4 多次平均去噪声
4、图像滤波处理
在数字图像处理中,常常会遇到图像中混杂有许多的噪声。因此,在进行图像处理中,有时要先进行祛除噪声的工作。最常用的祛除噪声的方法是用滤波器进行滤波处理。MATLAB的图像处理工具箱里也设计了许多的滤波器。如均值滤波器、中值滤波器、维纳滤波器等。用户可以很方便的运用一些函数完成数字滤波工作。(见例5)。
%例5:用滤波器祛除图象噪声(分别用均值滤波,中值滤波,及维纳滤波器祛除加入高斯噪声的图象)
I=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
J=imnoise(I,'gaussian',0,0.002); %加入高斯噪声
%进行均值滤波
h=fspecial('average',3);
I2=uint8(round(filter2(h,I)));
%进行中值滤波
I3=medfilt2(J,[3,3]);
%进行维纳滤波
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 滤波器祛除图像噪声
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 近似冲击函数的傅立叶变换
6、图像压缩
在图像的变换和压缩中,常常用到离散余弦变换(DCT)。DCT具有能使图像的最重要的信息集中在DCT的几个系数上的性能。正是基于此,DCT通常应用于图像的压缩。(见例7)
%例7:DCT变换用于图象的压缩实例
I=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
I=im2double(I);
T=dctmtx(8);
B=blkproc(I,[8,8],'P1*x*P2',T,T');
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);
imshow(I),title('原图象');
figure,imshow(I2),title('变换后的图象');
图7 DCT变换用于图像压缩
可以看出,尽管由于85%的DCT系数被抛弃而使恢复后的图像质量有所降低,图像内容仍能清晰可辨,达到了图像压缩的目的。
三、结语
当然,MATLAB中图像处理工具箱中所提供的图像处理功能远不止我上述的几种,如图像的几何运算,滤波器的设计,二值图像的处理(包括形态学的操作,特征测量等)以及区域处理等都可以在MATLAB的图像处理工具箱中找到处理的方法。我们可以通过MATLAB提供的强大的帮助功能中得到他们的用法。通过编写MATLAB的程序文件(M文件)可以建立自己的图像处理工具箱。
可以说,MATLAB为数字图像处理提供了一种简单、快捷而又有效的方法,大大提高了数字图像处理的效率及效果。只要稍有编程基础,就可以掌握MATLAB程序的编写,并且应用到图像处理的各个方向。
宦海 (学号:011002028 物理科学与技术学院)
一、前言
MATLAB是集数值计算,符号运算及图形处理等强大功能于一体的科学计算语言。作为强大的科学计算平台,它几乎能够满足所有的计算需求。自MATLAB4.0问世以来,MATLAB语言就一直受到工程应用的各个领域的学者和工程师们的关注。2001年Mathworks公司又推出了强大的MATLAB升级版本MATLAB6.0,使其在符号运算和图形处理功能上得到了进一步完善。除此之外,新版本的MATLAB还增强了它的各种应用工具箱,使MATLAB的应用面越来越广,功能也越来越强大。因此MATLAB已成为最为普遍的计算工具之一。
MATLAB软件具有很强的开放性和适用性。在保持内核不便的情况下,MATLAB可以针对不同的应用学科推出相应的工具箱(toolbox)。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、概率统计、信号处理、图像处理和物理仿真等,都在工具箱(Toolbox)家族中有自己的一席之地。此外,MATLAB还支持用户用自己编写的M文件(MATLAB的程序文件)组成自己的工具箱,极大的方便了用户的使用和维护。本文想就MATLAB中提供的图像处理工具箱(Image Processing Toolbox)的使用作一些实例方面的介绍。
二、MATLAB数字图像处理
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)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。下面用一些实例进行简单说明:
1、图像的读取
MATLAB中从图像文件中读取数据用函数imread(),这个函数的作用就是将图像文件的数据读入矩阵中,此外还可以用imfinfo()函数查看图像文件的信息(见例1)
%例1:图像数据及图像信息的读取
imfinfo e:\matlabwork\tuxiang\Girl.bmp
%读取图像信息
[A,M]=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
%图像数据的读取,将图像数据放入矩阵A中,颜色数据放入矩阵M中
imshow(A,M);title('原图像');
M(:,1)=0; %将颜色数据矩阵的一列置零
figure
imshow(A,M);title('改变颜色后的图像')
图1 图像数据的读取
MATLAB还提供了将数据写入一个文件的函数imwrite以及不同类型文件相互转换的函数,在此就不一一赘述了,可以参考MATLAB 的帮助文件。
2、灰度直方图及直方图均衡化
灰度直方图用于显示图像的灰度值分布情况,是数字图像处理中最简单和最实用的工具。MATLAB中提供了专门绘制直方图的函数imhist()。用它可以很简单的绘制出一幅图像的灰度直方图(见例2)。
%例2:直方图的显示
imshow('e:\matlabwork\tuxiang\Girl.bmp');title('原图像')
%显示原图像
A=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
figure;imhist(A),title('对应直方图')
图2 直方图的显示
在图像处理中,点运算是简单而又重要的一种技术,其中最常用的一种应用就是直方图的均衡化(见例3)。
%例3:直方图均衡化
imshow('e:\matlabwork\tuxiang\Girl2.bmp');title('原图像')
I=imread('e:\matlabwork\tuxiang\Girl2.bmp','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 直方图均衡化
3、图像的代数运算
代数运算是指对两幅输入图像进行点对点的加、减、乘和除计算而得到输出图像的运算。对于相加和相乘的情形,可能不止有两幅图像参加运算。图像相加的一个重要应用是对同一场景的多幅图像求平均值。这点被经常用来有效地降低加性(additive)随机噪声的影响(见例4)
%例4:图象加噪声再通过多次相加求平均的方法祛除噪声
[I,M]=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
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(128);
for i=1:100
J=imnoise(I,'salt & pepper',0.005);
J1=im2double(J);
K=K+J1;
end
K=K/100; %求图像的平均
figure;imshow(K),title('相加求平均后的图象');
图4 多次平均去噪声
4、图像滤波处理
在数字图像处理中,常常会遇到图像中混杂有许多的噪声。因此,在进行图像处理中,有时要先进行祛除噪声的工作。最常用的祛除噪声的方法是用滤波器进行滤波处理。MATLAB的图像处理工具箱里也设计了许多的滤波器。如均值滤波器、中值滤波器、维纳滤波器等。用户可以很方便的运用一些函数完成数字滤波工作。(见例5)。
%例5:用滤波器祛除图象噪声(分别用均值滤波,中值滤波,及维纳滤波器祛除加入高斯噪声的图象)
I=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
J=imnoise(I,'gaussian',0,0.002); %加入高斯噪声
%进行均值滤波
h=fspecial('average',3);
I2=uint8(round(filter2(h,I)));
%进行中值滤波
I3=medfilt2(J,[3,3]);
%进行维纳滤波
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 滤波器祛除图像噪声
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 近似冲击函数的傅立叶变换
6、图像压缩
在图像的变换和压缩中,常常用到离散余弦变换(DCT)。DCT具有能使图像的最重要的信息集中在DCT的几个系数上的性能。正是基于此,DCT通常应用于图像的压缩。(见例7)
%例7:DCT变换用于图象的压缩实例
I=imread('e:\matlabwork\tuxiang\Girl.bmp','bmp');
I=im2double(I);
T=dctmtx(8);
B=blkproc(I,[8,8],'P1*x*P2',T,T');
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);
imshow(I),title('原图象');
figure,imshow(I2),title('变换后的图象');
图7 DCT变换用于图像压缩
可以看出,尽管由于85%的DCT系数被抛弃而使恢复后的图像质量有所降低,图像内容仍能清晰可辨,达到了图像压缩的目的。
三、结语
当然,MATLAB中图像处理工具箱中所提供的图像处理功能远不止我上述的几种,如图像的几何运算,滤波器的设计,二值图像的处理(包括形态学的操作,特征测量等)以及区域处理等都可以在MATLAB的图像处理工具箱中找到处理的方法。我们可以通过MATLAB提供的强大的帮助功能中得到他们的用法。通过编写MATLAB的程序文件(M文件)可以建立自己的图像处理工具箱。
可以说,MATLAB为数字图像处理提供了一种简单、快捷而又有效的方法,大大提高了数字图像处理的效率及效果。只要稍有编程基础,就可以掌握MATLAB程序的编写,并且应用到图像处理的各个方向。
- 应用MATLAB语言进行数字图像处理 应用MATLAB语言进行数字图像处理
- Matlab在数字图像处理中的应用
- 浅谈用C语言进行数字图像处理
- Matlab数字图像处理基础
- 数字图像处理(Matlab)读书笔记
- matlab数字图像处理(1)
- matlab数字图像处理(2)
- 应用MATLAB语言处理数字信号与数字图像http://www.netyi.net/training/8e95b0fe-c66c-4d89-9851-f8993d80c9b5
- 浅谈Linux下用C语言进行数字图像处理
- 初学matlab和数字图像处理
- 数字图像处理--几个MATLAB函数
- Matlab数字图像处理:DCT变换
- 数字图像处理MATLAB命令汇总
- 数字图像处理matlab基础操作
- 数字图像处理matlab基本命令
- Matlab数字图像处理基础【1】
- Matlab数字图像处理基础【2】
- Matlab数字图像处理基础【3】
- FileUtils介绍(转载)
- 重写Ckeditor的save按钮方法
- DirectFB 源码解读之字体-1
- 两种方式 让客户端 缓存失效
- jvm fastdebug
- 应用MATLAB语言进行数字图像处理 应用MATLAB语言进行数字图像处理
- log_archive_dest与log_archive_dest_n区别
- Linux 中 sed 和 awk 命令常用例子
- What's new in OpenStack Grizzly ?
- C/C++关键字static,const,inline,define,typedef
- 2013.7.7日本语能力考试报考信息
- ecshop 2.7.3 修改
- jax-ws 例子
- 2013年腾讯编程马拉松初赛第0场(3月20日)解题参考