数字灰度图像的基本运算处理 正文讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1前言
介绍一种用可视化数值计算软件MATLAB实现的数字图像处理系统平台,系统使用MATLAB中提供的GUI设计系统可视化的用户界面,下拉式的菜单方便用户选择对图像的处理。
用户可以随意选择要处理的图片。
但是该系统只支持灰度图片,可实现内容主要包括灰度图像的代数运算、几何运算。
基于数字图像处理的一些基本原理,利用MATLAB 设计程序进行对灰度图像的处理。
有部分处理运算有很多种方法,我选择了最简单、最明了的方法。
数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。
理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。
二维图像进行均匀采样,就可以得到一幅离散化成M×N样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。
随着计算机的发展,图像处理技术在许多领域得到了广泛应用,用于图像处理的软件也很多,如PHOTOSHOP、PAINTSHOP、GIMP、SaperaProcessing、MATLAB等,其中大部分软件都是基于广告策划和图像修饰处理而设计的应用软件,进行图像处理时并不是很方便。
而MATLAB(矩阵实验室) 它在矩阵运算上有自己独特的特点,在矩阵运算处理具有很大的优势,因此用MATLAB处理数字图像非常的方便。
不仅如此,MATLAB提供了丰富的图形命令和图形函数,而且其面向对象的图形系统具有强大的用户界面(GUI)生成能力。
这样,用户就可以充分利用系统提供的 GUI 特性,编写自己需要的图形界面,从而可以高效地进行图像处理。
MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读,写和显示。
MATLAB对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。
图像处理工具箱是由一系列支持图像处理操作的函数组成,可以对图像进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。
2方案设计
2.1系统基本方案
本系统利用MATLAB语言设计程序进行灰度图像处理,主要功能包括灰度图像的代数运算、几何运算,基本上包含了图像的所有变换和运算。
菜单式选择图像处理运算清晰方便,可视化的界面形象生动、使用方便、交互性强、具有无限的扩展能力。
2.2系统流程图
2.3 MATLAB的语言特点
(1)语言简洁紧凑,使用方便灵活,库函数极其丰富。
运算符丰富。
(2) MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和if 语句),又有面向对象编程的特性。
(3)程序限制不严格,程序设计自由度大。
(4)MATLAB的图形功能强大。
(5)MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。
(6)由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。
2.4 设计最终方案决定
虽然可用高级编程语音(比如c#、delphi等),但实现工具选用matlab较为方便。
、3系统的设计原理
3.1各模块功能及图像处理原理
3.1.1代数运算
代数运算是指两幅输入图象之间进行点对点的加、减、乘、除运算得到输出图象的过程。
如果记输入图象为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)
对于图像的代数运算应注意以下问题:
(1)代数运算的结果很容易超出数据类型允许的范围,有些运算(如除法)会产生分数结果,这个结果是不能用整数类型描述的,所以在图像代数运算中会采用以下的截取规则:
①超出数据类型允许的范围的值用数据类型的最大值代替;
②分数的结果采用四舍五入的方法整取。
(2)在使用Matlab中代数运算函数时,不用进行数据类型的转换,这些函数可以接受uint8和uint16数据类型,并返回相同格式的图象结果。
(3)可以使用+、-、*、/等基本算术运算符来进行图像的算数操作运算,但是不同于Matlab中提供的运算函数,必须在运算前将图像转换为适合进行算数运算的双精度数据类型。
(4)任何一个代数运算,都必须保证输入图像的大小相等,且数据类型一致。
在该功能模块中主要设计了图像的求补、叠加、减法、线性组合、乘法、除法运算。
3.1.2几何运算
在该功能模块中主要包含了改变图像大小、图像水平镜像、垂直镜像、图像转置、图象旋转、图像裁剪。
1.放缩操作:
MATLAB 影像工具箱中的immersize 函数可以通过一种特定的插补方法来改变图像的大小。
该函数的语法如下面所述:
B=immersize (A,m ,method )。
如果用户没有指定插补方法,则该函数将采用缺省的近邻插补方法。
另外,我们还可以根据指定的放大系数来改变图像的大小。
例如,下面的代码可以将X 中的像素数目增加一倍。
Y=immersize (X ,2)。
其中2为放大的系数。
如果希望缩小系数,只需将放大系数设置在0到1之间即可。
2.旋转操作:
在MATLAB 处理工具箱中的imrotate 函数可以通过一种特定的插补方法来改变图像显示的角度。
该函数的语法如下所示:B=imrotate (A,angle ,method )
该函数以图像中心点为基准,以角度 angle 逆时针方向旋转。
指定 angle 为负值,可实现图像顺时针旋转。
该函数是旋转图像 A ,使用指定的差值方法, method 是可以有下列值之一的一个文本字符串,默认值是包含在大括号({}).
如果用户没有指定插补方法,则该函数将采用缺省的近邻插补方法。
另外,用户还需指定旋转的角度。
图像的几何变换可以看成是像素在图像内的移动过程,该移动过程可以改变图像中物体对象(像素)之间的空间关系。
完整的几何运算需要由两个算法来实现:空间变换算法和灰度插值算法。
空间变换主要用来保持图像中曲线的连续性和物理的连通性,一般都采用数学函数形式来描述输入、输出图像相应像素间的空间关系。
空间变换一般定义为(,)(',')[(,),(,)]g x y f x y f a x y b x y ==,其中,f 便是输入图像,g 表示输出图像,坐标(',')x y 指的空间变换后的坐标,要注意这时的坐标已
经不是原来的坐标(,)x y 了,(,)a x y 和(,)b x y 分别图像的x 和y 坐标的空间变换函数。
灰度级插值主要是对空间变换后的像素赋予灰度值,使之恢复原位置处的灰度值,在几何运算中,灰度级插值是必不可少的组成部分。
因为图像一般用整数位置处的像素来定义。
而在几何变换中,(,)g x y 的灰度值一般由处在非整数坐标上的(,)f x y 的值来确定,即g 中的一个像素一般对英语f 中的几个像素之间的位置,反过来看也是一样,即f 中的一个像素往往被映射到g 中的几个像素之间的位置。
3.2 MATLAB 程序编写及具体操作
3.2.1界面设计
该系统的界面设计程序MainInterface.m 主要运用了Matlab GUI 中的figure(图形窗口)、uimenu(图形窗口主菜单)两个对象。
在GUI 中所有的对象创建都有着相同的格式: handle=function(‘propertyname ’, propertyvalue,…)
uimenu 对象的一些常用属性如表1所示:
表1 uimenu 对象的属性列表
在本系统菜单设计过程中主要使用了figure、uimenu的Backgroundcolor、Callback、Label、Position 、Separator、Visible属性。
在被处理图片打开之前除“文件”、“帮助”菜单的visible属性为“on”,即可见外其它均为“off”。
3.2.2代数运算函数
3.2.3图像代数运算
(1)图像加法函数imadd
语法格式Y=imadd (X)
说明:imadd函数用于产生两张图像的叠加效果,其中X,Y是类型相同的数组。
imadd 函数还可以通过指定常数参数增强一张图像的亮度。
在本系统中就采用了此方法,指定常数参数增强灰度图像的亮度。
(2)图像减法函数imsubtract
语法格式:Y= imsubtract (X))
说明:说明:imadd函数用于产生两张图像的叠加效果,其中X,Y是类型相同的数组。
subtrac函数还可以通过指定常数参数降低一张图像的亮度。
在本系统中就采用了此方法,指定常数参数降低灰度图像的亮度。
(3)图像乘法运算immultiply和图像除法运算mdivide
图像的乘法、除法、减法运算类似于叠加运算。
乘法函数immultiply用于对两张图像进行掩膜操作,即屏蔽掉图像的某些部分。
使用乘法函数时需指定缩放参数,如果大于1则增强图像亮度,反之则减弱图像亮度。
除法函数imdivide通常用于校正成像设备的非线性误差,也可以用于检测两张图像之间的差别,它给出的是相应像素值的变化
比率,而不是每个像素值的绝对差异。
减法函数imsubtract通常用于检测图像变化以及运动物体的图像处理。
3.2.4图像几何运算
(1)改变图像大小函数imresize
语法格式:Y=imresize(X,M,Method)
说明:其中X表示需要进行操作的图像,M是放大的倍数,一般来说M是大于0的实数,如果M大于1表示放大图像,小于1则表示缩小图像。
Method参数用来选择使用何种插值方法,其值及其含义如下:’nearest’最近邻插值法、’bilinear’双线性插值法、’bicubic’双三次插值法,默认为’nearest’。
imresize还可以指定图像输出大小,即传递一个向量参数给imresize函数,其中参数的两个分量分别指定输出图像的行数和列数。
如要将原图像X输出为200Χ480的图像,命令为:Y=imresize(X,[200 480])。
在本系统中采用了后一种方法,并使用了随机产生函数,使得图像改变大小随机性。
(2)图像水平镜像fliplr、垂直镜像flipud、转置ctranspose
语法格式:Y=fliplr(X) Y=flipud(X) Y=ctranspose (X)
说明:水平镜像函数fliplr是将图像沿垂直轴翻转矩阵,即将矩阵左右方向翻转。
垂直镜像函数flipud是将图像沿水平轴翻转矩阵,即将矩阵水平方向翻转。
图像转置可以使用函数ctranspose,也可以直接使用矩阵转置Y=X’。
(3)图像旋转函数imrotate
语法格式:Y=imresize(X,angle,method)
Y=imresize(X,angle,method,’crop’)
说明:其中X表示原图像,angle表示旋转的角度,这个角度是以逆时针方向计算的,负值表示顺时针方向旋转。
method参数与前面imresize中的参数意义相同。
而crop 参数表示将旋转以后的图像取与原图像大小的中心部分输出。
本系统中采用了后一种方法,旋转以后的图像取与原图像大小的中心部分输出,并使用了随机产生函数,使得旋转角度随机性。
(4)图像裁剪函数imcrop
语法格式:Y=imcrop(X,rect)
Y=imcrop(X,map,rect)
说明:如果不指定原图像,imcrop函数将当前坐标轴中的图像作为待裁剪图像,map参数表示原图像为索引图像时的调色板。
rect参数定义图像裁剪区域的矩形坐标,如果不指定坐标,则可以在原图像中使用拖放的方式来手动选择一个矩形区域。
本系统采用指定裁剪区域矩形坐标的方法。
4系统的软件设计及实现
4.1系统各功能模块演示
4.1.1图像的加法运算
实现代码:RGB=imread('haha.JPG');
RGB2=imadd(RGB,50);
imshow(RGB)
figure,imshow(RGB2)
RGB3=imadd(RGB,100);
figure,imshow(RGB3)
subplot(221),imshow(RGB),title('RGB');
subplot(222),imshow(RGB2),title('RGB2');
subplot(223),imshow(RGB3),title('RGB3');
图1 原图图2
图3 相加后的图片
4.1.2图像的减法运算
实现代码:I=imread('kow.JPG');
imshow(I)
background = imopen(I,strel('disk',15));
figure, imshow(background);
I2=imsubtract(I,background);
figure, imshow(I2)
subplot(221),imshow(I),title('rice');
subplot(222),imshow(background),title('background'); subplot(223),imshow(I2),title('I2');
图4 原图图5
图6 图像的相减后
4.1.3图像的乘法运算
实现代码:I=imread('rice.JPG');
J=immultiply(I,1.2);
K=immultiply(I,0.5);
imshow(I)
figure,imshow(J)
figure,imshow(K)
subplot(131),imshow(I),title('I');
subplot(132),imshow(J),title('J'); subplot(133),imshow(K),title('K');
图7 原图
图8
图9 相乘后的图像4.1.4图像的除法运算
实现代码:Rice = imread('rice.tif');
I = double(rice);
J= I * 0.43 + 90;
Rice2 = uint8(J);
Ip = imdivide(rice, rice2);
Imshow(Ip, []);
图10 图像除法
4.1.5图像的平移
实现代码:img1=imread('xixi.JPG');
img1=rgb2gray(img1);
figure,imshow(img1);
imwrite(img1,'a1.jpg');
%%%%%%平移
图11原图图12 平移后的图4.1.6图像的缩放运算
实现代码:I=imread('lion.JPG');
J=imresize(I,1.25);
K=imresize(I,0.8);
imshow(I),title('I')
figure,imshow(J),title('J')
figure,imshow(K),title('K')
图13原图
图14 图像放大至原图1.25倍图15图像缩小至原图0.8倍4.1.7图像的翻转
实现代码:I=imread('trees.tif');
J=imrotate(I,30,'bilinear');
J1=imrotate(I,30,'bilinear','crop');
imshow(I)
figure,imshow(J)
figure,imshow(J1)
subplot(121),imshow(I),title('I');
subplot(122),imshow(J1),title('J1');
J2=imrotate(I,-15,'bilinear'); %(写出该命令的目的)figure,imshow(J2)
I = imread('cameraman.tif');
figure,imshow(I);
theta = 30;
K = imrotate(I,theta); % Try varying the angle, theta. figure, imshow(K)
图16图像向左转
图17图像向右转
另:翻转和缩放的代码也可用
se=translate(strel(1),[20 20]);
img2=imdilate(img1,se);
figure,imshow(img2);
imwrite(img2,'a2.jpg');
%%%%%%旋转
img3=imrotate(img1,90);
figure,imshow(img3);
imwrite(img3,'a3.jpg');
% %%%%%缩放
img4=imresize(img1,2);
figure,imshow(img4);
imwrite(img4,'a4.jpg');
5结束语
通过这次“基于matlab的数字图像处理”的课程设计,学到了很多很多,最基本的就是重新熟悉了matlab语言,不仅仅只是在matlab编程上面有所提高和对界面设计熟悉,对数字图像处理也有了更深刻的认识。
首先,明白了图像对于matlab而言就是矩阵,灰度图像和彩色图像对应于不同维数的矩阵,分别为二维和三维,其中三维矩阵每一位代表一种颜色。
矩阵可以使实数,也可以使复数,不同的图像矩阵的元素对应于不同的类型,有double,uint8等类型。
由于几乎所有的matlab函数及其工具箱函数都可以使用double作为参数类型,不过由于64bit 来表示图像数据存储量特别巨大,所以matlab还支持图像数据的无符号整型存储,所以使用时还要注意输出数据类型的转换。
最后,我们必须要明白理论指导实践,要想实现预期的效果,必须明白它实现的机制和相应的算法,只有通过相应的理论来指导,我们才能有所创新,才能有所突破,而不只是单纯的引用相应的处理函数。
例如对于截图函数,它只能是截取坐标轴内的图像,对坐标轴意外的图像却不能处理,而且对于同时显示在坐标轴上的几张图像,它只能处理最后显示的那张,如果我们通过对它改进,能实现像qq截图那样的功能就很强大了。
不过通过这次的实现,我对图像的模式,几何变换的原理,图像的平移,裁剪,镜像,扭曲,缩放以及旋转等原理都有了更清楚的认识,也明白了它们的实现机制。
matlab还有很多很多新功能等待我们去探索。
通过这次的课程设计,我们受益匪浅。
6致谢
在西华大学电气信息学院的几年学习时间即将过去,几年时间并不算长,但对我而言,是磨砺青春、挥洒书生意气的几年,也是承受师恩、增长才干、提高学识的几年。
我将以积极的面貌重新投入到火热的工作和事业中。
在此,谨对培育我的母校、教导我的老师、帮助我的同学们致予最诚挚的谢意和敬意。
这次课程设计,我一直很努力地去做,过程中得到了郭奕老师的悉心指导和同学们大力热心帮助,并对我的设计提出许多有益的建议,在此对他们表示衷心的感谢。
同时也要感谢学校能给我这次机会去尝试自己设计一些东西,使自己所学专业知识与实践相结合。
最后也要感谢有关我参考过的文献的作者,是他们为我提供知识的源泉,使我最终能顺利地完成这次课程设计。
在临近毕业之际,我衷心地同学和朋友们在以后的人生道路上越走越宽广,也深深相信在未来的日子里我们将一路携手前行,会遇到很多的碰撞和交流,我们将始终记得我们曾在电气信息学院学习,这将是我克服困难、不断前进的精神动力。
21
7参考文献
[1] 王洪元主编.《MATLAB 语言以及在电子信息工程中的应用》.清华出版社. 2004.12
[2] 飞思科技研发中心,MATLAB6.5 辅助图像处理,.北京,电子工业出版社,2003
[3] 楼顺天,基于MATLAB 的系统分析与设计——信号处理,西安,西安电子科技大学出版社,1998.3
[4] 李文锋,图形图像处理与应用,中国标准出版社,北京,2006 [5] 李文锋编著.《图形图像处理与应用》.中国标准出版社.2006.06 [6] 贺兴华等著.《MATLAB7.X 图像处理》.人民邮电出版社.2006.11.01 [7] 刘文耀编著.《数字图像采集与处理》.电子工业出版社.2007.08.01
[8] 陈怀琛主编. 《数字信号处理教程——MATLAB 释义与实现》.电子工业出版社. 2004.06
[9] 张志涌等,掌握和精通MATLAB ,北京,北京航空航天大学出版社,1997.。