Matlab中图片保存的四种方法

Matlab中图片保存的四种方法
Matlab中图片保存的四种方法

Matlab中图片保存的四种方法

一种是出来图形窗口后手动保存(这儿又可以分两种):

1 直接从菜单保存,有fig,eps,jpeg,gif,png,bmp等格式。

2 edit------〉copy figure,再粘贴到其他程序。

另一种是用命令直接保存(这里也有两种):

1 用saveas命令保存图片。

saveas的三个参数:

(1)图形句柄,如果图形窗口标题栏是“Figure 3”,则句柄就是3.

(2)文件名。

(3)单引号字符串,指定存储格式。

例:

saveas(gcf,['D:\MATLAB7\work','yanbao',num2str(k),'.jpg']);

2 使用plot函数后紧接着用print函数。

print的三个参数:

(1)图形句柄,如果图形窗口标题栏是“Figure 3”,则句柄就是3.(2)单引号字符串,指定存储格式。

用gcf可以获取当前窗口句柄。

png格式:'-dpng'

jpeg: '-djpeg',

tiff: '-dtiff'

bmp: '-dbitmap'

(3)文件名。

例:

>> x=-pi:2*pi/300:pi;

>> y=sin(x);

>> plot(x,y);

>> print(gcf,'-dpng','abc.png') % 保存为png格式的图片。

>> figure(2) % 新建一个句柄为2的图形窗口。

>> plot(x,cos(x)); % 在句柄为2的图形窗口上画图。

>> grid

>> print(2,'-djpeg','C:\abc.jpeg'); %将句柄为2的图形保存为jpeg/jpg格式的图片,文件名为'C:\abc.jpeg'。

Matlab图像处理函数:regionprops

这里给出在Matlab图像处理工具箱中非常重要的一个图像分析函数:regionprops。顾名思义:它的用途是get the properties of region,即用来度量图像区域属性的函数。

语法

STATS = regionprops(L,properties)

描述

测量标注矩阵L中每一个标注区域的一系列属性。L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推。返回值STATS是一个长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。properties 可以是由逗号分割的字符串列表、饱含字符串的单元数组、单个字符串'all' 或者'basic'。如果properties 等于字符串'all',则所有下述字串列表中的度量数据都将被计算,如果properties 没有指定或者等于'basic',则属

性: 'Area', 'Centroid', 和'BoundingBox' 将被计算。下面的列表就是所有有效的属性字符串,它们大小写敏感并且可以缩写。

属性字符串列表Area EquivDiameter MajorAxisLength

BoundingBox EulerNumber MinorAxisLength

Centroid Extent Orientation

ConvexArea Extrema PixelIdxList

ConvexHull FilledArea PixelList

ConvexImage FilledImage Solidity

Eccentricity Image

属性详细定义

本部分将结合一个具体的例子说明各种字串相关属性的意义,矩阵取自在蚁蛉模式识别中做过预处理后的斑纹分割图像,如下图:

这是一幅二值图像,在应用regionprops函数之前必须将其标注,可以调用bwlabel函数和伪彩色处理,标注后的图像如下图:

下面基于以上的材料来考察属性的含义。

'Area'

是标量,计算出在图像各个区域中像素总个数。注意:这个数值可能与由函数bwarea 计算的值有轻微的不同。对于这样一个数值,我们可以使用它除以整个图像区域的像素个数而得到斑纹比例,可以作为模式识别的候选特征,并且这个特征是仿射不变的。在本例中最后计算出的面积向量是

[3.8952,9.7213,17.663,3.5762,1.3432,1.6958,0.41974,0.41974,21.625,12.3 24,4.8187,1.5111]/10000.

'BoundingBox'

是1行ndims(L)*2列的向量,即包含相应区域的最小矩形。BoundingBox 形式

为[ul_corner width],这里ul_corner 以[x y z ...] 的坐标形式给出边界盒子的左上角、boxwidth 以[x_width y_width ...] 形式指出边界盒子沿着每个维数方向的长度。本例的各部分区域最小矩形如下图!注意:请在这熟悉一下函数rectangle的使用方法。

'Centroid'

是1行ndims(L)列的向量,给出每个区域的质心(重心)。注意:Centroid 的第一个元素是重心水平坐标(x坐标)、第二个元素是重心垂直坐标(y坐标)。Centroid 所有其它元素则按照维顺序排列。下图采用以中心为圆心的小圆来演示质心检测的效果:

图中各质心坐标(标准化后的)依次为:

(x,y)= 0.10478, 0.76739 0.11883, 0.081545 0.19586, 0.61092 0.30701, 0.3 0807 0.65712, 0.31613 0.73165, 0.30531 0.74548, 0.35378 0.80624, 0.728 02 0.84546, 0.61564 0.90554, 0.079574 0.93477, 0.77871 0.97611, 0.1557 6

'MajorAxisLength'

是标量,与区域具有相同标准二阶中心矩的椭圆的长轴长度(像素意义下)。本属性只支持二维标注矩阵。

'MinorAxisLength'

是标量,与区域具有相同标准二阶中心矩的椭圆的短轴长度(像素意义下)。本属性只支持二维标注矩阵。

'Eccentricity'

是标量,与区域具有相同标准二阶中心矩的椭圆的离心率(可作为特征)。本属性只支持二维标注矩阵。

'Orientation'

是标量,与区域具有相同标准二阶中心矩的椭圆的长轴与x轴的交角(度)。本属性只支持二维标注矩阵。

本例的各区域椭圆数据为:长轴:

18.767,45.172,43.003,30.687,16.505,15.698,5.8833,5.8833,46.954,38.873,22.929,15.429 短轴:16.211,26.079,32.709,9.8458,6.8019,8.6386,5.8833,5.8833,35.976,31.022,16.98,7.8038 离心率:0.50387,0.81652,0.6492,0.94713,0.91114,0.83497,0,0,0.64262,0.60262,0.67205,0.86266 方向角:-29.219,-32.192,-9.3909,-50.904,-70.333,48.823,0,0,14.035,17.986,3.0319,-34.238

我们可以考察离心率的变化趋势,得到对于整个区域中的各区域的似圆性如何的大致感觉,比如下图是12个区域的离心率变化情形:

由上图可以看出区域整体的似圆性并不好,实际上可以考虑使用离心率向量作为一个模式识别的特征!!

'Image'

二值图像,与某区域具有相同大小的逻辑矩阵。你可以用这个属性直接将每个子区域提取出来,然后再作相应的处理!比如本例的第一个斑纹区域提出后是:

'FilledImage'

与上相同,唯一区别是这是个做了填充的逻辑矩阵!

本例中和上面的没有区别,只有区域有空洞时才有明显差别。

'FilledArea'

是标量,填充区域图像中的on 像素个数。

'ConvexHull'

是p行2列的矩阵,包含某区域的最小凸多边形。此矩阵的每一行存储此多边形一个顶点的xy坐标。此属性只支持2维标注矩阵。例如:本例中的所有子区域的最小凸多边形图形如下图

'ConvexImage'

二值图像,用来画出上述的区域最小凸多边形。同时此凸包内的像素均打开,图像尺寸和此区域对应边界矩形相同。此属性只支持2维标注矩阵。例如:本例中的第2个子区域的最小凸多边形图形为

。注意:此处函数roipoly很有用!

'ConvexArea'

是标量,填充区域凸多边形图像中的on 像素个数。

'EulerNumber'

是标量,几何拓扑中的一个拓扑不变量--欧拉数,等于图像中目标个数减去这些目标中空洞的个数。此属性只支持2维标注矩阵。本例中的欧拉数均为1。

'Extrema'

8行2列矩阵,八方向区域极值点。矩阵每行存储这些点的xy坐标,向量格式

为[top-left top-right right-top right-bottom bottom-right bottom-left left-bottom left-top]。此属性只支持2维标注矩阵。

'EquivDiameter'

是标量,等价直径:与区域具有相同面积的圆的直径。计算公式为:sqrt(4*Area/pi)。. 此属性只支持2维标注矩阵。本例标准化后的12区域直径向量为:

[2.227,3.5182,4.7423,2.1339,1.3077,1.4694,0.73105,0.73105,5.2473,3.961 2,2.477,1.3871]/100.

'Solidity'

是标量,同时在区域和其最小凸多边形中的像素比例。计算公式为:Area/ConvexArea,这也是个仿射特征,实际上反映出区域的固靠性程度。此属性只支持2维标注矩阵。本例12区域凸元素比例向量为:

[0.97071,0.66171,0.90846,0.86585,0.84211,0.94393,1,1,0.9096,0.75514,0. 90823,0.94737].

'Extent'

是标量,同时在区域和其最小边界矩形中的像素比例。计算公式为:Area除以边界矩形面积,这也是个仿射特征,实际上反映出区域的扩展范围程度。此属性只支持2维标注矩阵。不再给出计算结果!!

'PixelIdxList'

p元向量,存储区域像素的索引下标。

'PixelList'

p行ndims(L)列矩阵,存储上述索引对应的像素坐标。

支持类

输入的标注矩阵L可以有任意的数值类型。

提醒

使用逗号分割列表语法

当你基于regionprops函数的输出作算法设计时,使用逗号分割列表语法就凸显出其非常的价值。例如:对于一个存储标量的属性,可以利用此语法创建一个包含图像中不同区域内此属性值的向量。例如以下两句是等价的:

stats(1).Area, stats(2).Area, ..., stats(end).Area

stats.Area

因此,可以使用下面的方法创建相应的向量:

regionprops(L,'Area'); allArea = [stats.Area];

allArea 就是一个与结构数组stats 具备相同长度的向量。

基于特定原则的区域选择

当你要基于特定准则条件选择某个区域时,将函数ismember 和regionprops 联合使用是很有用处的。例如:创建一个只包含面积大于80的二值图像,用以下命令

idx = find([stats.Area] > 80); BW2 = ismember(L,idx);

ismember解释:

a=[1 2 3 4 5];

b=[3 2 5 6 7 8 77 44 3];

[tf index]=ismember(a,b); %判断a中的元素有没有在b中出现

tf =

0 1 1 0 1

index =

0 2 9 0 3

%tf返回一个和a同样大小的矩阵,a的元素在b中出现,tf上的相应位置元素值为1,没有出现则为0;index也是返回一个和a同样大小的矩阵,其相应位置的值为a相应位置

的元素在b中出现的最后标号,注意是最后的标号,若某元素在b中出现多次,则记录的是最后一次出现的标号,若该位置上的a的元素没有在b中出现,则返回0.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%

计算性能考虑

大多数的属性测量计算时间都非常地少,除了那些非常依赖于图像L中区域个数和像素个数的属性。例如:

'ConvexHull' 'ConvexImage' 'ConvexArea' 'FilledImage'

另外建议一次性计算所有属性值,因为分开计算和一起计算时间相差无几!

使用二值图像工作

在调用regionprops之前必须将二值图像转变为标注矩阵。两个函数可以做到:

L = bwlabel(BW); L = double(BW);

注意:虽然这两个函数从同一二值图像产生不同的标注矩阵,但是它们是等效的!例如:给出如下的二值矩阵BW,

1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1

bwlabel 创建一个包含两个分别由整数1和2标注的连续区域标注矩阵

mylabel = bwlabel(BW) mylabel = 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 2 2

double 创建一个包含一个由整数1标注的不连续区域标注矩阵。

mylabel2 = double(BW) mylabel2 = 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1

regionprops 并不负责自动转换二值图像数据类型,而是由你自己决定使用何种数据转换方法来存储自己想要的数据。

regionprops函数的扩展思路

在regionprops函数的基础上,你可以使用它提供的基本数据来扩展它的功能,将区域的曲率数据和骨架数据作为它的另外属性值来开发,从而希望它能用来做更细致的特征提取。分类: matlab

MATLAB GUI平台

研究生阶段写的一个小文章,内容肤浅,不过转载请注明,谢谢!!

摘要:本文主要介绍了基于MATLAB的图形用户界面(GUI)来制作图像处理软件平台的具体过程和相关技巧,文章主要从几个方面展开论述:第一,简单介绍下GUI与GUIDE;第二,介绍以下GUIDE的模板及其操作方法;第三,详细阐述一下图像处理软件平台的制作方法。本文的GUI例子所制作的图像处理软件可以实现的功能有:五种常用的边缘检测、灰度直方图的显示、灰度直方图的均衡化、对比度自适应直方图的均衡化、图片的二值化以及彩色图片的灰度化。文章基本介绍了以上的内容,关于软件还有许多未能实现的功能有待于日后的逐步开发,从这个简单的实例可以让读者从感性的方面充分了解MATLAB的图形用户界面的相关功能,同时为打算深入学习这一套MATLAB工具集的读者做一个铺垫。

关键词:图形用户界面;图像处理;边缘检测;MATLAB工具集

一、引言

图形用于界面(Graphical User Interfaces,GUI)是提供人机交互的工具和方法。GUI 是包含图形对象(如窗口、图标、菜单和文本)的用户界面。以某种方式选择或激活这些对象时,通常会引起动作或者发生变化。一个设计优秀的GUI能够非常直观的让用户知道如何操作MATLAB界面,并且了解设计者的开发意图。MATLAB的GUI为开发者提供了一个不脱离MATLAB的开发环境,有助于MATLAB程序的GUI集成。这样可以使开发者不必理会一大堆烦杂的代码,简化程序,但是同样可以实现向决策者提供图文并茂的界面,甚至达到多媒体的效果。可以说MATLAB提供了一个简便的开发环境,可以让开发者快速上手,提高了开发者的工作效率。

所谓的GUIDE就是图形用户界面开发环境(Graphical User Interface Development Environment),它向用户提供了一系列的创建用户图形界面的工具。这些工具大大简化了GUI设计和生成的过程。GUIDE可以完成的任务有如下两点:1)输出GUI。2)GUI 编程。GUIDE实际上是一套MATLAB工具集,它主要由七部分组成:版面设计器、属性编辑器、菜单编辑器、调整工具、对象浏览器、Tab顺序编辑器、M文件编辑器。

二、GUIDE的操作界面及使用方法的介绍

1.启动GUIDE在命令窗口中直接键入guide,启动GUIDE,或者直接点击MATLAB 上按钮,会出现如图1所示的GUIDE Quick Start对话框。利用GUIDE模板创建GUI,或者打开已经存在的GUI,单击OK按钮,打开版面设计工具,如图2所示。在通常状况下组件面板并不显示出组件的名称,如果需要显示组件名称,则进行下面的操作:从File 菜单中选择Preferences选项,勾选Show names in component palette选项即可。

2.GUI文件的介绍GUIDE把GUI设计的内容保存在两个文件中,它们在第一次保存或运行时生成。一个是FIG文件,扩展名为.Fig,它包含对GUI和GUI组件的完整描述;另外一个是M文件,扩展名为.M,它包含控制GUI的代码和组件的回调事件代码。这两个文件与GUI显示和编程任务相对应。在版面设计器中创建GUI时,内容保存在FIG文件中;对GUI编程时,内容保存在M文件中。通常情况下在版面设计器工具栏上单击图标可以打开M文件编辑器。图3所示的编辑器显示了GUI with Axes and Menu模板的M文件的内容。

3.GUIDE环境的设置用户可以自定义GUIDE设计环境。在File菜单下选择Preferences,打开如图4所示的设置对话框,可以进行相应的设置。

三、基于GUI的图像处理软件平台的设计过程

1.GUIDE版面设计器(即FIG文件)的设计根据设计需要:首先拖拽两个图形窗口(Axes),一个作为待处理图片区域,另一个作为已处理图片区域;其次,拖拽六个电子按钮(Radio Button),作为边缘检测操作按钮以及一个Panel按钮作为检测按钮的支撑面板;第三,拖拽三个按钮(Push Button),作为灰度变化区域的按钮;最后,拖拽五个按钮(Push Button),作为选取/保存图片及退出等操作按钮。将上面的所有按钮及图形窗口合理的布局,达到美观工整的效果,本文设计的GUIDE如图5所示,然后运行一下GUI,系统会自动生成GUI文件。

图5 图像处理软件的GUIDE版面

2.选取图片按钮的GUI设计要想设计一个图像处理的软件,首先要考虑选取图片,选取什么格式的图片,这个是至关重要的,所以先介绍一下选取图片按钮的GUI设计方法。上面已经规划好了按钮的位置,如果想在点击选取图片按钮时,软件给予响应,需要给按钮输入一定的程序代码,设置代码的方法如下:右键单击选取图片按钮,选择View Callbacks/ Callback,系统会自动带设计者进入此按钮的代码输入区域,在下面的空白处输入如下代码[1]:

global im %定义一个全局变量im

[filename,pathname]=...

uigetfile({'*.*';'*.bmp';'*.tif';'*.png'},'select picture'); %选择图片路径

str=[pathname filename]; %合成路径+文件名

im=imread(str); %读取图片

axes(handles.axes1); %使用第一个axes

imshow(im); %显示图片

写完上述代码后,保存M文件,然后运行GUI,现在就可以实现选择图片的功能了。当然有选取就要考虑存储已处理好的图片,这就引出了存储图片按钮的GUI设计。

3.存储图片按钮的GUI设计同样右键单击存储图片按钮,选择View Callbacks/ Callback,进去M文件后在下面的空白处输入如下代码[2]:

global BW %定义处理后的图片BW这个全局变量

[filename,pathname,filterindex]=...

uiputfile({'*.bmp';'*.tif';'*.png'},'save picture');存储图片路径

if filterindex==0

return %如果取消操作,返回

else

str=[pathname filename]; %合成路径+文件名

axes(handles.axes2); %使用第二个axes

imwrite(BW,str); %写入图片信息,即保存图片

end

4.边缘检测按钮组的GUI设计本文设计的GUI主要包含了五种最常用的检测算法(即roberts、sobel、prewitt、log、canny检测),右键单击Panel面板,选择View Callbacks/ SelectionChangeFcn,进入M文件后在空白处输入如下代码[3]:

global im

global BW %定义全局变量

str=get(hObject,'string'); %拿到所选按钮的名称

axes(handles.axes2); %使用第二个axes

switch str %选择语句

case'Initial' %点击原图按钮

imshow(im); %显示原图

case'Roberts' %点击Roberts边缘检测按钮

BW=edge(im,'roberts');

imshow(BW);

case'Sobel' %点击Sobel边缘检测按钮

BW=edge(im,'sobel');

imshow(BW);

case'Prewitt' %点击Prewitt边缘检测按钮

BW=edge(im,'prewitt');

imshow(BW);

case'Log' %点击Log边缘检测按钮

BW=edge(im,'log');

imshow(BW);

case'Canny' %点击Canny边缘检测按钮

BW=edge(im,'canny');

imshow(BW);

end;

5.退出按钮的GUI设计同样右键单击退出按钮,选择View Callbacks/ Callback,进入M文件中,在空白处输入如下代码:

close(gcf) %关闭当前Figure窗口句柄

其他按钮代码的设置都与上面叙述的大同小异,相关图像处理程序代码请参考MATLAB7.0图形图像处理[4],在这里将不再累述。

四、图像处理软件的运行举例

运行GUI,将生成图像处理的软件平台,它可以实现的功能有:五种常用的边缘检测、灰度直方图的显示、灰度直方图的均衡化、对比度自适应直方图的均衡化、图片的二值化以及彩色图片的灰度化。现在运行软件并举些相关图像处理实例。

1.灰度图片边缘检测的举例首先选择一幅名字为lena256的灰度图片,依次选择五种检测按钮,比较各种边缘检测的处理效果,通过对比,发现Canny

算子对图片的边缘检测效果比较好,其检测效果如图6所示,其它4种算子检测后的效果如图7所示。

2.灰度图片的直方图显示举例选取名字为cameraman的灰度图片,点击直方图的显示按钮,此灰度图片的直方图分布将显示在第二个axes中,其处理结果如图8所示。

3.彩色图片的二值化和灰度化处理举例选取名字为Water lilies的彩色图片,分别点击二值化和灰度化按钮并保存处理后的图片,其处理后的图片效果如图9所示。

五、结束语

由于MATLAB强大的工程计算和仿真能力,使越来越多的用户从原来的开发环境转到MATLAB上来。现在绝大多数MATLAB开发者都是一些从事一定领域的研究者,他们使用其他的开发环境设计GUI不紧编程复杂、而且学习困难,往往需要花费大量时间在编程上。但是,MATLAB提供了一个简便的开发环境,可以让开发着快速上手,提高了开发者的工作效率。本文详细向读者介绍了MATLAB的GUI的制作方法,通过这个例子,可以清楚的了解GUIDE的设计方法及相关图像处理代码的编辑,使读者从感性的角度认识GUIDE的功能及使用方法,可以说为初学者提供了一个学习平台,打下坚实的基础

如何利用Matlab进行usb摄像头

首先自己的电脑有个摄像头,如果没有插上USB摄像头,然后再启动Matlab(顺序不可返的)。

方法:

查询USB2.0Camera 的具体参数:

输入:imaqInfo = imaqhwinfo

返回:

imaqInfo =

InstalledAdaptors: {'coreco' 'winvideo'}

MATLABVersion: '7.6 (R2008a)'

ToolboxName: 'Image Acquisition Toolbox'

ToolboxVersion: '3.1 (R2008a)'

输入:winvideoinfo = imaqhwinfo('winvideo')

返回:

winvideoinfo =

AdaptorDllName: 'C:\Program

Files\MATLAB\R2008a\toolbox\imaq\imaqadaptors\win32\mwwinvideoimaq.dl l'

AdaptorDllVersion: '3.1 (R2008a)'

AdaptorName: 'winvideo'

DeviceIDs: {[1]}

DeviceInfo: [1x1 struct]

输入:winvideoinfo.DeviceInfo

返回:

ans =

DefaultFormat: 'YUY2_160x120'

DeviceFileSupported: 0

DeviceName: 'USB2.0 Camera'

DeviceID: 1

ObjectConstructor: 'videoinput('winvideo', 1)'

SupportedFormats: {'YUY2_160x120' 'YUY2_176x144' 'YUY2_320x240'

'YUY2_352x288' 'YUY2_640x480'}

到此为止!最后一行可以看出你的相机支持的分辨率,我的usb摄像头最高支持640*480的

在语句中设置:

vid=videoinput('winvideo',1,'YUY2_640x480');

set(vid,'TriggerRepeat',Inf);

set(vid,'FramesPerTrigger',1);

set(vid,'FrameGrabInterval',1);

%设置返回色彩……

% set(vid,'ReturnedColorSpace','rgb');

set(vid,'ReturnedColorSpace','grayscale');

%获取分辨率,色彩数目等参数

vidRes=get(vid,'VideoResolution');

nBands=get(vid,'NumberOfBands');

hImage=image(zeros(vidRes(2),vidRes(1),nBands));

preview(vid,hImage);

Matlab的GUI编程中实现axes控件上没有坐标轴

有时候,自己编写的GUI中的axes用于显示图像,此时你不想让程序刚开始运行的时候显示坐标轴等信息,这是,你可以进行如下设置:

在你的每一个axes的CreateFcn函数中添加一下代码即可:

set(hObject,'xTick',[]);

set(hObject,'ytick',[]);

set(hObject,'box','on');

Matlab中GUI之间的参数传递

今天,研究了一下不同GUI之间的参数传递方法,Matlab中GUI之间参数传递不如VC 一样简单,易于理解,但是如果理解了,也是有章可循的,传说的具有六种方法,介绍其中的一种,如下所示:

**运用gui本身的varain{}、varaout{}传递参数。

上面介绍的方法只是适用于主从GUI之间传递参数,即从主GUI调用子GUI,然后关掉子GUI,子GUI的参数就传递到了主GUI,比如子GUI的名称为subGUI, 设想的参数输入

输出为:[out1, out2] = subGUI(in1, in2)

在subGUI的m文件中(由GUIDE自动产生),varargin 和varargout 分别是一个可变长度的cell数组(MATLAB帮助文件中有说明)。输入参数in1和in2保存在varargin 中,输出参数out1,out2包含在varargout中;在subGUI的OpeningFcn中,读入参数,并用guidata保存,即:handles.in1 = varargin{1};handles.in2 = varargin{2}; guidata(hObject, handles);

返回参数的设置:

1. 在GUI子程序的OpeningFcn函数的结尾加上uiwait(handles.figure1); figure1是subGUI的Tag;

2. subGUI中控制程序结束(如"OK”和"Cancel"按钮)的callback末尾加上uiresume(handles.figure1),不要将delete命令放在这些callback中;

3. 在子GUI的OutputFcn中设置要传递出去的参数,如varargout{1} = handles.out1;varargout{2} = handles.out2;末尾添加delete(handles.figure1); 结束程序。

在GUI的OpenFcn中,如果不加uiwait,程序会直接运行到下面,执行OutputFcn。也就是说程序一运行,返回值就确定了,再在其它部分对handles.output作更改也没有效果了。

加上uiwait后,只有执行了uiresume后,才会继续执行到OutputFcn,在此之前用户有充分的时间设置返回值。

通过以上设置以后,就可以通过[out1, out2] = subGUI(in1, in2) 的形式调用该子程序。

在一个GUI中调用另一个GUI时,主GUI不需要特别的设置,同调用普通的函数一样。在打开子GUI界面的同时,

主程序还可以响应其它的控件。不需要担心子GUI的返回值被传错了地方。

综上所述:一是,两点需要注意,uiwait和uiresume的使用位置和使用时机,二是,delete 句柄的位置……

延续以前的博文,今天介绍一下方法二,利用setappdata和getappdata函数进行不同GUI之间的参数传递问题。getappdata函数,VALUE=getappdata(H,NAME);setappdata函数,setappdata(H,NAME,VALUE)。具体地应用如下所示:

当在主子gui内调用时,可以如下设置:fig1调用fig2时,使用fig2指令来打开fig2,在fig2的m文件中,在回调函数中用setappdata(fig1,'A',A)实现返回fig1,并将参数A 传递给fig1,然后在fig1的使用A的地方添A=getappdata(fig1,‘A’)。但这种方式的一个问题就是没调用一次,fig1的数据就得初始化一次,这是因为

setappdata(fig1,'A',A)中出现了fig1,调用一次setappdata就得运行一次fig1的缘故,解决方案就是把setappdata(fig1,'A',A)改为setappdata(0,'A',A),这样把A读入matlab workspace,相当于一个全局变量了,但当然比直接用global定义全局变量好!必须注意的是:在主程序和子程序中均要用0,否则不管用……

此方法和第一种的不同即:第一种是启动主程序后,再启动子程序,进行设置参数,而这一种方法是先启动子程序,设置好参数后,启动主程序,这是参数已经传到主程序……

前面有了两种方法了,今天就研究一下第三种方法,这种方法在GUI内的数据传递也是比较常用的:全局变量。

这种方式恐怕是最简单的方式,是很省心!但是,简单的问题就在于有时你会很头疼!

因为在每一个要到该全局变量的地方,你都要添一句gloal x,还有就是如果你在一个地方修改了x的值,那么所有x的值就都变了!有的时候恐怕会出现紊乱。另一个更重要的问题在于,套用C++的一句话,全局变量破坏了程序的封装性!所以,全局变量是能少用尽量少用。

参数传递:

假如我在 myGui_OpeningFcn 中计算得到了以下几个参数 y (符号方程)xInput ,(1*600向量),xx (10*1向量),现在需要在按下某一按键时调用这些数据完成进一步的计算,按键的回调函数为 pushbutton1_Callback

则,可以使用如下的方式来达到我们的目的:

function myGui_OpeningFcn(hObject, eventdata, handles, varargin)

% 程序代写&算法设计,联系qq:380238062,转载时请保留

[y,xInput,xx] = myFun1(); %参数获得

data{1} = y;data{2} = xInput;data{3} = xx; %将数据存入元胞数组

handles.data = data; %将data存到handles里面

guidata(hObject, handles); %这句要紧根上一句,实现数据更新

function pushbutton1_Callback(hObject, eventdata, handles)

data = handles.data; %实现数据传递

y = data{1};xInput = data{2};xx = data{3};

myFun2(y,xInput,xx); % 正常使用得到的数据即可

结果显示:

假如我们的界面功能是对图像进行去噪,在处理后要显示结果图像的信噪比,可使用以下方法

1. 首先在GUI中加入一个edit,假设该edit的TAG为edit1

2. 在控件的回调函数中进行信噪比的计算及显示:

function pushbutton1_Callback(hObject, eventdata, handles)

% 程序代写&算法设计,联系qq:380238062,转载时请保留

snr = myFun(oriImage,outImage);

set(handles.edit1,'string',num2str(snr)); %数据显示

图像清除:

在同一个axes中显示图像时,经常会遇到需要将已显示的图像进行清除的情况,可用以下方法实现:

function pushbutton1_Callback(hObject, eventdata, handles)

h = getHandle(); %得到axes的句柄

reset(h); %清除已画的曲线

guidata,handles的理解(转)

2015-07-20 07:58 95人阅读评论(0) 收藏举报分类:

Matlab(13)

guidata其实其关键主要是应用在不同控件参数传递中,也许有些人会应用global来实现全局变量的传递,但是这样来说太麻烦了,有时也有些不便,而guidata却非常之方便.

1..guihandles(figure1)可以得到一个结构体包含了figure1的所有控件的TAG 及其句柄,

2比如说你想在一个控件中构造一个变量,并且希望能在其它控件中使用,这时候你可以通过下面的方法

handles.fdafdaf=*******(fadadaf是你随便取的一个名字,其实就相当于每一个控件的TAG名,而这个变量会储存在handles结构之中)

guidata(hObject,handles) (UPDATE YOUR HANDLES)(i当然你构造了一个变量,要对其进行储存,如果不储存,其它控件中将不能使用它)

3 当然对于储存这种参数,你不一定使用handles ,也可以换个名字,比如说DATA,这点在MATLAB HELP 里面讲得还是比较清楚的.

4,内联函数即inline

在matlab命令窗口、程序或函数中创建局部函数时,可用inline。优点是不必将其储存为一个单独文件。在运用中有几点限制:不能调用另一个inline函数,只能由一个matlab表达式组成,并且只能返回一个变量---显然不允许[u,v]这种形式。因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline。除了这些限制,在许多情况下使用该函数非常方便。Inline函数的一般形式为:

FunctionName=inline(‘任何有效的matlab表达式’, ‘p1’,’p2’ ,….) ,其中‘p1’,’p2’ ,…是出现在表达式中的所有变量的名字。

5匿名函数,是构造简单函数的一种方法

比如定义f(x)=x^2,可以写为

f=@(x)(x.^2)

其中@(x)(x.^2)就是匿名函数,第一个括号里面是自变量,第二个括号里面是表达式,@是函数指针

f=@(x)(x.^2)表示将匿名函数@(x)(x.^2)赋值给f,于是f就表示该函数。

于是f(2)=2.^2=4;f(1:3)=[1:3].^2=[1 4 9]等等

定义匿名函数时也可以调用别的匿名函数,比如

f1=@(x,y)(x.^2+y.^2)

定义了函数x^2+y^2

f2=@(t)(f1(t,2))

定义了函数t^2+4

f3=@(x)(f1(x(1),x(2)))

定义了函数x(1)^2+x(2)^2

使用匿名函数时一定要注意函数本身的参数形式,如

Matlab 图像处理相关函数命令大全

Matlab 图像处理相关函数命令大全 一、通用函数: colorbar 显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle) getimage 从坐标轴取得图像数据 语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \ [...]=getimage imshow 显示图像 语法:imshow(I,n) \ imshow(I,[low high]) \ imshow(BW) \ imshow(X,map) \ imshow(RGB)\ imshow(...,display_option) \ imshow(x,y,A,...) \ imshow filename \ h=imshow(...) montage 在矩形框中同时显示多幅图像 语法:montage(I) \ montage(BW) \ montage(X,map) \ montage(RGB) \ h=montage(...) immovie 创建多帧索引图的电影动画 语法:mov=immovie(X,map) \ mov=immovie(RGB) subimage 在一副图中显示多个图像 语法:subimage(X,map) \ subimage(I) \ subimage(BW) \ subimage(RGB) \ subimage(x,y,...) \ subimage(...) truesize 调整图像显示尺寸 语法:truesize(fig,[mrows mcols]) \ truesize(fig)

基于Matlab基本图像处理程序

图像读入 ●从图形文件中读入图像 imread Syntax: A = imread(filename, fmt) filename:指定的灰度或彩色图像文件的完整路径和文件名。 fmt:指定图形文件的格式所对应的标准扩展名。如果imread没有找到filename所制定的文件,会尝试查找一个名为filename.fmt的文件。 A:包含图像矩阵的矩阵。对于灰度图像,它是一个M行N列的矩阵。如果文件包含 RGB真彩图像,则是m*n*3的矩阵。 ●对于索引图像,格式[X, map] = imread(filename, fmt) X:图像数据矩阵。 MAP:颜色索引表 图像的显示 ●imshow函数:显示工作区或图像文件中的图像 ●Syntax: imshow(I) %I是要现实的灰度图像矩阵 imshow(I,[low high],param1, val1, param2, val2,...) %I是要现实的灰度图像矩阵,指定要显示的灰度范围,后面的参数指定显示图像的特定参数 imshow(RGB) imshow(BW) imshow(X,map) %map颜色索引表 imshow(filename) himage = imshow(...) ●操作:读取并显示图像 I=imread('C:\Users\fanjinfei\Desktop\baby.bmp');%读取图像数据 imshow(I);%显示原图像 图像增强 一.图像的全局描述 直方图(Histogram):是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量。 图像直方图(Image Histogram):是表示数字图像中亮度分布的直方图,用来描述图象灰度值,标绘了图像中每个亮度值的像素数。 灰度直方图:是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图 像中某种灰度出现的频率。描述了一幅图像的灰度级统计信息。是一个二维图,横坐标为图像中各个像素点的灰度级别,纵坐标表示具有各个灰度级别的像素在图像中出现的次数或概率。 归一化直方图:直接反应不同灰度级出现的比率。纵坐标表示具有各个灰度级别的像

matlab图像处理代码

附录 MATLAB图像处理命令  1.applylut  功能: 在二进制图像中利用lookup表进行边沿操作。 语法: A = applylut(BW,lut) 举例 lut = makelut('sum(x(:)) == 4',2); BW1 = imread('text.tif'); BW2 = applylut(BW1,lut); imshow(BW1) figure, imshow(BW2) 相关命令: makelut 2.bestblk  功能: 确定进行块操作的块大小。 语法: siz = bestblk([m n],k) [mb,nb] = bestblk([m n],k) 举例 siz = bestblk([640 800],72) siz = 64 50 相关命令: blkproc 3.blkproc  功能:

MATLAB 高级应用——图形及影像处理 320 实现图像的显式块操作。 语法: B = blkproc(A,[m n],fun) B = blkproc(A,[m n],fun,P1,P2,...) B = blkproc(A,[m n],[mborder nborder],fun,...) B = blkproc(A,'indexed',...) 举例 I = imread('alumgrns.tif'); I2 = blkproc(I,[8 8],'std2(x)*ones(size(x))'); imshow(I) figure, imshow(I2,[]); 相关命令: colfilt, nlfilter,inline 4.brighten  功能: 增加或降低颜色映像表的亮度。 语法: brighten(beta) newmap = brighten(beta) newmap = brighten(map,beta) brighten(fig,beta) 相关命令: imadjust, rgbplot 5.bwarea  功能: 计算二进制图像对象的面积。 语法: total = bwarea(BW) 举例 BW = imread('circles.tif'); imshow(BW);

MATLAB图像处理相关函数

一、通用函数: colorbar显示彩色条 语法:colorbar \ colorbar('vert') \ colorbar('horiz') \ colorbar(h) \ h=colorbar(...) \ colorbar(...,'peer',axes_handle) getimage 从坐标轴取得图像数据 语法:A=getimage(h) \ [x,y,A]=getimage(h) \ [...,A,flag]=getimage(h) \ [...]=getimage imshow 显示图像 语法:imshow(I,n) \ imshow(I,[low high]) \ imshow(BW) \ imshow(X,map) \ imshow(RGB)\ imshow(...,display_option) \ imshow(x,y,A,...) \ imshow filename \ h=imshow(...) montage 在矩形框中同时显示多幅图像 语法:montage(I) \ montage(BW) \ montage(X,map) \ montage(RGB) \ h=montage(...) immovie 创建多帧索引图的电影动画 语法:mov=immovie(X,map) \ mov=immovie(RGB) subimage 在一副图中显示多个图像 语法:subimage(X,map) \ subimage(I) \ subimage(BW) \ subimage(RGB) \ subimage(x,y,...) \ subimage(...) truesize 调整图像显示尺寸 语法:truesize(fig,[mrows mcols]) \ truesize(fig) warp 将图像显示到纹理映射表面 语法:warp(X,map) \ warp(I ,n) \ warp(z,...) warp(x,y,z,...) \ h=warp(...) zoom 缩放图像 语法:zoom on \ zoom off \ zoom out \ zoom reset \ zoom \ zoom xon \ zoom yon\ zoom(factor) \ zoom(fig,option) 二、图像文件I/O函数命令 imfinfo 返回图形图像文件信息 语法:info=imfinfo(filename,fmt) \ info=imfinfo(filename) imread 从图像文件中读取(载入)图像 语法:A=imread(filename,fmt) \ [X,map]=imread(filename,fmt) \

MATLAB图像操作命令大全

MATLAB常用图像操作 一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 注:计算机E盘上要有w01相应的.tif文件。 2. imwrite imwrite函数用于写入图像文件,如:imwrite(a,'e:\w02.tif',’tif’) 3. imfinfo imfinfo函数用于读取图像文件的有关信息,如:imfinfo('e:\w01.tif') 二. 图像的显示 1. image image函数是MATLAB提供的最原始的图像显示函数(主要彩色显示图象),如:a=[1,2,3,4;4,5,6,7;8,9,10,11,12]; image(a); 2. imshow imshow函数用于灰度图像文件的显示,如: i=imread('e:\w01.tif'); imshow(i); 3. colorbar colorbar函数用显示图像的颜色条。 通常,颜色映象进行过调节,把数据从最小扩展到最大,也就是说整个颜色映象都用于绘图。有时也许想改变颜色使用的方法。函数caxis代表颜色轴,因为颜

色增加了另一个维数,它允许对数据范围的一个子集使用整个颜色映象或者对数据的整个集合只使用当前颜色映象的一部分。 [cmin,cmax]=caxis返回映射到颜色映象中第一和最后输入项的最小和最大的数据。它们通常被设成数据的最小值和最大值。比如,函数mesh(peaks) 会画出函数peaks的网格图,并把颜色轴caxis设为[-6.5466,8.0752],即Z的最小值和最大值。这些值之间的数据点,使用从颜色映象中经插值得到的颜色。如:i=imread('e:\w01.tif'); imshow(i); colorbar; 4 .figure figure函数用于设定图像显示窗口,如:figure(1); /figure(2); 5.imagesc(a); caxis([-3 8]) ; colorbar; 标尺标度从-3,到8 显示标度尺。 三. 图像的变换 1. fft2 fft2函数用于数字图像的二维傅立叶变换,如: i=imread('e:\w01.tif'); j=fft2(i); 2. ifft2 ifft2函数用于数字图像的二维傅立叶反变换,如: i=imread('e:\w01.tif'); j=fft2(i);

matlab图像处理函数汇总(排版后)

matlab图像处理函数汇总 1.applylut 功能: 在二进制图像中利用lookup表进行边沿操作. 语法: A = applylut(BW,lut) 举例 lut = makelut('sum(x(:)) == 4',2); BW1 = imread('text.tif'); BW2 = applylut(BW1,lut); imshow(BW1) figure, imshow(BW2) 相关命令: makelut 2.bestblk 功能:确定进行块操作的块大小. 语法: siz = bestblk([m n],k) [mb,nb] = bestblk([m n],k) 举例 siz = bestblk([640 800],72) siz = 64 50 相关命令: blkproc 3.blkproc MATLAB高级应用——图形及影像处理 320 功能:实现图像的显式块操作. 语法: B = blkproc(A,[m n],fun) B = blkproc(A,[m n],fun,P1,P2,...) B = blkproc(A,[m n],[mborder nborder],fun,...) B = blkproc(A,'indexed',...) 举例 I = imread('alumgrns.tif'); I2 = blkproc(I,[8 8],'std2(x)*ones(size(x))'); imshow(I) figure, imshow(I2,[]); 相关命令: colfilt, nlfilter,inline 4.brighten 功能: 增加或降低颜色映像表的亮度. 语法: brighten(beta) newmap = brighten(beta) newmap = brighten(map,beta) brighten(fig,beta) 相关命令: imadjust, rgbplot 5.bwarea 功能: 计算二进制图像对象的面积. 语法: total = bwarea(BW) 举例 BW = imread('circles.tif'); imshow(BW); 附录 MATLAB图像处理命令 321 bwarea(BW) ans = 15799 相关命令: bweuler, bwperim 6.bweuler. 功能: 计算二进制图像的欧拉数. 语法: eul = bweuler(BW,n) 举例 BW = imread('circles.tif'); imshow(BW); bweuler(BW) ans = -2 相关命令: bwmorph, bwperim 7.bwfill 功能: 填充二进制图像的背景色. 语法: BW2 = bwfill(BW1,c,r,n) BW2 = bwfill(BW1,n) [BW2,idx] = bwfill(...) BW2 = bwfill(x,y,BW1,xi,yi,n)

实验一 常用MATLAB图像处理命令

实验一常用MATLAB图像处理命令 一、实验目的 1、熟悉并掌握MATLAB工具的使用; 2、实现图像的读取、显示、代数运算和简单变换。 二、实验环境 MATLAB 6.5以上版本、WIN XP或WIN2000计算机 三、实验内容(请将实验程序填写在下方合适的位置) 1、读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。 a=imread('f:\1.jpg') i = rgb2gray(a) I = im2bw(a,0.5) subplot(3,1,1);imshow(a);title('原图像') subplot(3,1,2);imshow(i);title('灰度图像') subplot(3,1,3);imshow(I);title('二值图像') 2、对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题。 a=imread('f:\1.jpg') A=imresize(a,[800 800]) b=imread('f:\2.jpg') B=imresize(b,[800 800]) Z1=imadd(A,B) Z2=imsubtract(A,B) Z3=immultiply(A,B) Z4=imdivide(A,B) subplot(3,2,1); imshow(A);title('原图像A') subplot(3,2,2); imshow(B);title('原图像B') subplot(3,2,3); imshow(Z1);title('加法图像') subplot(3,2,4); imshow(Z2);title('减法图像') subplot(3,2,5); imshow(Z3);title('乘法图像') subplot(3,2,6); imshow(Z2);title('除法图像') 3、对一幅图像进行灰度变化,实现图像变亮、变暗和负片效果,在同一个窗口内分成四个子窗口来分别显示,注上文字标题。 a=imread('f:\1.jpg'); m = imadjust(a,[,],[0.5;1]) ;%图像变亮 n = imadjust(a,[,],[0;0.5]) ;%图像变暗 g=255-a;%负片效果 subplot(2,2,1);imshow(a);title('原图像') subplot(2,2,2);imshow(m);title('图像变亮') subplot(2,2,3);imshow(n);title('图像变暗') subplot(2,2,4);imshow(g);title('负片效果')

(完整版)数字图像处理MATLAB程序【完整版】

第一部分数字图像处理

实验一图像的点运算 实验1.1 直方图 一.实验目的 1.熟悉matlab图像处理工具箱及直方图函数的使用; 2.理解和掌握直方图原理和方法; 二.实验设备 1.PC机一台; 2.软件matlab。 三.程序设计 在matlab环境中,程序首先读取图像,然后调用直方图函数,设置相关参数,再输出处理后的图像。 I=imread('cameraman.tif');%读取图像 subplot(1,2,1),imshow(I) %输出图像 title('原始图像') %在原始图像中加标题 subplot(1,2,2),imhist(I) %输出原图直方图 title('原始图像直方图') %在原图直方图上加标题 四.实验步骤 1. 启动matlab 双击桌面matlab图标启动matlab环境; 2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像, 如:cameraman图像;再调用相应的直方图函数,设置参数;最后输出处理后的图像; 3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出; 五.实验结果 观察图像matlab环境下的直方图分布。 (a)原始图像 (b)原始图像直方图 六.实验报告要求 1、给出实验原理过程及实现代码; 2、输入一幅灰度图像,给出其灰度直方图结果,并进行灰度直方图分布原理分析。

实验1.2 灰度均衡 一.实验目的 1.熟悉matlab图像处理工具箱中灰度均衡函数的使用; 2.理解和掌握灰度均衡原理和实现方法; 二.实验设备 1.PC机一台; 2.软件matlab; 三.程序设计 在matlab环境中,程序首先读取图像,然后调用灰度均衡函数,设置相关参数,再输出处理后的图像。 I=imread('cameraman.tif');%读取图像 subplot(2,2,1),imshow(I) %输出图像 title('原始图像') %在原始图像中加标题 subplot(2,2,3),imhist(I) %输出原图直方图 title('原始图像直方图') %在原图直方图上加标题 a=histeq(I,256); %直方图均衡化,灰度级为256 subplot(2,2,2),imshow(a) %输出均衡化后图像 title('均衡化后图像') %在均衡化后图像中加标题 subplot(2,2,4),imhist(a) %输出均衡化后直方图 title('均衡化后图像直方图') %在均衡化后直方图上加标题 四.实验步骤 1. 启动matlab 双击桌面matlab图标启动matlab环境; 2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像, 如:cameraman图像;再调用相应的灰度均衡函数,设置参数;最后输出处理后的图像; 3.浏览源程序并理解含义; 4.运行,观察显示结果; 5.结束运行,退出; 五.实验结果 观察matlab环境下图像灰度均衡结果及直方图分布。 (a)原始图像 (b)均衡化后图像

Matlab图像处理函数汇总

1、图像的变换 ①fft2:fft2函数用于数字图像的二维傅立叶变换,如:i=imread('104_8.tif'); j=fft2(i); ②ifft2::ifft2函数用于数字图像的二维傅立叶反变换,如: i=imread('104_8.tif'); j=fft2(i); k=ifft2(j); 2、模拟噪声生成函数和预定义滤波器 ①imnoise:用于对图像生成模拟噪声,如: i=imread('104_8.tif'); j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声 ②fspecial:用于产生预定义滤波器,如: h=fspecial('sobel');%sobel水平边缘增强滤波器 h=fspecial('gaussian');%高斯低通滤波器 h=fspecial('laplacian');%拉普拉斯滤波器 h=fspecial('log');%高斯拉普拉斯(LoG)滤波器 h=fspecial('average');%均值滤波器 2、图像的增强 ①直方图:imhist函数用于数字图像的直方图显示,如: i=imread('104_8.tif'); imhist(i); ②直方图均化:histeq函数用于数字图像的直方图均化,如: i=imread('104_8.tif'); j=histeq(i); ③对比度调整:imadjust函数用于数字图像的对比度调整,如:i=imread('104_8.tif'); j=imadjust(i,[0.3,0.7],[]); ④对数变换:log函数用于数字图像的对数变换,如: i=imread('104_8.tif'); j=double(i);

Matlab中如何读出写入图像文件以及对图像的简单处理

Matlab中如何读出写入图像文件以及对图像的简单处理imMatrix = imread('name.jpg')%jpg也可以bmp,你的图片格式MATLAB图像处理工具箱支持四种基本图像类型:索引图像、灰度图像、二进制图像和RGB图像。MATLAB直接从图像文件中读取的图像为RGB图像。它存储在三维数组中。这个三维数组有三个面,依次对应于红(Red)、绿(Green)、蓝(Blue)三种颜色,而面中的数据则分别是这三种颜色的强度值,面中的元素对应于图像中的像素点。设所得矩阵为X三维矩阵(256,256,3) ,X(:,:,1)代表红颜色的2维矩阵X(:,:,2)代表绿颜色的2维矩阵, X(:,:,3)代表兰颜色的2维矩阵。[X, map]=imread('34.bmp');r=double(X(:,:,1)); %r是256 x 256的红色信息矩阵 g=double(X(:,:,2)); %g是256 x 256的绿色信息矩阵b=double(X(:,:,3)); %b是256 x 256 的兰色信息矩阵 索引图像数据包括图像矩阵X与颜色图数组map,其中颜色图map是按图像中颜色值进行排序后的数组。对于每个像素,图像矩阵X包含一个值,这个值就是颜色图数组map中的索引。颜色图map为m×3双精度矩阵,各行分别指定红、绿、蓝(R、G、B)单色值,map=[RGB],R、G、B为值域为[0,1]的实数值,m为索引图像包含的像素个数。 对于相同的数据,采用uint8格式比双精度格式节省内存空间,从而更经济。在MATLAB中 如果索引图像的颜色图小于256行,则它的图像矩阵以uint8格式存储,否则以双精度格式存储。 一:imread:从图像文件夹中读取图像。 A = imread(FILENAME,FMT) 读取图像到A,如果文件是包含一灰度图像,A是一二维矩阵,如果文件是包含一真彩色图像(RGB),A是一三维矩阵(M-by-N-by-3)。FILENAME :图像文件名;FMT:图像文件格式; 文件必须在当前目录下,或在Matlab的一路径上。如果imread不能够找到一名称为FILENAME的文件,那么它将找一名为FILENAME.FMT的文件 [X,MAP] = imread(FILENAME,FMT) 把图像FILENAME读入与它相关的图像色彩信息写 入MAP,图像色彩信息值在范围[0,1]中自动地重新调整. [...] = imread(FILENAME)这种方式是试图得到文件的格式从文件所包含的信息。[...] = imread(URL,...)从一Internet URL上读图像URL 必须包含协议(即:"http://"). 1.2数据类型: TIFF的特殊语法: [...] = imread(...,IDX) 从很多图像TIFF文件中读一个图像;IDX是一个整数值,它显示了所读图像在文件中的顺序,例如:如果IDX是3, imread将读文件中的第三个图像。如果省略了这个变量, imread将读文件中的第一个图像. IMREAD支持的图像文件格式:JPEG TIFF GIF BMP PNG HDF PCX XWD ICO CUR RAS PBM PGM PPM 相关信息也可在Matlab中查看:imfinfo, imwrite, imformats, fread, 二:imwrite输出图像 imwrite(A,FILENAME,FMT) 把图像A 写入图像文件FILENAME. imwrite(X,MAP,FILENAME,FMT) 把X和它的相关色彩信息MAP写入FILENAME. imwrite(...,FILENAME) 把图像写入图像文件FILENAME,并推测可能的格式用来做filename的扩展名。扩展名必须是FMT中一合法名. imwrite(...,PARAM1,VAL1,PARAM2,VAL2,...) 不同的参数控制输出文件的各种不同特征。参数要是当前所支持的HDF,JPEG, TIFF, PNG, PBM, PGM, 和PPM 文件

MATLAB 图像处理命令使用共20页

MATLAB 图像处理命令使用 1.MATLAB中图像处理的一些简单函数 A、 imread imread函数用于读入各种图像文件,其一般的用法为 [X,MAP]=imread(‘filename’,‘fmt’) 其中,X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的图像文件(可以加上文件的路径)。 例:[X,MAP]=imread(’flowers.tif’,’tif’); 比较读取二值图像,灰度图像,索引图像,彩色图像的X和MAP的特点,可以利用size函数用来显示数组的维数,了解数据的特点。 B=size(a) 返回数组a 的维数。 B、 imwrite imwrite函数用于输出图像,其语法格式为: imwrite(X,map,filename,fmt) imwrite(X,map,filename,fmt)按照fmt指定的格式将图像数据矩阵X 和调色板map写入文件filename。 C、 imfinfo imfinfo函数用于读取图像文件的有关信息,其语法格式为 imfinfo(filename,fmt)

imfinfo函数返回一个结构info,它反映了该图像的各方面信息,其主要数据包括:文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图像的类型等。 2.MATLAB中图像文件的显示 imshow imshow函数是最常用的显示各种图像的函数,其语法如下: imshow(X,map) 其中X是图像数据矩阵,map是其对应的颜色矩阵,若进行图像处理后不知道图像数据的值域可以用[]代替map。 (1)二进制(二值)图像显示方法,在MATLAB中一幅二值图像是uint8或双精度的,该矩阵仅包含0和1。如果希望工具箱中的函数能将图像理解为二进制的,那么所有数据都要是逻辑数据,必须对其进行设置(将所有数据标志均设置on).可以对数据利用“~”取反操作实现图像逆转即黑白反色。 (2)灰度图像的显示方法,正常情况下无需指定灰度图像的调色板格式。可以是使用imshow函数指定要显示灰度级数目,格式 imshow(I,n),n 为指定的灰度级数目。用户也可以指定数据的范围,格式imshow(I,[low high])其中low 和high参数分别为数据数组的最小值和最大值。如果为空矩阵([]),那么imshow函数将自动进行数据标度。 (3)索引图像,imshow(x,map)对于x的每个个像素,imshow显示存储map中相应行的颜色。

Matlab图像处理输入与输出基本操作

实验一、图像输入与输出基本操作 一、实验题目: 图像输入与输出操作 二、实验目的 学习在MATLAB环境下对图像文件的I/O操作,为读取各种格式的图像文件和后续进行图像处理打下基础。 三、实验内容 利用MATLAB为用户提供的专门函数从图像格式的文件中读/写图像数据、显示图像,以及查询图像文件的信息。 四、预备知识 熟悉MATLAB开发环境。 五、实验原理 (1)图像文件的读取 利用imread函数可以完成图像文件的读取操作。常用语法格式为: I=imread(‘filename’,‘fmt’)或I=imread(‘filename.fmt’); 其作用是将文件名用字符串filename表示的、扩展名用字符串fmt(表示图像文件格式)表示的图像文件中的数据读到矩阵I中。当filename中不包含任何路径信息时,imread会从当前工作目录中寻找并读取文件。要想读取指定路径中的图像,最简单的方法就是在filename中输入完整的或相对的地址。MATLAB支持多种图像文件格式的读、写和显示。因此参数fmt常用的可能值有: ‘bmp’Windows位图格式 ‘jpg’or‘jpeg’联合图像专家组格式 ‘tif’or‘tiff’标志图像文件格式 ‘gif’图形交换格式 ‘pcx’Windows画刷格式 ‘png’可移动网络图形格式 ‘xwd’X Window Dump格式

例如,命令行 >>I=imread(‘lena.jpg’); 将JPEG图像lena读入图像矩阵I中。 (2)图像文件的写入(保存) 利用imwrite完成图像的输出和保存操作,也完全支持也完全支持上述各种图像文件的格式。其语法格式为: imwrite(I,‘filename’,‘fmt’)或imwrite(I,‘filename.fmt’); 其中的I、filename和fmt的意义同上所述。 注意事项:当利用imwrite函数保存图像时,MATLAB默认的保存方式是将其简化为uint8的数据类型。与读取文件类型类似,MATLAB在文件保存时还支持16位的PNG和TIFF图像。所以,当用户保存这类文件时,MATLAB就将其存储在uint16中。 (3)图像文件的显示 图像的现实过程是将数字图像从一组离散数据还原为一幅可见图像的过程。MATLAB的的图像处理工具箱提供了多种图像显示技术。例如imshow可以直接从文件显示多种图像;image函数可以将矩阵作为图像;colorbar函数可以用来显示颜色条;montage函数可以动态显示图像序列。这里仅对常用的显示函数进行介绍。 ①图像的显示 imshow函数是最常用的显示各种图像的函数,其调用格式如下: imshow(I,N); imshow(I,N)用于显示灰度图像,其中I为灰度图像的数据矩阵,N为灰度级数目,默认值为256。 例如下面的语句用于显示一幅灰度图像: >> I=imread(‘lena.jpg’); >> imshow(I); 如果不希望在显示图像之前装载图像,那么可以使用以下格式直接进行图像文件的显示: imshow filename 其中,filename为要显示的图像文件的文件名。

MATLAB图像处理命令详解

% imshow imshow是用来显示图片的,如 >> I = imread('moon.tif'); >> figure,imshow(I); 而有时为了数据处理,要把读取的图片信息转化为更高的精度, >> I = double(imread('moon.tif')); 为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型。如果直接运行imshow(I),我们会发现显示的是一个白色的图像。这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。而经过运算的范围在0-255之间的double型数据就被不正常得显示为白色图像了。 有两个解决方法: 1> imshow(I/256); -----------将图像矩阵转化到0-1之间 2> imshow(I,[]); -----------自动调整数据的范围以便于显示. 从实验结果看两种方法都解决了问题,但是从显示的图像看,第二种方法显示的图像明暗黑白对比的强烈些! +++++++++++++++++++++++++++++++++++++++ IMSHOW(I) displays the grayscale image I. IMSHOW(I,[LOW HIGH]) displays the grayscale image I, specifying the display range for I in [LOW HIGH]. The value LOW (and any value less than LOW) displays as black, the value HIGH (and any value greater than HIGH) displays as white. Values in between are displayed as intermediate shades of gray,using the default number of gray levels. If you use an empty matrix ([]) for[LOW HIGH], IMSHOW uses [min(I(:)) max(I(:))]; that is, the minimum value in I is displayed as black, and the maximum value is displayed as white. +++++++++++++++++++++++++++++++++++++++ 图像为y,为何用imshow(uint8(y))和imshow(y,[])时的图像显示结果不同? 回答: imshow(uint8(y))是按照256级灰度显示y得绝对数据。0表示黑色,255表示白色,y中大于255的值强制为255。 imshow(y,[]),将y中的最小值看作0(black),最大值看作255(white) -->增加图像的对比度。所以两者不同。 % padarray 功能:填充图像或填充数组。 用法:B = padarray(A,padsize,padval,direction) A为输入图像,B为填充后的图像, padsize给出了给出了填充的行数和列数,通常用[r c]来表示, padval和direction分别表示填充方法和方向。

数字图像处理及MATLAB实现

MATLAB数字图像处理 1 概述 BW=dither(I)灰度转成二值图; X=dither(RGB,map)RGB转成灰度图,用户需要提供一个Colormap; [X,map]=gray2ind(I,n)灰度到索引; [X,map]=gray2ind(BW,n)二值图到索引,map可由gray(n)产生。灰度图n默认64,二值图默认2; X=graylice(I,n)灰度图到索引图,门限1/n,2/n,…,(n-1)/n,X=graylice(I,v)给定门限向量v; BW=im2bw(I,level)灰度图I到二值图; BW=im2bw(X,map,level)索引图X到二值图;level是阈值门限,超过像素为1,其余置0,level在[0,1]之间。 BW=im2bw(RGB,level)RGB到二值图; I=ind2gray(X,map)索引图到灰度图; RGB=ind2rgb(X,map)索引图到RGB; I=rgb2gray(RGB)RGB到灰度图。 2 图像运算 2.1 图像的读写 MATLAB支持的图像格式有bmp,gif,ico,jpg,png,cur,pcx,xwd和tif。 读取(imread): [1] A=imread(filename,fmt) [2] [X,map]=imread(filename,fmt) [3] […]=imread(filename) [4] […]=imread(URL,…) 说明:filename是图像文件名,如果不在搜索路径下应是图像的全路径,fmt是图像文件扩展名字符串。前者可读入二值图、灰度图、彩图(主要是RGB);第二个读入索引图,map 为索引图对应的Colormap,即其相关联的颜色映射表,若不是索引图则map为空。URL表示引自Internet URL中的图像。 写入(imwrite): [1] R=imwrite(A,filename,fmt); [2] R=imwrite(X,map,filename,fmt); [3] R=imwrite(…,filename); [4] R=imwrite(…,Param1,V al1,Param2,Val2) 说明:针对第四个,该语句用于指定HDF,JPEG,PBM,PGM,PNG,PPM,TIFF等类型输出文件的不同参数。例如HDF的Quality,Compression,WriteMode;JPEG的BitDepth,Comment:Empty or not,Mode:lossy or lossless,Quality等。 2.2 图像的显示 方法1:使用Image Viewer(图像浏览器),即运用imview函数。 同时显示多帧图像的所有帧,可用到montage函数。

matlab读入图像方法

MATLAB图像处理工具箱支持四种基本图像类型:索引图像、灰度图像、二进制图像和RGB 图像。MATLAB直接从图像文件中读取的图像为RGB图像。它存储在三维数组中。这个三维数组有三个面,依次对应于红(Red)、绿(Green)、蓝(Blue)三种颜色,而面中的数据则分别是这三种颜色的强度值,面中的元素对应于图像中的像素点。设所得矩阵为X三维矩阵(256,256,3) ,X(:,:,1)代表红颜色的2维矩阵X(:,:,2)代表绿颜色的2维矩阵, X(:,:,3)代表兰颜色的2维矩阵。[X, map]=imread('34.bmp');r=double(X(:,:,1)); %r是256 x 256的红色信息矩阵g=double(X(:,:,2)); %g是256 x 256的绿色信息矩阵b=double(X(:,:,3)); %b是256 x 256的兰色信息矩阵 索引图像数据包括图像矩阵X与颜色图数组map,其中颜色图map是按图像中颜色值进行排序后的数组。对于每个像素,图像矩阵X包含一个值,这个值就是颜色图数组map中的索引。颜色图map为m×3双精度矩阵,各行分别指定红、绿、蓝(R、G、B)单色值,map=[RGB],R、G、B为值域为[0,1]的实数值,m为索引图像包含的像素个数。 对于相同的数据,采用uint8格式比双精度格式节省内存空间,从而更经济。在MATLAB中 如果索引图像的颜色图小于256行,则它的图像矩阵以uint8格式存储,否则以双精度格式存储。 一:imread:从图像文件夹中读取图像。 A = imread(FILENAME,FMT) 读取图像到A,如果文件是包含一灰度图像,A是一二维矩阵,如果文件是包含一真彩色图像(RGB),A是一三维矩阵(M-by-N-by-3)。FILENAME :图像文件名;FMT:图像文件格式; 文件必须在当前目录下,或在Matlab的一路径上。如果imread不能够找到一名称为FILENAME的文件,那么它将找一名为FILENAME.FMT的文件 [X,MAP] = imread(FILENAME,FMT) 把图像FILENAME读入与它相关的图像色彩信息写 入MAP,图像色彩信息值在范围[0,1]中自动地重新调整. [...] = imread(FILENAME)这种方式是试图得到文件的格式从文件所包含的信息。 [...] = imread(URL,...)从一Internet URL上读图像URL 必须包含协议(即:"http://"). 1.2数据类型: TIFF的特殊语法: [...] = imread(...,IDX) 从很多图像TIFF文件中读一个图像;IDX是一个整数值,它显示了所读图像在文件中的顺序,例如:如果IDX是3, imread将读文件中的第三个图像。如果省略了这个变量, imread将读文件中的第一个图像. IMREAD支持的图像文件格式:JPEG TIFF GIF BMP PNG HDF PCX XWD ICO CUR RAS PBM PGM PPM 相关信息也可在Matlab中查看:imfinfo, imwrite, imformats, fread, 二:imwrite输出图像 imwrite(A,FILENAME,FMT) 把图像A 写入图像文件FILENAME. imwrite(X,MAP,FILENAME,FMT) 把X和它的相关色彩信息MAP写入FILENAME.

MATLAB图像处理命令_百度文库.

MA TLAB 图像处理命令 % imshow imshow 是用来显示图片的,如 >> I = imread('moon.tif'; >> figure,imshow(I; 而有时为了数据处理,要把读取的图片信息转化为更高的精度, >> I = double(imread('moon.tif'; 为了保证精度,经过了运算的图像矩阵 I 其数据类型会从 unit8型变成 double 型。如果直接运行 imshow(I,我们会发现显示的是一个白色的图像。这是因为imshow(显示图像时对 double 型是认为在 0~1范围内,即大于 1时都是显示为白色,而 imshow 显示 uint8型时是 0~255范围。而经过运算的范围在 0-255之间的double 型数据就被不正常得显示为白色图像了。 有两个解决方法: 1> imshow(I/256; -----------将图像矩阵转化到 0-1之间 2> imshow(I,[];-----------自动调整数据的范围以便于显示 . 从实验结果看两种方法都解决了问题, 但是从显示的图像看, 第二种方法显示的图像明暗黑白对比的强烈些! +++++++++++++++++++++++++++++++++++++++ IMSHOW(I displays the grayscale image I. IMSHOW(I,[LOW HIGH] displays the grayscale image I, specifying the display

range for I in [LOW HIGH]. The value LOW (and any value less than LOW displays as black, the value HIGH (and any value greater than HIGH displays as white. Values in between are displayed as intermediate shades of gray,using the default number of gray levels. If you use an empty matrix ([] for[LOW HIGH], IMSHOW uses [min(I(: max(I(:]; that is, the minimum value in I is displayed as black, and the maximum value is displayed as white. +++++++++++++++++++++++++++++++++++++++ 图像为 y, 为何用 imshow(uint8(y和 imshow(y,[]时的图像显示结果不同? 回答 : imshow(uint8(y是按照 256级灰度显示 y 得绝对数据。 0表示黑色, 255表示白色, y 中大于 255的值强制为 255。 imshow(y,[], 将 y 中的最小值看作 0(black, 最大值看作 255(white -->增加图像的对比度。 所以两者不同。 % padarray 功能:填充图像或填充数组。 用法:B = padarray(A,padsize,padval,direction A 为输入图像, B 为填充后的图像 , padsize 给出了给出了填充的行数和列数,通常用 [r c]来表示 , padval 和 direction 分别表示填充方法和方向。

相关文档
最新文档