MATLAB中图像函数大全 详解及例子.docx
- 文档编号:10995427
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:93
- 大小:43.84KB
MATLAB中图像函数大全 详解及例子.docx
《MATLAB中图像函数大全 详解及例子.docx》由会员分享,可在线阅读,更多相关《MATLAB中图像函数大全 详解及例子.docx(93页珍藏版)》请在冰豆网上搜索。
MATLAB中图像函数大全详解及例子
图像处理函数详解——strel
功能:
用于膨胀腐蚀及开闭运算等操作的结构元素对象(本论坛随即对膨胀腐蚀等操作进行讲解)。
用法:
SE=strel(shape,parameters)
创建由指定形状shape对应的结构元素。
其中shape的种类有
arbitrary'
'pair'
'diamond'
'periodicline'
'disk'
'rectangle'
'line'
'square'
'octagon
参数parameters一般控制SE的大小。
例子:
se1=strel('square',6)
%创建6*6的正方形
se2=strel('line',10,45)
%创建直线长度10,角度45
se3=strel('disk',15)
%创建圆盘半径15
se4=strel('ball',15,5)
%创建椭圆体,半径15,高度5
图像处理函数详解——roipoly
功能:
用于选择图像中的多边形区域。
用法:
BW=roipoly(I,c,r)
BW=roipoly(I)
BW=roipoly(x,y,I,xi,yi)
[BW,xi,yi]=roipoly(...)
[x,y,BW,xi,yi]=roipoly(...)
BW=roipoly(I,c,r)表示用向量c、r指定多边形各点的X、Y坐标。
BW选中的区域为1,其他部分的值为0.
BW=roipoly(I)表示建立交互式的处理界面。
BW=roipoly(x,y,I,xi,yi)表示向量x和y建立非默认的坐标系,然后在指定的坐标系下选择由向量xi,yi指定的多边形区域。
例子:
I=imread('eight.tif');
c=[222272300270221194];
r=[21217512112175];
BW=roipoly(I,c,r);
imshow(I)
figure,imshow(BW)
图像处理函数详解——roifilt2
功能:
用于对一个区域进行滤波。
用法:
J=roifilt2(h,I,BW)
J=roifilt2(I,BW,fun)
J=roifilt2(I,BW,fun,P1,P2,...)
J=roifilt2(h,I,BW)表示使用滤波器h对图像I中用二值掩模BW选中的区域滤波。
BW为和I大小相同的二值图像。
J=roifilt2(I,BW,fun,P1,P2,...)表示用fun函数处理区域滤波图像I。
参数P1、P2等为fun函数的输入参数。
例子:
I=imread('eight.tif');
c=[222272300270221194];
r=[21217512112175];
BW=roipoly(I,c,r);
h=fspecial('unsharp');
%指定滤波器
J=roifilt2(h,I,BW);
imshow(J),figure,imshow(J)
图像处理函数详解——roifill
(ROI——region-of-interest)
功能:
对指定区域进行填充。
用法:
J=roifill(I,c,r)
J=roifill(I)
[J,BW]=roifill(...)
J=roifill(x,y,I,xi,yi)
[x,y,J,BW,xi,yi]=roifill(...)
J=roifill(I,c,r)填充由向量c,r指定的多边形,c和r分别为多边形的各顶点X、Y坐标。
可用于擦除图像中的小物体。
J=roifill(I)用于交互式处理界面。
J=roifill(I,BW)用BW(和I大小一致)掩模填充此区域。
如果为多个多边形,则分别执行插值填充。
例子:
I=imread('eight.tif');
c=[222272300270221194];
r=[21217512112175];
J=roifill(I,c,r);
imshow(I)
figure,imshow(J)
图像处理函数详解——roicolor
功能:
可以根据颜色选定区域。
用法:
BW=roicolor(A,low,high)
BW=roicolor(A,v)
BW=roicolor(A,low,high)色图范围为[lowhigh],返回这些像素选择区域。
BW为大小和A相同的数组,若A中元素值在[lowhigh]范围内,则返回值1,否则返回0.
BW=roicolor(A,v)返回图像A中像素与向量v相匹配的区域,BW为二值图像,1值为A中与v相匹配的地方。
例子:
I=imread('rice.png');
BW=roicolor(I,128,255);
imshow(I);
figure,imshow(BW)
matlab图像处理函数详解——rgb2gray
功能:
将真彩色图像转换成灰度图像或者将彩色色图转换成灰度色图。
用法:
I=rgb2gray(RGB)
newmap=rgb2gray(map)
I=rgb2gray(RGB)将真彩色图像RGB转换成灰度图像I
newmap=rgb2gray(map)将彩色色图map转换成灰度色图newmap
例子:
X=imread(‘peppers.png’);
BW=rgb2gray(X);
imview(BW)
Matlab图像处理函数:
regionprops
这里给出在Matlab图像处理工具箱中非常重要的一个图像分析函数:
regionprops。
顾名思义:
它的用途是getthepropertiesofregion,即用来度量图像区域属性的函数。
语法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.324,4.8187,1.5111]/10000.'BoundingBox'是1行ndims(L)*2列的向量,即包含相应区域的最小矩形。
BoundingBox形式为[ul_cornerwidth],这里ul_corner以[xyz...]的坐标形式给出边界盒子的左上角、boxwidth以[x_widthy_width...]形式指出边界盒子沿着每个维数方向的长度。
本例的各部分区域最小矩形如下图!
注意:
请在这熟悉一下函数rectangle的使用方法。
'Centroid'是1行ndims(L)列的向量,给出每个区域的质心(重心)。
注意:
Centroid的第一个元素是重心水平坐标(x坐标)、第二个元素是重心垂直坐标(y坐标)。
Centroid所有其它元素则按照维顺序排列。
下图采用以中心为圆心的小圆来演示质心检测的效果:
图中各质心坐标(标准化后的)依次为:
(x,y)=0.10478,0.767390.11883,0.0815450.19586,0.610920.30701,0.308070.65712,0.316130.73165,0.305310.74548,0.353780.80624,0.728020.84546,0.615640.90554,0.0795740.93477,0.778710.97611,0.15576'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维标注矩阵。
例如:
本例中的所有子区域的最小凸多边形图形如下图
看看第2个区域的大图。
'ConvexImage'二值图像,用来画出上述的区域最小凸多边形。
同时此凸包内的像素均打开,图像尺寸和此区域对应边界矩形相同。
此属性只支持2维标注矩阵。
例如:
本例中的第2个子区域的最小凸多边形图形为。
注意:
此处函数roipoly很有用!
'ConvexArea'是标量,填充区域凸多边形图像中的on像素个数。
'EulerNumber'是标量,几何拓扑中的一个拓扑不变量--欧拉数,等于图像中目标个数减去这些目标中空洞的个数。
此属性只支持2维标注矩阵。
本例中的欧拉数均为1。
'Extrema'8行2列矩阵,八方向区域极值点。
矩阵每行存储这些点的xy坐标,向量格式为[top-lefttop-rightright-topright-bottombottom-rightbottom-leftleft-bottomleft-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.9612,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).Areastats.Area因此,可以使用下面的方法创建相应的向量:
regionprops(L,'Area');allArea=[stats.Area];allArea就是一个与结构数组stats具备相同长度的向量。
基于特定原则的区域选择当你要基于特定准则条件选择某个区域时,将函数ismember和regionprops联合使用是很有用处的。
例如:
创建一个只包含面积大于80的二值图像,用以下命令idx=find([stats.Area]>80);BW2=ismember(L,idx);计算性能考虑大多数的属性测量计算时间都非常地少,除了那些非常依赖于图像L中区域个数和像素个数的属性。
例如:
'ConvexHull''ConvexImage''ConvexArea''FilledImage'另外建议一次性计算所有属性值,因为分开计算和一起计算时间相差无几!
使用二值图像工作在调用regionprops之前必须将二值图像转变为标注矩阵。
两个函数可以做到:
L=bwlabel(BW);L=double(BW);注意:
虽然这两个函数从同一二值图像产生不同的标注矩阵,但是它们是等效的!
例如:
给出如下的二值矩阵BW,110000110000000000000011000011bwlabel创建一个包含两个分别由整数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 2double创建一个包含一个由整数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 1regionprops并不负责自动转换二值图像数据类型,而是由你自己决定使用何种数据转换方法来存储自己想要的数据。
regionprops函数的扩展思路在regionprops函数的基础上,你可以使用它提供的基本数据来扩展它的功能,比如我就将区域的曲率数据和骨架数据作为它的另外属性值来开发,从而希望它能用来做更细致的特征提取。
图像处理函数详解——padarray
功能:
填充图像或填充数组。
用法:
B=padarray(A,padsize,padval,direction)
A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[rc]来表示。
padval和direction分别表示填充方法和方向。
它们的具体值和描述如下:
padval:
'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;
'replicate'表示图像大小通过复制外边界中的值来扩展;
'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
direction:
'pre'表示在每一维的第一个元素前填充;
'post'表示在每一维的最后一个元素后填充;
'both'表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。
若参量中不包括direction,则默认值为'both'。
若参量中不包含padval,则默认用零来填充。
若参量中不包括任何参数,则默认填充为零且方向为'both'。
在计算结束时,图像会被修剪成原始大小。
举例:
A=[12;34];
B=padarray(A,[32],'replicate','post')
图像处理函数详解——nlfilter
功能:
用来执行通用的滑动邻域操作。
用法:
B=nlfilter(A,[mn],fun)
B=nlfilter(A,[mn],fun,P1,P2,...)
B=nlfilter(A,'indexed',...)
B=nlfilter(A,[mn],fun)表示对图像A的每一个m*n滑块应用函数fun。
fun函数必须接受m*n块作为输入,并返回一个标量y,形如:
c=fun(x)
c为m*n块x的中心像素点的输入值。
例子:
B=nlfilter(A,[33],@myfun);
其中myfun是以m文件如下:
functionscalar=myfun(x)
scalar=median(x(:
));
图像处理函数详解——montage
功能:
在同一时间显示多帧图像中的所有帧。
用法:
montage(I)
montage(BW)
montage(X,map)
montage(RGB)
h=montage(...)
montage(I) ——显示灰度图像I共k帧,I为m*n*1*k的数组
montage(BW)——显示二值图像I共k帧,I为m*n*1*k的数组
montage(X,map)——显示索引图像I共k帧,色图由map指定为所有的帧图像的色图,X为m*n*1*k的数组
montage(RGB)——显示真彩色图像GRB共k帧,RGB为m*n*3*k的数组
例子:
mri=uint8(zeros(128,128,1,27));
forframe=1:
27
[mri(:
:
:
frame),map]=imread('mri.tif',frame);
%把每一帧读入内存中
end
montage(mri,map);
函数详解——mat2gray
功能:
将矩阵转化为灰度图像。
用法:
I=mat2gray(A,[aminamax]) 把一个double类的任意数组转换成取值范围为[01]的亮度图像。
其中图像I的取值范围也在0(黑色)到1(白色)之间。
参数amin和amax表示将A中小于amin的值转换为0,将A中大于amax的值转换为1。
I=mat2gray(A) 将矩阵A中实际最小值和最大值分别赋给amin和amax。
举例:
I=imread('rice.png');
J=filter2(fspecial('sobel'),I);
K=mat2gray(J);
imshow(I),figure,imshow(K)
图像处理函数详解——imclose
功能:
对图像实现闭运算,闭运算也能平滑图像的轮廓,但与开运算相反,它一般融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
用法:
IM2=imclose(IM,SE)
IM2=imclose(IM,NHOOD)
用法和imopen相同,请在本论坛查找!
例子:
originalBW=imread('circles.png');
se=strel('disk',10);
closeBW=imclose(originalBW,se);
imview(closeBW)
图像处理函数详解——imopen
功能:
对图像实现开运算,开运算一般能平滑图像的轮廓,消弱狭窄的部分,去掉细的突出。
用法:
IM2=imopen(IM,SE)
IM2=imopen(IM,NHOOD)
IM2=imopen(IM,SE)用结构元素SE实现灰度图像或二值图像的IM的形态开运算。
SE可以是单个结构元素对象或者结构元素对象数组。
IM2=imopen(IM,NHOOD)用结构元素strel(NHOOD)执行开运算。
例子:
I=imread('snowflakes.png');
se=strel('disk',5);
I
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB中图像函数大全 详解及例子 MATLAB 图像 函数 大全 详解 例子
![提示](https://static.bdocx.com/images/bang_tan.gif)