原文地址:http://apps.hi.baidu.com/share/detail/55237997
图像处理函数详解——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 = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
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 = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
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 = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
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)色图范围为[low high],返回这些像素选择区域。BW为大小和A相同的数组,若A中元素值在[low high]范围内,则返回值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。顾名思义:它的用途是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.324,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.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-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.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, 1 1 0 0 0 01 1 0 0 0 00 0 0 0 0 00 0 0 0 1 10 0 0 0 1 1bwlabel 创建一个包含两个分别由整数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给出了给出了填充的行数和列数,通常用[r c]来表示。padval和direction分别表示填充方法和方向。它们的具体值和描述如下:
padval:'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;
'replicate'表示图像大小通过复制外边界中的值来扩展;
'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
direction:'pre'表示在每一维的第一个元素前填充;
'post'表示在每一维的最后一个元素后填充;
'both'表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。
若参量中不包括direction,则默认值为'both'。若参量中不包含padval,则默认用零来填充。若参量中不包括任何参数,则默认填充为零且方向为'both'。在计算结束时,图像会被修剪成原始大小。
举例:
A = [1 2; 3 4];
B = padarray(A,[3 2],'replicate','post')
图像处理函数详解——nlfilter
功能:用来执行通用的滑动邻域操作。
用法:B = nlfilter(A,[m n],fun)
B = nlfilter(A,[m n],fun,P1,P2,...)
B = nlfilter(A,'indexed',...)
B = nlfilter(A,[m n],fun)表示对图像A的每一个m*n滑块应用函数fun。fun函数必须接受m*n块作为输入,并返回一个标量y,形如:
c=fun(x)
c为m*n块x的中心像素点的输入值。
例子:B = nlfilter(A,[3 3],@myfun);
其中myfun是以m文件如下:
function scalar = 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));
for frame=1:27
[mri(:,:,:,frame),map]=imread('mri.tif',frame);
%把每一帧读入内存中
end
montage(mri,map);
函数详解——mat2gray
功能:将矩阵转化为灰度图像。
用法:I = mat2gray(A,[amin amax]) 把一个double类的任意数组转换成取值范围为[0 1]的亮度图像。其中图像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_opened = imopen(I,se);
imview(I_opened,[])
图像处理函数详解——imerode
功能:对图像实现腐蚀操作,即膨胀操作的反操作。
用法:IM2 = imerode(IM,SE)
IM2 = imerode(IM,NHOOD)
IM2 = imerode(IM,SE,PACKOPT,M)
IM2 = imerode(...,PADOPT)
IM2 = imerode(IM,SE) 腐蚀灰度,二值,压缩二值图像IM,返回IM2。参数SE为由strel函数返回的结构元素或者结构元素对象组。
IM2 = imerode(IM,NHOOD)腐蚀图像IM,这里NHOOD是定义结构元素邻域0和1的矩阵。
IM2 = imerode(...,PADOPT)指出输出图像的大小(是否与输入图像大小一致)。
例子:
originalBW = imread('circles.png');
se = strel('disk',11);
erodedBW = imerode(originalBW,se);
imview(originalBW), imview(erodedBW)
图像处理函数详解——imdilate
功能:对图像实现膨胀操作。
用法:IM2 = imdilate(IM,SE)
IM2 = imdilate(IM,NHOOD)
IM2 = imdilate(IM,SE,PACKOPT)
IM2 = imdilate(...,PADOPT)
IM2 = imdilate(IM,SE) 膨胀灰度,二值,压缩二值图像IM,返回IM2。参数SE为由strel函数返回的结构元素或者结构元素对象组。
IM2 = imdilate(IM,NHOOD)膨胀图像IM,这里NHOOD是定义结构元素邻域0和1的矩阵。
IM2 = imdilate(IM,SE,PACKOPT)定义IM是否是一个压缩的二值图像。
IM2 = imdilate(...,PADOPT)指出输出图像的大小。
例子:
I = imread('cameraman.tif');
se = strel('ball',5,5);
I2 = imdilate(I,se);
imshow(I), title('Original')
figure, imshow(I2), title('Dilated')
图像处理函数详解——imresize
功能:改变图像的大小。
用法:B = imresize(A,m)
B = imresize(A,m,method)
B = imresize(A,[mrows ncols],method)
B = imresize(...,method,n)
B = imresize(...,method,h)
imrersize函数使用由参数method指定的插值运算来改变图像的大小。method的几种可选值:
'nearest'(默认值)最近邻插值
'bilinear'双线性插值
'bicubic'双三次插值
B = imresize(A,m)表示把图像A放大m倍
B = imresize(...,method,h)中的h可以是任意一个FIR滤波器(h通常由函数ftrans2、fwind1、fwind2、或fsamp2等生成的二维FIR滤波器)。
例子:I = imread('circuit.tif');
J =imresize(I,1.25);
%使用默认的最近邻插值法放大图像1.25倍
imshow(I)
figure, imshow(J)
图像处理函数详解——imnoise
功能:模仿噪声信息,相当于图像的相加运算。
用法:J = imnoise(I,type)
J = imnoise(I,type,parameters)
参数Type对应的噪声类型如下:
'gaussian'高斯白噪声
'localvar'0均值白噪声
'poisson'泊松噪声
'salt & pepper'盐椒噪声
'speckle'乘性噪声
例子:I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);
%密度0.02的盐椒噪声
imshow(I)
figure, imshow(J)
图像处理函数详解——imhist
功能:显示图像的直方图。
输入数据类型可以是无符号8位、16位、有符号16位、单精浮点、字符型、逻辑型等数据。
用法:
imhist(I,n) 计算和显示图像I的直方图,n为指定的灰度级数目,默认为256。如果I是二值图像,那么n仅有两个值。
imhist(X,map) 计算和显示索引图像x的直方图,map为调色板。
[counts,x] = imhist(...) 返回直方图数据向量counts或相应的色彩值向量x。
举例:
I=imread('rice.tif')
imshow(I)
figure,imhist(I)
图像处理函数详解——imfinfo
功能:获取图像文件的信息
用法:info = imfinfo(filename,fmt)
info = imfinfo(filename)
参数fmt对应于图像处理工具箱中所有支持的图像文件格式(如'bmp','jpg'等等)
例子:info = imfinfo('canoe.tif')
info =
Filename:'canoe.tif'
FileModDate: '25-Oct-1996 22:10:39'
FileSize: 69708
Format: 'tif'
FormatVersion: []
Width: 346
Height: 207
BitDepth: 8
ColorType: 'indexed'
FormatSignature: [73 73 42 0]
ByteOrder: 'little-endian'
NewSubfileType: 0
BitsPerSample: 8
Compression: 'PackBits'
PhotometricInterpretation: 'RGB Palette'
StripOffsets: [9x1 double]
SamplesPerPixel: 1
RowsPerStrip: 23
StripByteCounts: [9x1 double]
XResolution: 72
YResolution: 72
ResolutionUnit: 'Inch'
Colormap: [256x3 double]
PlanarConfiguration: 'Chunky'
TileWidth: []
TileLength: []
TileOffsets: []
TileByteCounts: []
Orientation: 1
FillOrder: 1
GrayResponseUnit: 0.0100
MaxSampleValue: 255
MinSampleValue: 0
Thresholding: 1
图像处理函数详解——imcomplement
功能:对图像进行求反运算。
用法:IM2 = imcomplement(IM)
计算图像IM的负片。图像IM可以是二值图像、灰度图像、或者RGB图像。IM2和IM类型相同。
例子:
X = uint8([ 255 10 75; 44 225 100]);
X2 = imcomplement(X)
X2 =
0 245 180
211 30 155
bw = imread('text.png');
bw2 = imcomplement(bw);
subplot(1,2,1),imshow(bw)
subplot(1,2,2),imshow(bw2)
I = imread('glass.png');
J = imcomplement(I);
imshow(I), figure, imshow(J)
图像处理函数详解——imapprox
功能:减少索引图像的色彩数,能够指定新色图的色彩数。即对索引图像进行近似处理。
用法:[Y,newmap] = imapprox(X,map,n)
[Y,newmap] = imapprox(X,map,tol)
Y = imapprox(X,map,newmap)
[...] = imapprox(...,dither_option)
[Y,newmap] = imapprox(X,map,n)表示把索引图像和色图map进行最小值量化逼近。函数返回索引图像和新的色图newmap,色图至多有n种色彩。
[Y,newmap] = imapprox(X,map,tol) 表示把索引图像和色图map进行均衡量化逼近。新色图newmap至多有(floor(1/tol)+1)^3种色彩,tol的范围必须为[0,1.0]。
例子:[X, map] = imread('trees.tif');
[Y, newmap] = imapprox(X, map, 16);
imview(Y, newmap)