图像处理函数详解——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
11
路漫漫其修远兮,吾将上下而求索 -
图像处理函数详解——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)
22
路漫漫其修远兮,吾将上下而求索 -
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)
33
路漫漫其修远兮,吾将上下而求索 -
[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);
44
路漫漫其修远兮,吾将上下而求索 -
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
55
路漫漫其修远兮,吾将上下而求索 -
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 ...] 形式指出边界盒子沿着每个维数方向的长度。本例的各
66
路漫漫其修远兮,吾将上下而求索 -
部分区域最小矩形如下图!注意:请在这熟悉一下函数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列矩阵,八
77
路漫漫其修远兮,吾将上下而求索 -
方向区域极值点。矩阵每行存储这些点的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
88
路漫漫其修远兮,吾将上下而求索 -
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
99
路漫漫其修远兮,吾将上下而求索 -
功能:用来执行通用的滑动邻域操作。 用法: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的数组
1010
路漫漫其修远兮,吾将上下而求索 -
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相同,请在本论坛查找!
1111
路漫漫其修远兮,吾将上下而求索 -
例子:
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)
1212
路漫漫其修远兮,吾将上下而求索 -
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);
1313
路漫漫其修远兮,吾将上下而求索 -
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
1414
路漫漫其修远兮,吾将上下而求索 -
功能:模仿噪声信息,相当于图像的相加运算。 用法: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。
1515
路漫漫其修远兮,吾将上下而求索 -
举例:
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
1616
路漫漫其修远兮,吾将上下而求索 -
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
1717
路漫漫其修远兮,吾将上下而求索 -
功能:对图像进行求反运算。 用法: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)
1818
路漫漫其修远兮,吾将上下而求索 -
[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)
图像处理函数详解——imadjust 功能:
调节灰度图像的亮度或彩色图像的颜色矩阵。 用法:
J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
将图像I中的亮度值映射到J中的新值,即将low_in至hige_in之间的值映射到low_out至high_out之间的值。low_in以下与 high_in以上的值被剪切掉了,也就是说,low_in以下的值映射到low_out,high_in以上的值映射到high_out。它们都可以使 用空的矩阵[],默认值是[0 1]。 newmap = imadjust(map,[low_in high_in],[low_out high_out],gamma)
调整索引色图像的调色板map。
RGB2 = imadjust(RGB1,[low_in high_in],[low_out high_out],gamma)
对RGB图像1的红、绿、蓝调色板分别进行调整。随着颜色矩阵的调整,每一个调色板都有唯一的映射值。
1919
路漫漫其修远兮,吾将上下而求索 -
参数gamma指定了曲线的形状,该曲线用来映射I的亮度值。如果gamma小于1,映射被加权到更高的输出值。如果gamma大于1,映射被加权到更低的输出值。如果省略了函数的参量,则gamma默认为1(线性映射)。
举例:
调整灰度图像:K = imadjust(I,[0.3 0.7],[]); figure, imshow(K)
调整RGB图像:RGB1 = imread('football.jpg'); RGB2 = imadjust(RGB1,[.2 .3 0; .6 .7 1],[]);
imshow(RGB1), figure, imshow(RGB2)
图像处理函数详解——imadd 功能:实现图像相加运算。 用法:Z = imadd(X,Y)
例子:I = imread('rice.png'); J = imread('cameraman.tif'); K = imadd(I,J,'uint16'); %转换数据类型,然后将图像相加 imshow(K,[])
图像处理函数详解——im2uint8
功能:将图像转换为8位无符号整型。也可将输出值限定在[0 255]内。 用法:I2 = im2uint8(I)
RGB2 = im2uint8(RGB) I = im2uint8(BW)
X2 = im2uint8(X,'indexed')
2020
路漫漫其修远兮,吾将上下而求索 -
举例:I = reshape(uint8(linspace(0,255,255)),[5 5]) I2 = im2uint8(I) 图像处理函数详解——im2bw
功能:通过设定亮度将阈值灰度、真彩、索引图像转换为二值图像。 用法:BW = im2bw(I,level) BW = im2bw(X,map,level) BW = im2bw(RGB,level)
分别将灰度图像、索引图像、真彩色图像转换为二值图像。
Level是归一化的阈值,值域为[0,1]。Level可以由函数graythresh(I)来计算。
例子:load trees
BW = im2bw(X,map,0.4);
imview(X,map),imview(BW) 图像处理函数详解——histeq 功能:直方图均衡化。 用法:
J = histeq(I,hgram) 将原始图像I的直方图变成用户指定的向量hgram。hgram中的各元素的值域为[0,1]。
J = histeq(I,n) 指定直方图均衡后的灰度级数n,默认值为64。
[J,T] = histeq(I,...) 返回从能将图像I的灰度直方图变换成图像J的直方图变换T。
newmap = histeq(X,map,hgram)
2121
路漫漫其修远兮,吾将上下而求索 -
newmap = histeq(X,map)
[newmap,T] = histeq(X,...)
这三个是针对索引图像调色板的直方图均衡化,用法和灰度图像的一样。
举例:
I = imread('tire.tif'); J = histeq(I); imshow(I) figure, imshow(J) 图像处理函数详解——dither
功能:可以把真彩色图像装换成索引图像或者把灰度图像转换为二值图像。 用法:X = dither(RGB,map) BW = dither(I)
X = dither(RGB,map,Qm,Qe)
X = dither(RGB,map)表示把真彩色图像RGB按指定的色图map抖动成索引图像X,但map不能超过65536种颜色。
BW = dither(I)
表示把灰度图像I抖动成二值图像BW
X = dither(RGB,map,Qm,Qe) Qm表示沿每个颜色轴反转颜色图的量化的位数,Qe表示颜色空间计算误差的量化位数。如果Qe<Qm,则不进行抖动操作。默认值Qe=5,Qm=8
例子:I = imread('cameraman.tif'); BW = dither(I); imview(BW)
图像处理函数详解——conv2
2222
路漫漫其修远兮,吾将上下而求索 -
功能:是二维卷积运算函数(与convmtx2相似)。如果a和b是两个离散变量n1和n2的函数,则关于a和b的二维卷积运算数学公式如下:
用法:C = conv2(A,B) C = conv2(hcol,hrow,A) C = conv2(...,'shape')
C = conv2(A,B)计算数组A和B的卷积。如果一个数组描述了一个二维FIR滤波器,则另一个数组被二维滤波。当A的大小为[ma,na],B的大小为[mb,nb]时,C的大小为[ma+mb-1,mb+nb-1]。‘shape’见下表
参数值
‘full’
‘same’
当all(size(A)>=size(B)),C的大小为
‘valid’ [ma+mb-1,mb+nb-1];否则,C返回[]。在n维卷积运算中,C
的大小为max(size(A)- size(B)+1,0) 例子:
s = [1 2 1; 0 0 0; -1 -2 -1];
A = zeros(10);
A(3:7,3:7) = ones(5);
返回与A大小相同卷积值的中间部分
默认值,返回全部二维卷积值。
含义
2323
路漫漫其修远兮,吾将上下而求索 -
H = conv2(A,s); mesh(H)
图像处理函数详解——colfilt
功能:以列方法进行邻域处理,也可执行常规非线性滤波(自己理解的)。 用法:B = colfilt(A,[m n],block_type,fun)
该函数生成了一幅图像A,在A中,每一列对应于其中心位于图像内某个位置的邻域所包围 的像素。然后将函数应用于该矩阵中。[m n]表示大小为m行n列的邻域。block_type表示了一个字符串,包括'distinct','sliding'两种,其中'sliding'是在 输入图像中逐个像素地滑动该m乘n的区域。fun表示引用了一个函数进行处理,函数返回值的大小必须和原图像大小相同。
举例:I = imread('tire.tif'); imshow(I)
I2 = uint8(colfilt(I,[5 5],'sliding',@mean)); figure, imshow(I2) 图像处理函数详解——bwperim 功能:查找二值图像的边缘。 用法:BW2 = bwperim(BW1) BW2 = bwperim(BW1,conn)
BW2 = bwperim(BW1,conn)表示从输入图像BW1中返回只包括对象边缘像素点的图像。
conn的定义值如下:
维数
对二维
4
参数值
4邻域 说明
2424
路漫漫其修远兮,吾将上下而求索 -
8
6
8邻域
6邻域
对三维
26
例子:
18
18邻域
26邻域
BW1 = imread('circbw.tif'); BW2 = bwperim(BW1,8); imshow(BW1)
figure, imshow(BW2) 图像处理函数详解——bwlabel
功能:对连通对象进行标注,bwlabel主要对二维二值图像中各个分离部分进行标注(多维用bwlabeln,用法类似)。
用法:L = bwlabel(BW,n) [L,num] = bwlabel(BW,n)
L = bwlabel(BW,n)表示返回和BW相同大小的数组L。L中包含了连通对象的标注。参数n为4或8,分别对应4邻域和8邻域,默认值为8。
2525
路漫漫其修远兮,吾将上下而求索 -
[L,num] = bwlabel(BW,n)返回连通数num 图像处理函数详解——bwareaopen 功能:用于从对象中移除小对象。 用法:BW2 = bwareaopen(BW,P) BW2 = bwareaopen(BW,P,CONN)
BW2 = bwareaopen(BW,P,CONN)从二值图像中移除所有小于P的连通对象。CONN对应邻域方法,默认为8。
例子:
originalBW = imread('text.png'); imview(originalBW)
bwAreaOpenBW = bwareaopen(originalBW,50); imview(bwAreaOpenBW)
图像增强
1. 直方图均衡化的 Matlab 实现
1.1 imhist 函数
功能:计算和显示图像的色彩直方图 格式:imhist(I,n)
imhist(X,map)
2626
路漫漫其修远兮,吾将上下而求索 -
说明:imhist(I,n) 其中,n 为指定的灰度级数目,缺省值为256;imhist(X,map) 就算和显示索引色图像 X 的直方图,map 为调色板。用 stem(x,counts) 同样可以显示直方图。
1.2 imcontour 函数 功能:显示图像的等灰度值图
格式:imcontour(I,n),imcontour(I,v)
说明:n 为灰度级的个数,v 是有用户指定所选的等灰度级向量。
1.3 imadjust 函数
功能:通过直方图变换调整对比度
格式:J=imadjust(I,[low high],[bottom top],gamma)
newmap=imadjust(map,[low high],[bottom top],gamma) 说明:J=imadjust(I,[low high],[bottom top],gamma) 其中,gamma 为校正量r,[low high] 为原图像中要变换的灰度范围,[bottom top] 指定了变换后的灰度范围;newmap=imadjust(map,[low high],[bottom top],gamma) 调整索引色图像的调色板 map 。此时若 [low high] 和 [bottom top] 都为2×3的矩阵,则分别调整 R、G、B 3个分量。
1.4 histeq 函数 功能:直方图均衡化 格式:J=histeq(I,hgram) J=histeq(I,n) [J,T]=histeq(I,...) newmap=histeq(X,map,hgram) newmap=histeq(X,map)
2727
路漫漫其修远兮,吾将上下而求索 -
[new,T]=histeq(X,...)
说明:J=histeq(I,hgram) 实现了所谓“直方图规定化”,即将原是图象 I 的直方图变换成用户指定的向量 hgram 。hgram 中的每一个元素都在 [0,1] 中;J=histeq(I,n) 指定均衡化后的灰度级数 n ,缺省值为 64;
[J,T]=histeq(I,...) 返回从能将图像 I 的灰度直方图变换成图像 J 的直方图的变换 T ;newmap=histeq(X,map) 和 [new,T]=histeq(X,...) 是针对索引色图像调色板的直方图均衡。
2. 噪声及其噪声的 Matlab 实现 imnoise 函数 格式:J=imnoise(I,type)
J=imnoise(I,type,parameter)
说明:J=imnoise(I,type) 返回对图像 I 添加典型噪声后的有噪图像 J ,参数 type 和 parameter 用于确定噪声的类型和相应的参数。
3. 图像滤波的 Matlab 实现
3.1 conv2 函数 功能:计算二维卷积 格式:C=conv2(A,B)
C=conv2(Hcol,Hrow,A) C=conv2(...,'shape')
说明:对于 C=conv2(A,B) ,conv2 的算矩阵 A 和 B 的卷积,若 [Ma,Na]=size(A), [Mb,Nb]=size(B), 则 size(C)=[Ma+Mb-1,Na+Nb-1]; C=conv2(Hcol,Hrow,A) 中,矩阵 A 分别与 Hcol 向量在列方向和 Hrow 向量在行方向上进行卷积;C=conv2(...,'shape') 用来指定 conv2 返回二维卷积结果部分,参数 shape 可取值如下:
》full 为缺省值,返回二维卷积的全部结果;
2828
路漫漫其修远兮,吾将上下而求索 -
》same 返回二维卷积结果中与 A 大小相同的中间部分; valid 返回在卷积过程中,未使用边缘补 0 部分进行计算的卷积结果部分,当 size(A)>size(B) 时,size(C)=[Ma-Mb+1,Na-Nb+1]。
3.2 conv 函数 功能:计算多维卷积 格式:与 conv2 函数相同
3.3 filter2函数
功能:计算二维线型数字滤波,它与函数 fspecial 连用 格式:Y=filter2(B,X)
Y=filter2(B,X,'shape')
说明:对于 Y=filter2(B,X) ,filter2 使用矩阵 B 中的二维 FIR 滤波器对数据 X 进行滤波,结果 Y 是通过二维互相关计算出来的,其大小与 X 一样;对于 Y=filter2(B,X,'shape') ,filter2 返回的 Y 是通过二维互相关计算出来的,其大小由参数 shape 确定,其取值如下:
》full 返回二维相关的全部结果,size(Y)>size(X); 》same 返回二维互相关结果的中间部分,Y 与 X 大小相同;
》valid 返回在二维互相关过程中,未使用边缘补 0 部分进行计算的结果部分,有 size(Y) 2929 路漫漫其修远兮,吾将上下而求索 - H=fspecial('gaussian',n,sigma) 高斯低通滤波器 H=fspecial('sobel') Sobel 水平边缘增强滤波器 H=fspecial('prewitt') Prewitt 水平边缘增强滤波器 H=fspecial('laplacian',alpha) 近似二维拉普拉斯运算滤波器 H=fspecial('log',n,sigma) 高斯拉普拉斯(LoG)运算滤波器 H=fspecial('average',n) 均值滤波器 H=fspecial('unsharp',alpha) 模糊对比增强滤波器 说明:对于形式 H=fspecial(type) ,fspecial 函数产生一个由 type 指定的二维滤波器 H ,返回的 H 常与其它滤波器搭配使用。 4. 彩色增强的 Matlab 实现 4.1 imfilter函数 功能:真彩色增强 格式:B=imfilter(A,h) 说明:将原始图像 A 按指定的滤波器 h 进行滤波增强处理,增强后的图像 B 与 A 的尺寸和类型相同。 图像的变换 1. 离散傅立叶变换的 Matlab 实现 Matlab 函数 fft、fft2 和 fftn 分别可以实现一维、二维和 N 维 DFT 算法;而函数 ifft、ifft2 和 ifftn 则用来计算反 DFT 。这些函数的调用格式如下: A=fft(X,N,DIM) 3030 路漫漫其修远兮,吾将上下而求索 - 其中,X 表示输入图像;N 表示采样间隔点,如果 X 小于该数值,那么 Matlab 将会对 X 进行零填充,否则将进行截取,使之长度为 N ;DIM 表示要进行离散傅立叶变换。 A=fft2(X,MROWS,NCOLS) 其中,MROWS 和 NCOLS 指定对 X 进行零填充后的 X 大小。 A=fftn(X,SIZE) 其中,SIZE 是一个向量,它们每一个元素都将指定 X 相应维进行零填充后的长度。 函数 ifft、ifft2 和 ifftn的调用格式于对应的离散傅立叶变换函数一致。 例子:图像的二维傅立叶频谱 % 读入原始图像 I=imread('lena.bmp'); imshow(I) % 求离散傅立叶频谱 J=fftshift(fft2(I)); figure; imshow(log(abs(J)),[8,10]) 3131 路漫漫其修远兮,吾将上下而求索 - 2. 离散余弦变换的 Matlab 实现 2.1. dct2 函数 功能:二维 DCT 变换 格式:B=dct2(A) B=dct2(A,m,n) B=dct2(A,[m,n]) 说明:B=dct2(A) 计算 A 的 DCT 变换 B ,A 与 B 的大小相同;B=dct2(A,m,n) 和 B=dct2(A,[m,n]) 通过对 A 补 0 或剪裁,使 B 的大小为 m×n。 2.2. dict2 函数 功能:DCT 反变换 格式:B=idct2(A) B=idct2(A,m,n) B=idct2(A,[m,n]) 说明:B=idct2(A) 计算 A 的 DCT 反变换 B ,A 与 B 的大小相同;B=idct2(A,m,n) 和 B=idct2(A,[m,n]) 通过对 A 补 0 或剪裁,使 B 的大小为 m×n。 2.3. dctmtx函数 功能:计算 DCT 变换矩阵 格式:D=dctmtx(n) 说明:D=dctmtx(n) 返回一个 n×n 的 DCT 变换矩阵,输出矩阵 D 为 double 类型。 3232 路漫漫其修远兮,吾将上下而求索 - 3. 图像小波变换的 Matlab 实现 3.1 一维小波变换的 Matlab 实现 (1) dwt 函数 功能:一维离散小波变换 格式:[cA,cD]=dwt(X,'wname') [cA,cD]=dwt(X,Lo_D,Hi_D) 说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname' 对信号 X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。 (2) idwt 函数 功能:一维离散小波反变换 格式:X=idwt(cA,cD,'wname') X=idwt(cA,cD,Lo_R,Hi_R) X=idwt(cA,cD,'wname',L) X=idwt(cA,cD,Lo_R,Hi_R,L) 说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。 'wname' 为所选的小波函数 X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 。 X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。 3.2 二维小波变换的 Matlab 实现 3333 路漫漫其修远兮,吾将上下而求索 - 二维小波变换的函数 ------------------------------------------------- 函数名 函数功能 --------------------------------------------------- dwt2 二维离散小波变换 wavedec2 二维信号的多层小波分解 idwt2 二维离散小波反变换 waverec2 二维信号的多层小波重构 wrcoef2 由多层小波分解重构某一层的分解信号 upcoef2 由多层小波分解重构近似分量或细节分量 detcoef2 提取二维信号小波分解的细节分量 appcoef2 提取二维信号小波分解的近似分量 upwlev2 二维小波分解的单层重构 dwtpet2 二维周期小波变换 idwtper2 二维周期小波反变换 ------------------------------------------------------------- (1) wcodemat 函数 功能:对数据矩阵进行伪彩色编码 格式:Y=wcodemat(X,NB,OPT,ABSOL) Y=wcodemat(X,NB,OPT) Y=wcodemat(X,NB) 3434 路漫漫其修远兮,吾将上下而求索 - Y=wcodemat(X) 说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16; OPT 指定了编码的方式(缺省值为 'mat'),即: OPT='row' ,按行编码 OPT='col' ,按列编码 OPT='mat' ,按整个矩阵编码 ABSOL 是函数的控制参数(缺省值为 '1'),即: ABSOL=0 时,返回编码矩阵 ABSOL=1 时,返回数据矩阵的绝对值 ABS(X) (2) dwt2 函数 功能:二维离散小波变换 格式:[cA,cH,cV,cD]=dwt2(X,'wname') [cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数 'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。 (3) wavedec2 函数 功能:二维信号的多层小波分解 格式:[C,S]=wavedec2(X,N,'wname') [C,S]=wavedec2(X,N,Lo_D,Hi_D) 3535 路漫漫其修远兮,吾将上下而求索 - 说明:[C,S]=wavedec2(X,N,'wname') 使用小波基函数 'wname' 对二维信号 X 进行 N 层分解;[C,S]=wavedec2(X,N,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。 (4) idwt2 函数 功能:二维离散小波反变换 格式:X=idwt2(cA,cH,cV,cD,'wname') X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R) X=idwt2(cA,cH,cV,cD,'wname',S) X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 说明:X=idwt2(cA,cH,cV,cD,'wname') 由信号小波分解的近似信号 cA 和细节信号 cH、cH、cV、cD 经小波反变换重构原信号 X ; X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R) 使用指定的重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号 X ;X=idwt2(cA,cH,cV,cD,'wname',S) 和 X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 返回中心附近的 S 个数据点。 (5) waverec2 函数 说明:二维信号的多层小波重构 格式:X=waverec2(C,S,'wname') X=waverec2(C,S,Lo_R,Hi_R) 说明:X=waverec2(C,S,'wname') 由多层二维小波分解的结果 C、S 重构原始信号 X ,'wname' 为使用的小波基函数;X=waverec2(C,S,Lo_R,Hi_R) 使用重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号。 图像处理工具箱 1. 图像和图像数据 缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点 3636 路漫漫其修远兮,吾将上下而求索 - 数,所需存储量很大;MATLAB还支持另一种类型无符号整型(uint8),即图像矩 阵中每个数据占用1个字节。 在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。另外,uint8 与double两种类型数据的值域不同,编程需注意值域转换。 从uint8到double的转换 --------------------------------------------- 图像类型 MATLAB语句 --------------------------------------------- 索引色 B=double(A)+1 索引色或真彩色 B=double(A)/255 二值图像 B=double(A) --------------------------------------------- 从double到uint8的转换 --------------------------------------------- 图像类型 MATLAB语句 --------------------------------------------- 索引色 B=uint8(round(A-1)) 索引色或真彩色 B=uint8(round(A*255)) 二值图像 B=logical(uint8(round(A))) --------------------------------------------- 3737 路漫漫其修远兮,吾将上下而求索 - 2. 图像处理工具箱所支持的图像类型 2.1 真彩色图像 R、G、B三个分量表示一个像素的颜色。如果要读取图像中(100,50)处的像素值, 可查看三元数据(100,50,1:3)。 真彩色图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的存储方法是用无 符号整型存储,亮度值范围[0,255] 2.2 索引色图像 包含两个结构,一个是调色板,另一个是图像数据矩阵。调色板是一个有3列和若干行 的色彩映象矩阵,矩阵每行代表一种颜色,3列分别代表红、绿、蓝色强度的双精度数。 注意:MATLAB中调色板色彩强度[0,1],0代表最暗,1代表最亮。 常用颜色的RGB值 -------------------------------------------- 颜色 R G B 颜色 R G B -------------------------------------------- 黑 0 0 1 洋红 1 0 1 白 1 1 1 青蓝 0 1 1 红 1 0 0 天蓝 0.67 0 1 3838 路漫漫其修远兮,吾将上下而求索 - 绿 0 1 0 橘黄 1 0.5 0 蓝 0 0 1 深红 0.5 0 0 黄 1 1 0 灰 0.5 0.5 0.5 -------------------------------------------- 产生标准调色板的函数 ------------------------------------------------- 函数名 调色板 ------------------------------------------------- Hsv 色彩饱和度,以红色开始,并以红色结束 Hot 黑色-红色-黄色-白色 Cool 青蓝和洋红的色度 Pink 粉红的色度 Gray 线型灰度 Bone 带蓝色的灰度 Jet Hsv的一种变形,以蓝色开始,以蓝色结束 Copper 线型铜色度 Prim 三棱镜,交替为红、橘黄、黄、绿和天蓝 Flag 交替为红、白、蓝和黑 -------------------------------------------------- 缺省情况下,调用上述函数灰产生一个64×3的调色板,用户也可指定调色板大小。 3939 路漫漫其修远兮,吾将上下而求索 - 索引色图像数据也有double和uint8两种类型。 当图像数据为double类型时,值1代表调色板中的第1行,值2代表第2行…… 如果图像数据为uint8类型,0代表调色板的第一行,,值1代表第2行…… 2.3 灰度图像 存储灰度图像只需要一个数据矩阵。 数据类型可以是double,[0,1];也可以是uint8,[0,255] 2.4 二值图像 二值图像只需一个数据矩阵,每个像素只有两个灰度值,可以采用uint8或double类型存储。 MATLAB工具箱中以二值图像作为返回结果的函数都使用uint8类型。 2.5 图像序列 MATLAB工具箱支持将多帧图像连接成图像序列。 图像序列是一个4维数组,图像帧的序号在图像的长、宽、颜色深度之后构成第4维。 分散的图像也可以合并成图像序列,前提是各图像尺寸必须相同,若是索引色图像, 调色板也必须相同。 可参考cat()函数 A=cat(4,A1,A2,A3,A4,A5) 3. MATLAB图像类型转换 图像类型转换函数 --------------------------------------------------------------------------- 函数名 函数功能 4040 路漫漫其修远兮,吾将上下而求索 - --------------------------------------------------------------------------- dither 图像抖动,将灰度图变成二值图,或将真彩色图像抖动成索引色图像 gray2ind 将灰度图像转换成索引图像 grayslice 通过设定阈值将灰度图像转换成索引色图像 im2bw 通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图 ind2gray 将索引色图像转换成灰度图像 ind2rgb 将索引色图像转换成真彩色图像 mat2gray 将一个数据矩阵转换成一副灰度图 rgb2gray 将一副真彩色图像转换成灰度图像 rgb2ind 将真彩色图像转换成索引色图像 ---------------------------------------------------------------------------- 4. 图像文件的读写和查询 4.1 图形图像文件的读取 利用函数imread()可完成图形图像文件的读取,语法: A=imread(filename,fmt) [X,map]=imread(filename,fmt) [...]=imread(filename) [...]=imread(filename,idx) (只对TIF格式的文件) 4141 路漫漫其修远兮,吾将上下而求索 - [...]=imread(filename,ref) (只对HDF格式的文件) 通常,读取的大多数图像均为8bit,当这些图像加载到内存中时,Matlab就将其存放 在类uint8中。此为Matlab还支持16bit的PNG和TIF图像,当读取这类文件时,Matlab就将 其存贮在uint16中。 注意:对于索引图像,即使图像阵列的本身为类uint8或类uint16,imread函数仍将 颜色映象表读取并存贮到一个双精度的浮点类型的阵列中。 4.2 图形图像文件的写入 使用imwrite函数,语法如下: imwrite(A,filename,fmt) imwrite(X,map,filename,fmt) imwrite(...,filename) imwrite(...,parameter,value) 当利用imwrite函数保存图像时,Matlab缺省的方式是将其简化道uint8的数据格式。 4.3 图形图像文件信息的查询 imfinfo()函数 4242 路漫漫其修远兮,吾将上下而求索 - 5. 图像文件的显示 5.1 索引图像及其显示 方法一: image(X) colormap(map) 方法二: imshow(X,map) 5.2 灰度图像及其显示 Matlab 7.0 中,要显示一副灰度图像,可以调用函数 imshow 或 imagesc (即 imagescale,图像缩放函数) (1) imshow 函数显示灰度图像 使用 imshow(I) 或 使用明确指定的灰度级书目:imshow(I,32) 由于Matlab自动对灰度图像进行标度以适合调色板的范围,因而可以使用自定义 大小的调色板。其调用格式如下: imshow(I,[low,high]) 其中,low 和 high 分别为数据数组的最小值和最大值。 4343 路漫漫其修远兮,吾将上下而求索 - (2) imagesc 函数显示灰度图像 下面的代码是具有两个输入参数的 imagesc 函数显示一副灰度图像 imagesc(1,[0,1]); colormap(gray); imagesc 函数中的第二个参数确定灰度范围。灰度范围中的第一个值(通常是0), 对应于颜色映象表中的第一个值(颜色),第二个值(通常是1)则对应与颜色映象表 中的最后一个值(颜色)。灰度范围中间的值则线型对应与颜色映象表中剩余的值(颜色)。 在调用 imagesc 函数时,若只使用一个参数,可以用任意灰度范围显示图像。在该 调用方式下,数据矩阵中的最小值对应于颜色映象表中的第一个颜色值,数据矩阵中的最大 值对应于颜色映象表中的最后一个颜色值。 5.3 RGB 图像及其显示 (1) image(RGB) 不管RGB图像的类型是double浮点型,还是 uint8 或 uint16 无符号整数型,Matlab都 能通过 image 函数将其正确显示出来。 RGB8 = uint8(round(RGB64×255)); % 将 double 浮点型转换为 uint8 无符号整型 4444 路漫漫其修远兮,吾将上下而求索 - RGB64 = double(RGB8)/255; % 将 uint8 无符号整型转换为 double 浮点型 RGB16 = uint16(round(RGB64×65535)); % 将 double 浮点型转换为 uint16 无符号整型 RGB64 = double(RGB16)/65535; % 将 uint16 无符号整型转换为 double 浮点型 (2) imshow(RGB) 参数是一个 m×n×3 的数组 5.4 二进制图像及其显示 (1) imshow(BW) 在 Matlab 7.0 中,二进制图像是一个逻辑类,仅包括 0 和 1 两个数值。像素 0 显示 为黑色,像素 1 显示为白色。 显示时,也可通过NOT(~)命令,对二进制图象进行取反,使数值 0 显示为白色;1 显示 为黑色。 例如: imshow(~BW) (2) 此外,还可以使用一个调色板显示一副二进制图像。如果图形是 uint8 数据类型, 则数值 0 显示为调色板的第一个颜色,数值 1 显示为第二个颜色。 例如: imshow(BW,[1 0 0;0 0 1]) 5.5 直接从磁盘显示图像 4545 路漫漫其修远兮,吾将上下而求索 - 可使用一下命令直接进行图像文件的显示: imshow filename 其中,filename 为要显示的图像文件的文件名。 如果图像是多帧的,那么 imshow 将仅显示第一帧。但需注意,在使用这种方式时,图像 数据没有保存在Matlab 7.0 工作平台。如果希望将图像装入工作台中,需使用 getimage 函 数,从当前的句柄图形图像对象中获取图像数据, 命令形式为: rgb = getimage; 21.dct2 功能: 进行二维离散余弦变换. 语法: B = dct2(A) B = dct2(A,m,n) B = dct2(A,[m n]) 举例 RGB = imread('autumn.tif'); I = rgb2gray(RGB); J = dct2(I); imshow(log(abs(J)),[]), colormap(jet(64)), colorbar 4646 路漫漫其修远兮,吾将上下而求索 - J(abs(J) < 10) = 0; K = idct2(J)/255; imshow(K) 相关命令: fft2, idct2, ifft2 22.dctmtx 功能: MATLAB高级应用——图形及影像处理 330 计算离散余弦变换矩阵. 语法: D = dctmtx(n) 相关命令: dct2 23.dilate 功能: 放大二进制图像. 语法: BW2 = dilate(BW1,SE) BW2 = dilate(BW1,SE,alg) BW2 = dilate(BW1,SE,...,n) 举例 BW1 = imread('text.tif'); SE = ones(6,2); 4747 路漫漫其修远兮,吾将上下而求索 - BW2 = dilate(BW1,SE); imshow(BW1) figure, imshow(BW2) 相关命令: bwmorph, erode 24.dither 功能: 通过抖动增加外观颜色分辨率,转换图像. 语法: X = dither(RGB,map) BW = dither(I) 相关命令: rgb2ind 25.double 附录 MATLAB图像处理命令 331 功能: 转换数据为双精度型. 语法: B = double(A) 举例 A = imread('saturn.tif'); B = sqrt(double(A)); 相关命令: 4848 路漫漫其修远兮,吾将上下而求索 - im2double, im2uint, uint8 26.edge 功能: 识别强度图像中的边界. 语法: BW = edge(I,'sobel') BW = edge(I,'sobel',thresh) BW = edge(I,'sobel',thresh,direction) [BW,thresh] = edge(I,'sobel',...) BW = edge(I,'prewitt') BW = edge(I,'prewitt',thresh) BW = edge(I,'prewitt',thresh,direction) [BW,thresh] = edge(I,'prewitt',...) BW = edge(I,'roberts') BW = edge(I,'roberts',thresh) [BW,thresh] = edge(I,'roberts',...) BW = edge(I,'log') BW = edge(I,'log',thresh) BW = edge(I,'log',thresh,sigma) [BW,threshold] = edge(I,'log',...) BW = edge(I,'zerocross',thresh,h) [BW,thresh] = edge(I,'zerocross',...) BW = edge(I,'canny') 4949 路漫漫其修远兮,吾将上下而求索 - BW = edge(I,'canny',thresh) BW = edge(I,'canny',thresh,sigma) MATLAB高级应用——图形及影像处理 332 [BW,threshold] = edge(I,'canny',...) 举例 I = imread('rice.tif'); BW1 = edge(I,'prewitt'); BW2 = edge(I,'canny'); imshow(BW1); figure, imshow(BW2) 27.erode 功能: 弱化二进制图像的边界. 语法: BW2 = erode(BW1,SE) BW2 = erode(BW1,SE,alg) BW2 = erode(BW1,SE,...,n) 举例 BW1 = imread('text.tif'); SE = ones(3,1); BW2 = erode(BW1,SE); imshow(BW1) figure, imshow(BW2) 5050 路漫漫其修远兮,吾将上下而求索 - 相关命令: bwmorph, dilate 附录 MATLAB图像处理命令 333 28.fft2 功能: 进行二维快速傅里叶变换. 语法: B = fft2(A) B = fft2(A,m,n) 举例 load imdemos saturn2 imshow(saturn2) B = fftshift(fft2(saturn2)); imshow(log(abs(B)),[]), colormap(jet(64)), colorbar 相关命令: dct2, fftshift, idct2, ifft2 29.fftn 功能: 进行n维快速傅里叶变换. 语法: B = fftn(A) B = fftn(A,siz) 相关命令: fft2, ifftn 5151 路漫漫其修远兮,吾将上下而求索 - 30.fftshift MATLAB高级应用——图形及影像处理 334 功能: 把快速傅里叶变换的DC组件移到光谱中心. 语法: B = fftshift(A) 举例 B = fftn(A); C = fftshift(B); 相关命令: fft2, fftn, ifftshift 31.filter2 功能: 进行二维线性过滤操作. 语法: B = filter2(h,A) B = filter2(h,A,shape) 举例 A = magic(6) A = 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 5252 路漫漫其修远兮,吾将上下而求索 - 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11 h = fspecial('sobel') h = 1 2 1 0 0 0 -1 -2 -1 B = filter2(h,A,'valid') B = -8 4 4 -8 -23 -44 -5 40 -23 -50 1 40 -8 4 4 -8 相关命令: conv2, roifilt2 32.freqspace 附录 MATLAB图像处理命令 335 功能: 确定二维频率响应的频率空间. 语法: [f1,f2] = freqspace(n) [f1,f2] = freqspace([m n]) 5353 路漫漫其修远兮,吾将上下而求索 - [x1,y1] = freqspace(...,'meshgrid') f = freqspace(N) f = freqspace(N,'whole') 相关命令: fsamp2, fwind1, fwind2 33.freqz2 功能: 计算二维频率响应. 语法: [H,f1,f2] = freqz2(h,n1,n2) [H,f1,f2] = freqz2(h,[n2 n1]) [H,f1,f2] = freqz2(h,f1,f2) [H,f1,f2] = freqz2(h) [...] = freqz2(h,...,[dx dy]) [...] = freqz2(h,...,dx) freqz2(...) 举例 Hd = zeros(16,16); Hd(5:12,5:12) = 1; Hd(7:10,7:10) = 0; h = fwind1(Hd,bartlett(16)); colormap(jet(64)) freqz2(h,[32 32]); axis ([-1 1 -1 1 0 1]) 5454 路漫漫其修远兮,吾将上下而求索 - 34.fsamp2 MATLAB高级应用——图形及影像处理 336 功能: 用频率采样法设计二维FIR过滤器. 语法: h = fsamp2(Hd) h = fsamp2(f1,f2,Hd,[m n]) 举例 [f1,f2] = freqspace(21,'meshgrid'); Hd = ones(21); r = sqrt(f1.^2 + f2.^2); Hd((r0.5)) = 0; colormap(jet(64)) mesh(f1,f2,Hd) 相关命令: conv2, filter2, freqspace, ftrans2, fwind1, fwind2 35.fspecial 功能: 创建预定义过滤器. 语法: h = fspecial(type) h = fspecial(type,parameters) 举例 5555 路漫漫其修远兮,吾将上下而求索 - I = imread('saturn.tif'); h = fspecial('unsharp',0.5); I2 = filter2(h,I)/255; imshow(I) figure, imshow(I2) 相关命令: conv2, edge, filter2, fsamp2, fwind1, fwind2 36.ftrans2 功能: 通过频率转换设计二维FIR过滤器. 语法: 附录 MATLAB图像处理命令 337 h = ftrans2(b,t) h = ftrans2(b) 举例 colormap(jet(64)) b = remez(10,[0 0.05 0.15 0.55 0.65 1],[0 0 1 1 0 0]); [H,w] = freqz(b,1,128,'whole'); plot(w/pi-1,fftshift(abs(H))) 相关命令: conv2, filter2, fsamp2, fwind1, fwind2 37.fwind1 功能: 5656 路漫漫其修远兮,吾将上下而求索 - 用一维窗口方法设计二维FIR过滤器. 语法: h = fwind1(Hd,win) h = fwind1(Hd,win1,win2) h = fwind1(f1,f2,Hd,...) 举例 [f1,f2] = freqspace(21,'meshgrid'); Hd = ones(21); r = sqrt(f1.^2 + f2.^2); Hd((r0.5)) = 0; colormap(jet(64)) mesh(f1,f2,Hd) 相关命令: conv2, filter2, fsamp2, freqspace, ftrans2, fwind2 38.fwind2 功能: 用二维窗口方法设计二维FIR过滤器. 语法: h = fwind2(Hd,win) h = fwind2(f1,f2,Hd,win) 举例 [f1,f2] = freqspace(21,'meshgrid'); Hd = ones(21); 5757 路漫漫其修远兮,吾将上下而求索 - r = sqrt(f1.^2 + f2.^2); Hd((r0.5)) = 0; colormap(jet(64)) mesh(f1,f2,Hd) MATLAB高级应用——图形及影像处理 338 相关命令: conv2, filter2, fsamp2, freqspace, ftrans2, fwind1 39.getimage 功能: 从坐标轴取得图像数据. 语法: A = getimage(h) [x,y,A] = getimage(h) [...,A,flag] = getimage(h) [...] = getimage 举例 imshow rice.tif I = getimage; 40.gray2ind 功能: 转换灰度图像为索引图像. 语法: [X,map] = gray2ind(I,n) 5858 路漫漫其修远兮,吾将上下而求索 - 相关命令: ind2gray 41.grayslice 功能: 从灰度图像创建索引图像. 语法: X = grayslice(I,n) X = grayslice(I,v) 举例 I = imread('ngc4024m.tif'); X = grayslice(I,16); imshow(I) figure, imshow(X,jet(16)) 附录 MATLAB图像处理命令 339 相关命令: gray2ind 42.histeq 功能: 用柱状图均等化增强对比. 语法: J = histeq(I,hgram) J = histeq(I,n) [J,T] = histeq(I,...) 5959 路漫漫其修远兮,吾将上下而求索 - 举例 I = imread('tire.tif'); J = histeq(I); imshow(I) figure, imshow(J) imhist(I,64) figure; imhist(J,64) 相关命令: brighten, imadjust, imhist 43.hsv2rgb 功能: 转换HSV值为RGB颜色空间. 语法: rgbmap = hsv2rgb(hsvmap) RGB = hsv2rgb(HSV) 相关命令: MATLAB高级应用——图形及影像处理 340 rgb2hsv, rgbplot 44.idct2 功能: 计算二维离散反余弦变换. 语法: B = idct2(A) B = idct2(A,m,n) 6060 路漫漫其修远兮,吾将上下而求索 - B = idct2(A,[m n]) 相关命令: dct2, dctmtx, fft2, ifft2 45.ifft2 功能: 计算二维快速傅里叶反变换. 语法: B = ifft2(A) B = ifft2(A,m,n) 相关命令: fft2, fftshift, idct2 46.ifftn 功能: 计算n维快速傅里叶反变换. 语法: B = ifftn(A) B = ifftn(A,siz) 相关命令: fft2, fftn, ifft2 47.sim2bw 功能: 转换图像为二进制图像. 语法: BW = im2bw(I,level) 6161 路漫漫其修远兮,吾将上下而求索 - BW = im2bw(X,map,level) BW = im2bw(RGB,level) 举例 load trees BW = im2bw(X,map,0.4); imshow(X,map) 附录 MATLAB图像处理命令 341 figure, imshow(BW) 相关命令: ind2gray, rgb2gray 48.im2col 功能: 重调图像块为列. 语法: B = im2col(A,[m n],block_type) B = im2col(A,[m n]) B = im2col(A,'indexed',...) 相关命令: blkproc, col2im, colfilt, nlfilter 49.im2double 功能: 转换图像矩阵为双精度型. 语法: 6262 路漫漫其修远兮,吾将上下而求索 - I2 = im2double(I1) RGB2 = im2double(RGB1) BW2 = im2double(BW1) X2 = im2double(X1,'indexed') 相关命令: double, im2uint8, uint8 50.im2uint8 功能: 转换图像阵列为8位无符号整型. 语法: I2 = im2uint8(I1) RGB2 = im2uint8(RGB1) BW2 = im2uint8(BW1) X2 = im2uint8(X1,'indexed') MATLAB高级应用——图形及影像处理 342 相关命令: im2uint16, double, im2double, uint8, imapprox, uint16 51.im2uint16 功能: 转换图像阵列为16位无符号整型. 语法: I2 = im2uint16(I1) 6363 路漫漫其修远兮,吾将上下而求索 - RGB2 = im2uint16(RGB1) X2 = im2uint16(X1,'indexed') 相关命令: im2uint8, double, im2double, uint8, uint16, imapprox 52.imadjust 功能: 调整图像灰度值或颜色映像表. 语法: J = imadjust(I,[low high],[bottom top],gamma) newmap = imadjust(map,[low high],[bottom top],gamma) RGB2 = imadjust(RGB1,...) 举例 I = imread('pout.tif'); J = imadjust(I,[0.3 0.7],[]); imshow(I) figure, imshow(J) 相关命令: brighten, histeq 53.imapprox 功能: 对索引图像进行近似处理. 语法: [Y,newmap] = imapprox(X,map,n) 6464 路漫漫其修远兮,吾将上下而求索 - 附录 MATLAB图像处理命令 343 [Y,newmap] = imapprox(X,map,tol) Y = imapprox(X,map,newmap) [...] = imapprox(...,dither_option) 相关命令: cmunique, dither, rgb2ind 54.imcontour 功能: 创建图像数据的轮廓图. 语法: imcontour(I,n) imcontour(I,v) imcontour(x,y,...) imcontour(...,LineSpec) [C,h] = imcontour(...) 举例 I = imread('ic.tif'); imcontour(I,3) 相关命令: clabel, contour, LineSpec 55.imcrop 功能: 剪切图像. 6565 路漫漫其修远兮,吾将上下而求索 - 语法: I2 = imcrop(I) X2 = imcrop(X,map) RGB2 = imcrop(RGB) I2 = imcrop(I,rect) X2 = imcrop(X,map,rect) RGB2 = imcrop(RGB,rect) MATLAB高级应用——图形及影像处理 344 [...] = imcrop(x,y,...) [A,rect] = imcrop(...) [x,y,A,rect] = imcrop(...) 举例 I = imread('ic.tif'); I2 = imcrop(I,[60 40 100 90]); imshow(I) figure, imshow(I2) 相关命令: zoom 56.imfeature 功能: 计算图像区域的特征尺寸. 语法: stats = imfeature(L,measurements) 6666 路漫漫其修远兮,吾将上下而求索 - stats = imfeature(L,measurements,n) 举例 BW = imread('text.tif'); L = bwlabel(BW); stats = imfeature(L,'all'); stats(23) ans = Area: 89 Centroid: [95.6742 192.9775] BoundingBox: [87.5000 184.5000 16 15] MajorAxisLength: 19.9127 MinorAxisLength: 14.2953 Eccentricity: 0.6961 Orientation: 9.0845 ConvexHull: [28x2 double] 附录 MATLAB图像处理命令 345 ConvexImage: [15x16 uint8 ] ConvexArea: 205 Image: [15x16 uint8 ] FilledImage: [15x16 uint8 ] FilledArea: 122 EulerNumber: 0 Extrema: [ 8x2 double] 6767 路漫漫其修远兮,吾将上下而求索 - EquivDiameter: 10.6451 Solidity: 0.4341 Extent: 0.3708 PixelList: [89x2 double] 相关命令: bwlabel 57.imfinfo 功能: 返回图形文件信息. 语法: info = imfinfo(filename,fmt) info = imfinfo(filename) 举例 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 6868 路漫漫其修远兮,吾将上下而求索 - ColorType: 'indexed' FormatSignature: [73 73 42 0] ByteOrder: 'little-endian' NewSubfileType: 0 BitsPerSample: 8 Compression: 'PackBits' PhotometricInterpretation: 'RGB Palette' MATLAB高级应用——图形及影像处理 346 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 6969 路漫漫其修远兮,吾将上下而求索 - GrayResponseUnit: 0.0100 MaxSampleValue: 255 MinSampleValue: 0 Thresholding: 1 相关命令: imread, imwrite 58.imhist 功能: 显示图像数据的柱状图. 语法: imhist(I,n) imhist(X,map) [counts,x] = imhist(...) 举例 I = imread('pout.tif'); imhist(I) 附录 MATLAB图像处理命令 347 相关命令: histeq 59.immovie 功能: 创建多帧索引图的电影动画. 语法: 7070 路漫漫其修远兮,吾将上下而求索 - mov = immovie(X,map) 举例 load mri mov = immovie(D,map); 相关命令: montage 60.imnoise 功能: 增加图像的渲染效果. 语法: J = imnoise(I,type) J = imnoise(I,type,parameters) 举例 I = imread('eight.tif'); J = imnoise(I,'salt & pepper',0.02); imshow(I) figure, imshow(J) 相关命令: rand 61.impixel 功能: 确定像素颜色值. 语法: 7171 路漫漫其修远兮,吾将上下而求索 - MATLAB高级应用——图形及影像处理 348 P = impixel(I) P = impixel(X,map) P = impixel(RGB) P = impixel(I,c,r) P = impixel(X,map,c,r) P = impixel(RGB,c,r) [c,r,P] = impixel(...) P = impixel(x,y,I,xi,yi) P = impixel(x,y,X,map,xi,yi) P = impixel(x,y,RGB,xi,yi) [xi,yi,P] = impixel(x,y,...) 举例 RGB = imread('flowers.tif'); c = [12 146 410]; r = [104 156 129]; pixels = impixel(RGB,c,r) pixels = 61 59 101 253 240 0 237 37 44 相关命令: improfile, pixval 7272 路漫漫其修远兮,吾将上下而求索 - 62.improfile 功能: 沿线段计算剖面图的像素值. 语法: c = improfile c = improfile(n) c = improfile(I,xi,yi) c = improfile(I,xi,yi,n) [cx,cy,c] = improfile(...) [cx,cy,c,xi,yi] = improfile(...) [...] = improfile(x,y,I,xi,yi) [...] = improfile(x,y,I,xi,yi,n) 附录 MATLAB图像处理命令 349 [...] = improfile(...,method) 举例 I = imread('alumgrns.tif'); x = [35 338 346 103]; y = [253 250 17 148]; improfile(I,x,y), grid on 相关命令: impixel, pixval 63.imread 功能: 7373 路漫漫其修远兮,吾将上下而求索 - 从图形文件中读取图像. 语法: A = imread(filename,fmt) [X,map] = imread(filename,fmt) [...] = imread(filename) [...] = imread(...,idx) (TIFF only) [...] = imread(...,ref) (HDF only) [...] = imread(...,'BackgroundColor',BG) (PNG only) [A,map,alpha] = imread(...) (PNG only) 举例 [X,map] = imread('flowers.tif',6); info = imfinfo('skull.hdf'); [X,map] = imread('skull.hdf',info(4).Reference); bg = [255 0 0]; A = imread('image.png','BackgroundColor',bg); MATLAB高级应用——图形及影像处理 350 [A,map,alpha] = imread('image.png'); 相关命令: imfinfo, imwrite,fread,double,uint8,uint16 64.imresize 功能: 改变图像大小. 语法: 7474 路漫漫其修远兮,吾将上下而求索 - B = imresize(A,m,method) B = imresize(A,[mrows ncols],method) B = imresize(...,method,n) B = imresize(...,method,h) 65.imrotate 功能: 旋转图像. 语法: B = imrotate(A,angle,method) B = imrotate(A,angle,method,'crop') 举例 I = imread('ic.tif'); J = imrotate(I,-4,'bilinear','crop'); imshow(I) figure, imshow(J) 相关命令: imcrop, imresize 66.imshow 功能: 显示图像. 语法: 附录 MATLAB图像处理命令 351 imshow(I,n) 7575 路漫漫其修远兮,吾将上下而求索 - imshow(I,[low high]) imshow(BW) imshow(X,map) imshow(RGB) imshow(...,display_option) imshow(x,y,A,...) imshow filename h = imshow(...) 相关命令: getimage, imread, iptgetpref, iptsetpref, subimage, truesize, warp 67.imwrite 功能: 把图像写入图形文件中. 语法: imwrite(A,filename,fmt) imwrite(X,map,filename,fmt) imwrite(...,filename) imwrite(...,Param1,Val1,Param2,Val2...) 举例 imwrite(X,map,'flowers.hdf','Compression','none',... 'WriteMode','append') 7676 路漫漫其修远兮,吾将上下而求索 - 相关命令: imfinfo, imread 68.ind2gray 功能: 把检索图像转化为灰度图像. 语法: I = ind2gray(X,map) 举例 load trees I = ind2gray(X,map); imshow(X,map) figure,imshow(I) MATLAB高级应用——图形及影像处理 352 相关命令: gray2ind, imshow, rgb2ntsc 69.ind2rgb 功能: 转化索引图像为RGB真彩图像. 语法: RGB = ind2rgb(X,map) 相关命令: ind2gray, rgb2ind 70.iptgetpref 7777 路漫漫其修远兮,吾将上下而求索 - 功能: 获取图像处理工具箱参数设置. 语法: value = iptgetpref(prefname) 举例 value = iptgetpref('ImshowAxesVisible') value = off 相关命令: imshow, iptsetpref 71.iptsetpref 功能: 设置图像处理工具箱参数. 语法: iptsetpref(prefname,value) 举例 iptsetpref('ImshowBorder','tight') 相关命令: imshow, iptgetpref, truesize 72.iradon 附录 MATLAB图像处理命令 353 功能: 进行反Radon变换. 7878 路漫漫其修远兮,吾将上下而求索 - 语法: I = iradon(P,theta) I = iradon(P,theta,interp,filter,d,n) [I,h] = iradon(...) 举例 P = phantom(128); R = radon(P,0:179); I = iradon(R,0:179,'nearest','Hann'); imshow(P) figure, imshow(I) 相关命令: radon, phantom 73.isbw 功能: 判断是否为二进制图像. 语法: flag = isbw(A) 相关命令: isind, isgray, isrgb 74.isgray 功能: 判断是否为灰度图像. 语法: 7979 路漫漫其修远兮,吾将上下而求索 - flag = isgray(A) 相关命令: isbw, isind, isrgb 75.isind MATLAB高级应用——图形及影像处理 354 功能: 判断是否为索引图像. 语法: flag = isind(A) 相关命令: isbw, isgray, isrgb 76.isrgb 功能: 判读是否为RGB真彩图像. 语法: flag = isrgb(A) 相关命令: isbw, isgray, isind 77.makelut 功能: 创建一个用于applylut函数的lookup表. 语法: lut = makelut(fun,n) 8080 路漫漫其修远兮,吾将上下而求索 - lut = makelut(fun,n,P1,P2,...) 举例 f = inline('sum(x(:)) >= 2'); lut = makelut(f,2) lut = 0 0 0 1 0 1 1 1 0 1 1 1 1 1 附录 MATLAB图像处理命令 355 1 1 相关命令: 8181 路漫漫其修远兮,吾将上下而求索 - applylut 78.mat2gray 功能: 转化矩阵为灰度图像. 语法: I = mat2gray(A,[amin amax]) I = mat2gray(A) 举例 I = imread('rice.tif'); J = filter2(fspecial('sobel'),I); K = mat2gray(J); imshow(I) figure, imshow(K) 相关命令: gray2ind 79.mean2 功能: 计算矩阵元素的平均值. 语法: b = mean2(A) 相关命令: std2, mean, std 80.medfilt2 8282 路漫漫其修远兮,吾将上下而求索 - 功能: 进行二维中值过滤. 语法: MATLAB高级应用——图形及影像处理 356 B = medfilt2(A,[m n]) B = medfilt2(A) B = medfilt2(A,'indexed',...) 举例 I = imread('eight.tif'); J = imnoise(I,'salt & pepper',0.02); K = medfilt2(J); imshow(J) figure, imshow(K) 相关命令: filter2, ordfilt2, wiener2 81.montage 功能: 在矩形框中同时显示多幅图像. 语法: montage(I) montage(BW) montage(X,map) montage(RGB) 8383 路漫漫其修远兮,吾将上下而求索 - h = montage(...) 举例 load mri montage(D,map) 附录 MATLAB图像处理命令 357 相关命令: immovie 82.nlfilter 功能: 进行边沿操作. 语法: B = nlfilter(A,[m n],fun) B = nlfilter(A,[m n],fun,P1,P2,...) B = nlfilter(A,'indexed',...) 举例 B = nlfilter(A,[3 3],'median(x(:))'); 相关命令: blkproc, colfilt 83.ntsc2rgb 功能: 转换NTSC的值为RGB颜色空间. 语法: rgbmap = ntsc2rgb(yiqmap) RGB = ntsc2rgb(YIQ) 8484 路漫漫其修远兮,吾将上下而求索 - 相关命令: rgb2ntsc, rgb2ind, ind2rgb, ind2gray 84.ordfilt2 功能: 进行二维统计顺序过滤. 语法: B = ordfilt2(A,order,domain) B = ordfilt2(A,order,domain,S) MATLAB高级应用——图形及影像处理 358 B = ordfilt2(...,padopt) 相关命令: medfilt2 85.phantom 功能: 产生一个头部幻影图像. 语法: P = phantom(def,n) P = phantom(E,n) [P,E] = phantom(...) 举例 P = phantom('Modified Shepp-Logan',200); imshow(P) 相关命令: 8585 路漫漫其修远兮,吾将上下而求索 - radon, iradon 86.pixval 功能: 显示图像像素信息. 语法: pixval on pixval off pixval pixval(fig,option) 相关命令: impixel, improfile 87.qtdecomp 功能: 进行四叉树分解. 附录 MATLAB图像处理命令 359 语法: S = qtdecomp(I) S = qtdecomp(I,threshold) S = qtdecomp(I,threshold,mindim) S = qtdecomp(I,threshold,[mindim maxdim]) S = qtdecomp(I,fun) S = qtdecomp(I,fun,P1,P2,...) 举例 8686 路漫漫其修远兮,吾将上下而求索 - I = [1 1 1 1 2 3 6 6 1 1 2 1 4 5 6 8 1 1 1 1 10 15 7 7 1 1 1 1 20 25 7 7 20 22 20 22 1 2 3 4 20 22 22 20 5 6 7 8 20 22 20 20 9 10 11 12 22 22 20 20 13 14 15 16]; S = qtdecomp(I,5); full(S) ans = 4 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2 0 0 0 0 0 1 1 0 0 4 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 0 相关命令: qtgetblk, qtsetblk 88.qtgetblk 功能: 8787 路漫漫其修远兮,吾将上下而求索 - 获取四叉树分解中的块值. 语法: [vals,r,c] = qtgetblk(I,S,dim) MATLAB高级应用——图形及影像处理 360 [vals,idx] = qtgetblk(I,S,dim) 举例 [vals,r,c] = qtgetblk(I,S,4) vals(:,:,1) = 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 vals(:,:,2) = 20 22 20 22 20 22 22 20 20 22 20 20 22 22 20 20 r = 1 5 c = 1 1 8888 路漫漫其修远兮,吾将上下而求索 - 相关命令: qtdecomp, qtsetblk 89.qtsetblk 功能: 设置四叉树分解中的块值. 语法: J = qtsetblk(I,S,dim,vals) 举例 newvals = cat(3,zeros(4),ones(4)); J = qtsetblk(I,S,4,newvals) J = 0 0 0 0 2 3 6 6 0 0 0 0 4 5 6 8 0 0 0 0 10 15 7 7 附录 MATLAB图像处理命令 361 0 0 0 0 20 25 7 7 1 1 1 1 1 2 3 4 1 1 1 1 5 6 7 8 1 1 1 1 9 10 11 12 1 1 1 1 13 14 15 16 相关命令: qtdecomp, qtgetblk 90.radon 8989 路漫漫其修远兮,吾将上下而求索 - 功能: 计算Radon变换. 语法: R = radon(I,theta) R = radon(I,theta,n) [R,xp] = radon(...) 举例 iptsetpref('ImshowAxesVisible','on') I = zeros(100,100); I(25:75,25:75) = 1; theta = 0:180; [R,xp] = radon(I,theta); imshow(theta,xp,R,[]), colormap(hot), colorbar 相关命令: iradon, phantom 91.rgb2gray 功能: 转换RGB图像或颜色映像表为灰度图像. 语法: I = rgb2gray(RGB) newmap = rgb2gray(map) 相关命令: MATLAB高级应用——图形及影像处理 362 ind2gray, ntsc2rgb, rgb2ind, rgb2ntsc 92.rgb2hsv 9090 路漫漫其修远兮,吾将上下而求索 - 功能: 转化RGB值为HSV颜色空间. 语法: hsvmap = rgb2hsv(rgbmap) HSV = rgb2hsv(RGB) 相关命令: hsv2rgb, rgbplot 93.rgb2ind 功能: 转化RGB图像为索引图像. 语法: [X,map] = rgb2ind(RGB,tol) [X,map] = rgb2ind(RGB,n) X = rgb2ind(RGB,map) [...] = rgb2ind(...,dither_option) 举例 RGB = imread('flowers.tif'); [X,map] = rgb2ind(RGB,128); imshow(X,map) 相关命令: cmunique, dither, imapprox, ind2rgb, rgb2gray 94.rgb2ntsc 功能: 转化RGB的值为NTSC颜色空间. 语法: yiqmap = rgb2ntsc(rgbmap) 9191 路漫漫其修远兮,吾将上下而求索 - YIQ = rgb2ntsc(RGB) 附录 MATLAB图像处理命令 363 相关命令: ntsc2rgb, rgb2ind, ind2rgb, ind2gray 95.rgb2ycbcr 功能: 转化RGB的值为YcbCr颜色空间. 语法: ycbcrmap = rgb2ycbcr(rgbmap) YCBCR = rgb2ycbcr(RGB) 相关命令: ntsc2rgb, rgb2ntsc, ycbcr2rgb 96.rgbplot 功能: 划分颜色映像表. 语法: rgbplot(map) 举例 rgbplot(jet) 相关命令: colormap 97.roicolor 功能: 选择感兴趣的颜色区. 9292 路漫漫其修远兮,吾将上下而求索 - 语法: BW = roicolor(A,low,high) BW = roicolor(A,v) 举例 I = imread('rice.tif'); BW = roicolor(I,128,255); imshow(I); MATLAB高级应用——图形及影像处理 364 figure, imshow(BW) 相关命令: roifilt2, roipoly 98.roifill 功能: 在图像的任意区域中进行平滑插补. 语法: J = roifill(I,c,r) J = roifill(I) J = roifill(I,BW) [J,BW] = roifill(...) J = roifill(x,y,I,xi,yi) [x,y,J,BW,xi,yi] = roifill(...) 举例 I = imread('eight.tif'); 9393 路漫漫其修远兮,吾将上下而求索 - c = [222 272 300 270 221 194]; r = [21 21 75 121 121 75]; J = roifill(I,c,r); imshow(I) figure, imshow(J) 附录 MATLAB图像处理命令 365 相关命令: roifilt2, roipoly 99.roifilt2 功能: 过滤敏感区域. 语法: J = roifilt2(h,I,BW) J = roifilt2(I,BW,fun) J = roifilt2(I,BW,fun,P1,P2,...) 举例 h = fspecial('unsharp'); J = roifilt2(h,I,BW); imshow(J) 相关命令: filter2, roipoly 100.roipoly 功能: 9494 路漫漫其修远兮,吾将上下而求索 - 选择一个敏感的多边形区域. 语法: 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(...) 举例 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) MATLAB高级应用——图形及影像处理 366 figure, imshow(BW) 相关命令: roifilt2, roicolor, roifill 101.std2 功能: 计算矩阵元素的标准偏移. 语法: b = std2(A) 相关命令: 9595 路漫漫其修远兮,吾将上下而求索 - corr2, mean2 102.subimage 功能: 在一幅图中显示多个图像. 语法: subimage(X,map) subimage(I) subimage(BW) subimage(RGB) subimage(x,y,...) h = subimage(...) 举例 load trees [X2,map2] = imread('forest.tif'); subplot(1,2,1), subimage(X,map) subplot(1,2,2), subimage(X2,map2) 相关命令: 附录 MATLAB图像处理命令 367 103.truesize 功能: 调整图像显示尺寸. 语法: truesize(fig,[mrows mcols]) 9696 路漫漫其修远兮,吾将上下而求索 - truesize(fig) 相关命令: imshow, iptsetpref, iptgetpref 104.uint8 功能: 转换数据为8位无符号整型. 语法: B = uint8(A) 举例 a = [1 3 5]; b = uint8(a); whos Name Size Bytes Class a 1x3 24 doublearray b 1x3 3 uint8 array 相关命令: double, im2double, im2uint8 105.uint16 功能: 转换数据为16位无符号整型. 语法: I = uint16(X) MATLAB高级应用——图形及影像处理 368 9797 路漫漫其修远兮,吾将上下而求索 - 举例 a = [1 3 5]; b = uint16(a); whos Name Size Bytes Class a 1x3 24 double array b 1x3 6 uint16 array 相关命令: double, datatypes, uint8, uint32, int8, int16, int32. 106.warp 功能: 将图像显示到纹理映射表面. 语法: warp(X,map) warp(I,n) warp(BW) warp(RGB) warp(z,...) warp(x,y,z,...) h = warp(...) 举例 [x,y,z] = cylinder; I = imread('testpat1.tif'); 9898 路漫漫其修远兮,吾将上下而求索 - warp(x,y,z,I); 相关命令: imshow 附录 MATLAB图像处理命令 369 107.wiener2 功能: 进行二维适应性去噪过滤处理. 语法: J = wiener2(I,[m n],noise) [J,noise] = wiener2(I,[m n]) 举例 I = imread('saturn.tif'); J = imnoise(I,'gaussian',0,0.005); K = wiener2(J,[5 5]); imshow(J) figure, imshow(K) 相关命令: filter2, medfilt2 108.ycbcr2rgb 功能: 转化YcbCr值为RGB颜色空间. 语法: rgbmap = ycbcr2rgb(ycbcrmap) RGB = ycbcr2rgb(YCBCR) 9999 路漫漫其修远兮,吾将上下而求索 - 相关命令: ntsc2rgb, rgb2ntsc, rgb2ycbcr 109.zoom 功能: 缩放图像. 语法: zoom on zoom off zoom out MATLAB高级应用——图形及影像处理 370 zoom reset zoom zoom xon zoom yon zoom(factor) zoom(fig,option) 相关命令: imcrop 100100 因篇幅问题不能全部显示,请点此查看更多更全内容