2024年5月11日发(作者:)
图像处理函数详解——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
1
图像处理函数详解——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('');
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
BW = roipoly(I,c,r);
imshow(I)
2
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('');
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)
3
[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('');
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('');
BW = roicolor(I,128,255);
imshow(I);
4
figure, imshow(BW)
matlab图像处理函数详解——rgb2gray
功能:将真彩色图像转换成灰度图像或者将彩色色图转换成灰度色图。
用法:I = rgb2gray(RGB)
newmap = rgb2gray(map)
I = rgb2gray(RGB) 将真彩色图像RGB转换成灰度图像I
newmap = rgb2gray(map) 将彩色色图map转换成灰度色图newmap
例子:X=imread(‘’);
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
5
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 ...] 形式指出边界盒子沿着每个维数方向的长度。本例的各
6
部分区域最小矩形如下图!注意:请在这熟悉一下函数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.03
19,-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
7
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.96
12,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).因此,可以使用下面的方法创建相应的向量:
regionprops(L,'Area');allArea = [];allArea 就是一个与结构数
组 stats 具备相同长度的向量。 基于特定原则的区域选择当你要基于特定准则
条件选择某个区域时,将函数 ismember 和 regionprops 联合使用是很有用处
的。例如:创建一个只包含面积大于80的二值图像,用以下命令 idx =
find([] > 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
8
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
功能:用来执行通用的滑动邻域操作。
9
用法: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的数组
10
例子:
mri=uint8(zeros(128,128,1,27));
for frame=1:27
[mri(:,:,:,frame),map]=imread('',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('');
J = filter2(fspecial('sobel'),I);
K = mat2gray(J);
imshow(I), figure, imshow(K)
图像处理函数详解——imclose
功能:对图像实现闭运算,闭运算也能平滑图像的轮廓,但与开运算相反,
它一般融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
用法:IM2 = imclose(IM,SE)
IM2 = imclose(IM,NHOOD)
用法和imopen相同,请在本论坛查找!
例子:
11
originalBW = imread('');
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('');
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函数返回的结构元素或者结构元素对象组。
12
IM2 = imerode(IM,NHOOD)腐蚀图像IM,这里NHOOD是定义结构元素邻域0
和1的矩阵。
IM2 = imerode(...,PADOPT)指出输出图像的大小(是否与输入图像大小一
致)。
例子:
originalBW = imread('');
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('');
se = strel('ball',5,5);
I2 = imdilate(I,se);
13
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('');
J =imresize(I,1.25);
%使用默认的最近邻插值法放大图像1.25倍
imshow(I)
figure, imshow(J)
图像处理函数详解——imnoise
功能:模仿噪声信息,相当于图像的相加运算。
14
用法:J = imnoise(I,type)
J = imnoise(I,type,parameters)
参数Type对应的噪声类型如下:
'gaussian'高斯白噪声
'localvar'0均值白噪声
'poisson'泊松噪声
'salt & pepper'盐椒噪声
'speckle'乘性噪声
例子:I = imread('');
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。
举例:
15
I=imread('')
imshow(I)
figure,imhist(I)
图像处理函数详解——imfinfo
功能:获取图像文件的信息
用法:info = imfinfo(filename,fmt)
info = imfinfo(filename)
参数fmt对应于图像处理工具箱中所有支持的图像文件格式(如
'bmp','jpg'等等)
例子:info = imfinfo('')
info =
Filename:''
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
16
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)
17
计算图像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('');
bw2 = imcomplement(bw);
subplot(1,2,1),imshow(bw)
subplot(1,2,2),imshow(bw2)
I = imread('');
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种色彩。
18
[Y,newmap] = imapprox(X,map,tol) 表示把索引图像和色图map进行均衡
量化逼近。新色图newmap至多有(floor(1/tol)+1)^3种色彩,tol的范围必须
为[0,1.0]。
例子:[X, map] = imread('');
[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的红、绿、蓝调色板分别进行调整。随着颜色矩
阵的调整,每一个调色板都有唯一的映射值。
参数gamma指定了曲线的形状,该曲线用来映射I的亮度值。
如果gamma小于1,映射被加权到更高的输出值。如果gamma大于1,映射被加
权到更低的输出值。如果省略了函数的参量,则gamma默认为1(线性映射)。
举例:
19
调整灰度图像:K = imadjust(I,[0.3 0.7],[]);
figure,
imshow(K)
调整RGB图像:RGB1 = imread('');
RGB2 =
imadjust(RGB1,[.2 .3 0; .6 .7 1],[]);
imshow(RGB1
), figure, imshow(RGB2)
图像处理函数详解——imadd
功能:实现图像相加运算。
用法:Z = imadd(X,Y)
例子:I = imread('');
J = imread('');
K = imadd(I,J,'uint16');
%转换数据类型,然后将图像相加
imshow(K,[])
图像处理函数详解——im2uint8
功能:将图像转换为8位无符号整型。也可将输出值限定在[0 255]内。
用法:I2 = im2uint8(I)
RGB2 = im2uint8(RGB)
I = im2uint8(BW)
X2 = im2uint8(X,'indexed')
举例:I = reshape(uint8(linspace(0,255,255)),[5 5])
I2 = im2uint8(I)
图像处理函数详解——im2bw
20
功能:通过设定亮度将阈值灰度、真彩、索引图像转换为二值图像。
用法: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)
newmap = histeq(X,map)
[newmap,T] = histeq(X,...)
这三个是针对索引图像调色板的直方图均衡化,用法和灰度图
像的一样。
21
举例:
I = imread('');
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('');
BW = dither(I);
imview(BW)
图像处理函数详解——conv2
功能:是二维卷积运算函数(与convmtx2相似)。如果a和b是两个离散
变量n1和n2的函数,则关于a和b的二维卷积运算数学公式如下:
用法:C = conv2(A,B)
C = conv2(hcol,hrow,A)
22
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);
H = conv2(A,s);
mesh(H)
图像处理函数详解——colfilt
功能:以列方法进行邻域处理,也可执行常规非线性滤波(自己理解的)。
23
含义
默认值,返回全部二维卷积值。
返回与A大小相同卷积值的中间部分
用法:B = colfilt(A,[m n],block_type,fun)
该函数生成了一幅图像A,在A中,每一列对应于其中心位于图像内
某个位置的邻域所包围 的像素。然后将函数应用于该矩阵中。[m n]表示大小为
m行n列的邻域。block_type表示了一个字符串,包括'distinct','sliding'
两种,其中'sliding'是在 输入图像中逐个像素地滑动该m乘n的区域。fun表
示引用了一个函数进行处理,函数返回值的大小必须和原图像大小相同。
举例:I = imread('');
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
8
24
参数值
4邻域
说明
8邻域
对三维
6
18
6邻域
18邻域
26
例子:
26邻域
BW1 = imread('');
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。
[L,num] = bwlabel(BW,n)返回连通数num
图像处理函数详解——bwareaopen
功能:用于从对象中移除小对象。
用法:BW2 = bwareaopen(BW,P)
25
BW2 = bwareaopen(BW,P,CONN)
BW2 = bwareaopen(BW,P,CONN)从二值图像中移除所有小于P的连通对象。
CONN对应邻域方法,默认为8。
例子:
originalBW = imread('');
imview(originalBW)
bwAreaOpenBW = bwareaopen(originalBW,50);
imview(bwAreaOpenBW)
图像增强
1. 直方图均衡化的 Matlab 实现
1.1 imhist 函数
功能:计算和显示图像的色彩直方图
格式:imhist(I,n)
imhist(X,map)
说明:imhist(I,n) 其中,n 为指定的灰度级数目,缺省值为256;
imhist(X,map) 就算和显示索引色图像 X 的直方图,map 为调色板。用
stem(x,counts) 同样可以显示直方图。
1.2 imcontour 函数
功能:显示图像的等灰度值图
26
格式: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)
[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,...) 是针对索引
色图像调色板的直方图均衡。
27
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 为缺省值,返回二维卷积的全部结果;
》same 返回二维卷积结果中与 A 大小相同的中间部分;
valid 返回在卷积过程中,未使用边缘补 0 部分进行计
算的卷积结果部分,当 size(A)>size(B) 时,size(C)=[Ma-Mb+1,Na-Nb+1]。
3.2 conv 函数
功能:计算多维卷积
28
格式:与 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) 3.4 fspecial 函数 功能:产生预定义滤波器 格式:H=fspecial(type) H=fspecial('gaussian',n,sigma) 高 斯低通滤波器 H=fspecial('sobel') Sobel 水平边缘增强滤波器 H=fspecial('prewitt') Prewitt 水平边缘增强滤波器 H=fspecial('laplacian',alpha) 近似二维拉普拉斯运算滤波器 29 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) 其中,X 表示输入图像;N 表示采样间隔点,如果 X 小于该数 值,那么 Matlab 将会对 X 进行零填充,否则将进行截取,使之长度为 N ;DIM 表示要进行离散傅立叶变换。 A=fft2(X,MROWS,NCOLS) 其中,MROWS 和 NCOLS 指定对 X 进行零填充后的 X 大小。 30 A=fftn(X,SIZE) 其中,SIZE 是一个向量,它们每一个元素都将指定 X 相应维进行零填充后 的长度。 函数 ifft、ifft2 和 ifftn的调用格式于对应的离散傅立叶 变换函数一致。 例子:图像的二维傅立叶频谱 % 读入原始图像 I=imread(''); imshow(I) % 求离散傅立叶频谱 J=fftshift(fft2(I)); figure; imshow(log(abs(J)),[8,10]) 2. 离散余弦变换的 Matlab 实现 2.1. dct2 函数 功能:二维 DCT 变换 格式:B=dct2(A) B=dct2(A,m,n) 31 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 类型。 3. 图像小波变换的 Matlab 实现 3.1 一维小波变换的 Matlab 实现 (1) dwt 函数 功能:一维离散小波变换 32 格式:[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 实现 二维小波变换的函数 ------------------------------------------------- 函数名 函数功能 --------------------------------------------------- dwt2 二维离散小波变换 33 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) Y=wcodemat(X) 说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16; OPT 指定了编码的方式(缺省值为 'mat'),即: OPT='row' ,按行编码 OPT='col' ,按列编码 34 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) 说明:[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') 35 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 位浮点 数,所需存储量很大;MATLAB还支持另一种类型无符号整型(uint8),即图 像矩 阵中每个数据占用1个字节。 在使用MATLAB工具箱时,一定要注意函数所要求的参数类型。另外, uint8 与double两种类型数据的值域不同,编程需注意值域转换。 从uint8到double的转换 --------------------------------------------- 36 图像类型 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))) --------------------------------------------- 2. 图像处理工具箱所支持的图像类型 2.1 真彩色图像 R、G、B三个分量表示一个像素的颜色。如果要读取图像中(100,50) 处的像素值, 可查看三元数据(100,50,1:3)。 真彩色图像可用双精度存储,亮度值范围是[0,1];比较符合习惯的 存储方法是用无 37 符号整型存储,亮度值范围[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 绿 0 1 0 橘 黄 1 0.5 0 蓝 0 0 1 深 红 0.5 0 0 黄 1 1 0 灰 0.5 0.5 0.5 -------------------------------------------- 产生标准调色板的函数 38 ------------------------------------------------- 函数名 调色板 ------------------------------------------------- Hsv 色彩饱和度,以红色开始,并以红色结束 Hot 黑色-红色-黄色-白色 Cool 青蓝和洋红的色度 Pink 粉红的色度 Gray 线型灰度 Bone 带蓝色的灰度 Jet Hsv的一种变形,以蓝色开始,以蓝色结束 Copper 线型铜色度 Prim 三棱镜,交替为红、橘黄、黄、绿和天蓝 Flag 交替为红、白、蓝和黑 -------------------------------------------------- 缺省情况下,调用上述函数灰产生一个64×3的调色板,用户也可指 定调色板大小。 索引色图像数据也有double和uint8两种类型。 当图像数据为double类型时,值1代表调色板中的第1行,值2代表 第2行…… 如果图像数据为uint8类型,0代表调色板的第一行,,值1代表第2 行…… 2.3 灰度图像 存储灰度图像只需要一个数据矩阵。 数据类型可以是double,[0,1];也可以是uint8,[0,255] 39 2.4 二值图像 二值图像只需一个数据矩阵,每个像素只有两个灰度值,可以采用 uint8或double类型存储。 MATLAB工具箱中以二值图像作为返回结果的函数都使用uint8类型。 2.5 图像序列 MATLAB工具箱支持将多帧图像连接成图像序列。 图像序列是一个4维数组,图像帧的序号在图像的长、宽、颜色深度 之后构成第4维。 分散的图像也可以合并成图像序列,前提是各图像尺寸必须相同,若 是索引色图像, 调色板也必须相同。 可参考cat()函数 A=cat(4,A1,A2,A3,A4,A5) 3. MATLAB图像类型转换 图像类型转换函数 ------------------------------------------------------------ --------------- 函数名 函数功 能 ------------------------------------------------------------ --------------- dither 图像抖动,将灰度图变成二值图,或将真彩 色图像抖动成索引色图像 gray2ind 将灰度图像转换成索引图像 grayslice 通过设定阈值将灰度图像转换成索引色图像 im2bw 通过设定亮度阈值将真彩色、索引色、灰度图 转换成二值图 40 ind2gray 将索引色图像转换成灰度图像 ind2rgb 将索引色图像转换成真彩色图像 mat2gray 将一个数据矩阵转换成一副灰度图 rgb2gray 将一副真彩色图像转换成灰度图像 rgb2ind 将真彩色图像转换成索引色图像 ------------------------------------------------------------ ---------------- 4. 图像文件的读写和查询 4.1 图形图像文件的读取 利用函数imread()可完成图形图像文件的读取,语法: A=imread(filename,fmt) [X,map]=imread(filename,fmt) [...]=imread(filename) [...]=imread(filename,idx) (只对TIF格式的文件) [...]=imread(filename,ref) (只对HDF格式的文件) 通常,读取的大多数图像均为8bit,当这些图像加载到内存中时, Matlab就将其存放 在类uint8中。此为Matlab还支持16bit的PNG和TIF图像,当读取这类 文件时,Matlab就将 其存贮在uint16中。 41 注意:对于索引图像,即使图像阵列的本身为类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()函数 5. 图像文件的显示 5.1 索引图像及其显示 方法一: image(X) colormap(map) 42 方法二: 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 分别为数据数组的最小值和最大值。 (2) imagesc 函数显示灰度图像 下面的代码是具有两个输入参数的 imagesc 函数显示一副灰度图像 imagesc(1,[0,1]); colormap(gray); imagesc 函数中的第二个参数确定灰度范围。灰度范围中的第一个 值(通常是0), 43 对应于颜色映象表中的第一个值(颜色),第二个值(通常是1)则对应与 颜色映象表 中的最后一个值(颜色)。灰度范围中间的值则线型对应与颜色映象表中剩 余的值(颜色)。 在调用 imagesc 函数时,若只使用一个参数,可以用任意灰度范围 显示图像。在该 调用方式下,数据矩阵中的最小值对应于颜色映象表中的第一个颜色值,数 据矩阵中的最大 值对应于颜色映象表中的最后一个颜色值。 5.3 RGB 图像及其显示 (1) image(RGB) 不管RGB图像的类型是double浮点型,还是 uint8 或 uint16 无符 号整数型,Matlab都 能通过 image 函数将其正确显示出来。 RGB8 = uint8(round(RGB64×255)); % 将 double 浮点型转换为 uint8 无符号整型 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 的数组 44 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 直接从磁盘显示图像 可使用一下命令直接进行图像文件的显示: imshow filename 其中,filename 为要显示的图像文件的文件名。 如果图像是多帧的,那么 imshow 将仅显示第一帧。但需注意,在使 用这种方式时,图像 数据没有保存在Matlab 7.0 工作平台。如果希望将图像装入工作台中,需 使用 getimage 函 数,从当前的句柄图形图像对象中获取图像数据, 45 命令形式为: rgb = getimage; 2 功能: 进行二维离散余弦变换. 语法: B = dct2(A) B = dct2(A,m,n) B = dct2(A,[m n]) 举例 RGB = imread(''); I = rgb2gray(RGB); J = dct2(I); imshow(log(abs(J)),[]), colormap(jet(64)), colorbar J(abs(J) < 10) = 0; K = idct2(J)/255; imshow(K) 相关命令: fft2, idct2, ifft2 功能: MATLAB高级应用——图形及影像处理 330 46 计算离散余弦变换矩阵. 语法: D = dctmtx(n) 相关命令: dct2 功能: 放大二进制图像. 语法: BW2 = dilate(BW1,SE) BW2 = dilate(BW1,SE,alg) BW2 = dilate(BW1,SE,...,n) 举例 BW1 = imread(''); SE = ones(6,2); BW2 = dilate(BW1,SE); imshow(BW1) figure, imshow(BW2) 相关命令: bwmorph, erode 功能: 通过抖动增加外观颜色分辨率,转换图像. 语法: 47 X = dither(RGB,map) BW = dither(I) 相关命令: rgb2ind 附录 MATLAB图像处理命令 331 功能: 转换数据为双精度型. 语法: B = double(A) 举例 A = imread(''); B = sqrt(double(A)); 相关命令: im2double, im2uint, uint8 功能: 识别强度图像中的边界. 语法: BW = edge(I,'sobel') BW = edge(I,'sobel',thresh) BW = edge(I,'sobel',thresh,direction) [BW,thresh] = edge(I,'sobel',...) BW = edge(I,'prewitt') 48 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') BW = edge(I,'canny',thresh) BW = edge(I,'canny',thresh,sigma) MATLAB高级应用——图形及影像处理 332 [BW,threshold] = edge(I,'canny',...) 举例 I = imread(''); BW1 = edge(I,'prewitt'); BW2 = edge(I,'canny'); imshow(BW1); figure, imshow(BW2) 49 功能: 弱化二进制图像的边界. 语法: BW2 = erode(BW1,SE) BW2 = erode(BW1,SE,alg) BW2 = erode(BW1,SE,...,n) 举例 BW1 = imread(''); SE = ones(3,1); BW2 = erode(BW1,SE); imshow(BW1) figure, imshow(BW2) 相关命令: bwmorph, dilate 附录 MATLAB图像处理命令 333 2 功能: 进行二维快速傅里叶变换. 语法: B = fft2(A) B = fft2(A,m,n) 举例 load imdemos saturn2 imshow(saturn2) 50 B = fftshift(fft2(saturn2)); imshow(log(abs(B)),[]), colormap(jet(64)), colorbar 相关命令: dct2, fftshift, idct2, ifft2 功能: 进行n维快速傅里叶变换. 语法: B = fftn(A) B = fftn(A,siz) 相关命令: fft2, ifftn ft MATLAB高级应用——图形及影像处理 334 功能: 把快速傅里叶变换的DC组件移到光谱中心. 语法: B = fftshift(A) 举例 B = fftn(A); C = fftshift(B); 相关命令: fft2, fftn, ifftshift 2 功能: 51 进行二维线性过滤操作. 语法: 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 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 52 相关命令: conv2, roifilt2 ace 附录 MATLAB图像处理命令 335 功能: 确定二维频率响应的频率空间. 语法: [f1,f2] = freqspace(n) [f1,f2] = freqspace([m n]) [x1,y1] = freqspace(...,'meshgrid') f = freqspace(N) f = freqspace(N,'whole') 相关命令: fsamp2, fwind1, fwind2 2 功能: 计算二维频率响应. 语法: [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) 53 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]) 2 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 54 al 功能: 创建预定义过滤器. 语法: h = fspecial(type) h = fspecial(type,parameters) 举例 I = imread(''); h = fspecial('unsharp',0.5); I2 = filter2(h,I)/255; imshow(I) figure, imshow(I2) 相关命令: conv2, edge, filter2, fsamp2, fwind1, fwind2 2 功能: 通过频率转换设计二维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]); 55 [H,w] = freqz(b,1,128,'whole'); plot(w/pi-1,fftshift(abs(H))) 相关命令: conv2, filter2, fsamp2, fwind1, fwind2 1 功能: 用一维窗口方法设计二维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 2 功能: 用二维窗口方法设计二维FIR过滤器. 语法: 56 h = fwind2(Hd,win) h = fwind2(f1,f2,Hd,win) 举例 [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) MATLAB高级应用——图形及影像处理 338 相关命令: conv2, filter2, fsamp2, freqspace, ftrans2, fwind1 ge 功能: 从坐标轴取得图像数据. 语法: A = getimage(h) [x,y,A] = getimage(h) [...,A,flag] = getimage(h) [...] = getimage 举例 imshow I = getimage; 2ind 57 功能: 转换灰度图像为索引图像. 语法: [X,map] = gray2ind(I,n) 相关命令: ind2gray ice 功能: 从灰度图像创建索引图像. 语法: X = grayslice(I,n) X = grayslice(I,v) 举例 I = imread(''); X = grayslice(I,16); imshow(I) figure, imshow(X,jet(16)) 附录 MATLAB图像处理命令 339 相关命令: gray2ind 功能: 用柱状图均等化增强对比. 语法: 58 J = histeq(I,hgram) J = histeq(I,n) [J,T] = histeq(I,...) 举例 I = imread(''); J = histeq(I); imshow(I) figure, imshow(J) imhist(I,64) figure; imhist(J,64) 相关命令: brighten, imadjust, imhist 2rgb 功能: 转换HSV值为RGB颜色空间. 语法: rgbmap = hsv2rgb(hsvmap) RGB = hsv2rgb(HSV) 相关命令: MATLAB高级应用——图形及影像处理 340 rgb2hsv, rgbplot 2 功能: 计算二维离散反余弦变换. 语法: 59 B = idct2(A) B = idct2(A,m,n) B = idct2(A,[m n]) 相关命令: dct2, dctmtx, fft2, ifft2 2 功能: 计算二维快速傅里叶反变换. 语法: B = ifft2(A) B = ifft2(A,m,n) 相关命令: fft2, fftshift, idct2 功能: 计算n维快速傅里叶反变换. 语法: B = ifftn(A) B = ifftn(A,siz) 相关命令: fft2, fftn, ifft2 2bw 功能: 转换图像为二进制图像. 语法: 60 BW = im2bw(I,level) 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 2col 功能: 重调图像块为列. 语法: B = im2col(A,[m n],block_type) B = im2col(A,[m n]) B = im2col(A,'indexed',...) 相关命令: blkproc, col2im, colfilt, nlfilter 2double 功能: 转换图像矩阵为双精度型. 语法: 61 I2 = im2double(I1) RGB2 = im2double(RGB1) BW2 = im2double(BW1) X2 = im2double(X1,'indexed') 相关命令: double, im2uint8, uint8 2uint8 功能: 转换图像阵列为8位无符号整型. 语法: I2 = im2uint8(I1) RGB2 = im2uint8(RGB1) BW2 = im2uint8(BW1) X2 = im2uint8(X1,'indexed') MATLAB高级应用——图形及影像处理 342 相关命令: im2uint16, double, im2double, uint8, imapprox, uint16 2uint16 功能: 转换图像阵列为16位无符号整型. 语法: I2 = im2uint16(I1) RGB2 = im2uint16(RGB1) 62 X2 = im2uint16(X1,'indexed') 相关命令: im2uint8, double, im2double, uint8, uint16, imapprox st 功能: 调整图像灰度值或颜色映像表. 语法: J = imadjust(I,[low high],[bottom top],gamma) newmap = imadjust(map,[low high],[bottom top],gamma) RGB2 = imadjust(RGB1,...) 举例 I = imread(''); J = imadjust(I,[0.3 0.7],[]); imshow(I) figure, imshow(J) 相关命令: brighten, histeq ox 功能: 对索引图像进行近似处理. 语法: [Y,newmap] = imapprox(X,map,n) 附录 MATLAB图像处理命令 343 [Y,newmap] = imapprox(X,map,tol) 63 Y = imapprox(X,map,newmap) [...] = imapprox(...,dither_option) 相关命令: cmunique, dither, rgb2ind our 功能: 创建图像数据的轮廓图. 语法: imcontour(I,n) imcontour(I,v) imcontour(x,y,...) imcontour(...,LineSpec) [C,h] = imcontour(...) 举例 I = imread(''); imcontour(I,3) 相关命令: clabel, contour, LineSpec 功能: 剪切图像. 语法: I2 = imcrop(I) X2 = imcrop(X,map) 64 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(''); I2 = imcrop(I,[60 40 100 90]); imshow(I) figure, imshow(I2) 相关命令: zoom ure 功能: 计算图像区域的特征尺寸. 语法: stats = imfeature(L,measurements) stats = imfeature(L,measurements,n) 举例 BW = imread(''); L = bwlabel(BW); 65 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] EquivDiameter: 10.6451 Solidity: 0.4341 Extent: 0.3708 PixelList: [89x2 double] 相关命令: 66 bwlabel o 功能: 返回图形文件信息. 语法: info = imfinfo(filename,fmt) info = imfinfo(filename) 举例 info = imfinfo('') info = Filename:'' 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' 67 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 GrayResponseUnit: 0.0100 MaxSampleValue: 255 MinSampleValue: 0 Thresholding: 1 相关命令: imread, imwrite 68 功能: 显示图像数据的柱状图. 语法: imhist(I,n) imhist(X,map) [counts,x] = imhist(...) 举例 I = imread(''); imhist(I) 附录 MATLAB图像处理命令 347 相关命令: histeq e 功能: 创建多帧索引图的电影动画. 语法: mov = immovie(X,map) 举例 load mri mov = immovie(D,map); 相关命令: montage e 功能: 69 增加图像的渲染效果. 语法: J = imnoise(I,type) J = imnoise(I,type,parameters) 举例 I = imread(''); J = imnoise(I,'salt & pepper',0.02); imshow(I) figure, imshow(J) 相关命令: rand l 功能: 确定像素颜色值. 语法: 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) 70 P = impixel(x,y,X,map,xi,yi) P = impixel(x,y,RGB,xi,yi) [xi,yi,P] = impixel(x,y,...) 举例 RGB = imread(''); 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 ile 功能: 沿线段计算剖面图的像素值. 语法: 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(...) 71 [...] = improfile(x,y,I,xi,yi) [...] = improfile(x,y,I,xi,yi,n) 附录 MATLAB图像处理命令 349 [...] = improfile(...,method) 举例 I = imread(''); x = [35 338 346 103]; y = [253 250 17 148]; improfile(I,x,y), grid on 相关命令: impixel, pixval 功能: 从图形文件中读取图像. 语法: 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('',6); 72 info = imfinfo(''); [X,map] = imread('',info(4).Reference); bg = [255 0 0]; A = imread('','BackgroundColor',bg); MATLAB高级应用——图形及影像处理 350 [A,map,alpha] = imread(''); 相关命令: imfinfo, imwrite,fread,double,uint8,uint16 ze 功能: 改变图像大小. 语法: B = imresize(A,m,method) B = imresize(A,[mrows ncols],method) B = imresize(...,method,n) B = imresize(...,method,h) te 功能: 旋转图像. 语法: B = imrotate(A,angle,method) B = imrotate(A,angle,method,'crop') 举例 I = imread(''); 73 J = imrotate(I,-4,'bilinear','crop'); imshow(I) figure, imshow(J) 相关命令: imcrop, imresize 功能: 显示图像. 语法: 附录 MATLAB图像处理命令 351 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(...) 相关命令: getimage, imread, iptgetpref, iptsetpref, subimage, truesize, warp e 功能: 把图像写入图形文件中. 74 语法: imwrite(A,filename,fmt) imwrite(X,map,filename,fmt) imwrite(...,filename) imwrite(...,Param1,Val1,) 举例 imwrite(X,map,'','Compression','none',... 'WriteMode','append') 相关命令: imfinfo, imread 2gray 功能: 把检索图像转化为灰度图像. 语法: I = ind2gray(X,map) 举例 load trees I = ind2gray(X,map); imshow(X,map) figure,imshow(I) MATLAB高级应用——图形及影像处理 352 相关命令: gray2ind, imshow, rgb2ntsc 2rgb 75 功能: 转化索引图像为RGB真彩图像. 语法: RGB = ind2rgb(X,map) 相关命令: ind2gray, rgb2ind pref 功能: 获取图像处理工具箱参数设置. 语法: value = iptgetpref(prefname) 举例 value = iptgetpref('ImshowAxesVisible') value = off 相关命令: imshow, iptsetpref pref 功能: 设置图像处理工具箱参数. 语法: iptsetpref(prefname,value) 举例 iptsetpref('ImshowBorder','tight') 76 相关命令: imshow, iptgetpref, truesize 附录 MATLAB图像处理命令 353 功能: 进行反Radon变换. 语法: 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 功能: 判断是否为二进制图像. 语法: flag = isbw(A) 相关命令: 77 isind, isgray, isrgb 功能: 判断是否为灰度图像. 语法: flag = isgray(A) 相关命令: isbw, isind, isrgb MATLAB高级应用——图形及影像处理 354 功能: 判断是否为索引图像. 语法: flag = isind(A) 相关命令: isbw, isgray, isrgb 功能: 判读是否为RGB真彩图像. 语法: flag = isrgb(A) 相关命令: isbw, isgray, isind t 78 功能: 创建一个用于applylut函数的lookup表. 语法: lut = makelut(fun,n) 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 79 1 1 相关命令: applylut 2gray 功能: 转化矩阵为灰度图像. 语法: I = mat2gray(A,[amin amax]) I = mat2gray(A) 举例 I = imread(''); J = filter2(fspecial('sobel'),I); K = mat2gray(J); imshow(I) figure, imshow(K) 相关命令: gray2ind 2 功能: 计算矩阵元素的平均值. 语法: b = mean2(A) 相关命令: 80 std2, mean, std t2 功能: 进行二维中值过滤. 语法: MATLAB高级应用——图形及影像处理 356 B = medfilt2(A,[m n]) B = medfilt2(A) B = medfilt2(A,'indexed',...) 举例 I = imread(''); J = imnoise(I,'salt & pepper',0.02); K = medfilt2(J); imshow(J) figure, imshow(K) 相关命令: filter2, ordfilt2, wiener2 e 功能: 在矩形框中同时显示多幅图像. 语法: montage(I) montage(BW) montage(X,map) 81 montage(RGB) h = montage(...) 举例 load mri montage(D,map) 附录 MATLAB图像处理命令 357 相关命令: immovie er 功能: 进行边沿操作. 语法: 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 2rgb 功能: 转换NTSC的值为RGB颜色空间. 语法: rgbmap = ntsc2rgb(yiqmap) RGB = ntsc2rgb(YIQ) 82 相关命令: rgb2ntsc, rgb2ind, ind2rgb, ind2gray t2 功能: 进行二维统计顺序过滤. 语法: B = ordfilt2(A,order,domain) B = ordfilt2(A,order,domain,S) MATLAB高级应用——图形及影像处理 358 B = ordfilt2(...,padopt) 相关命令: medfilt2 m 功能: 产生一个头部幻影图像. 语法: P = phantom(def,n) P = phantom(E,n) [P,E] = phantom(...) 举例 P = phantom('Modified Shepp-Logan',200); imshow(P) 相关命令: radon, iradon 83 功能: 显示图像像素信息. 语法: pixval on pixval off pixval pixval(fig,option) 相关命令: impixel, improfile mp 功能: 进行四叉树分解. 附录 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,...) 举例 I = [1 1 1 1 2 3 6 6 1 1 2 1 4 5 6 8 84 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 lk 功能: 获取四叉树分解中的块值. 语法: [vals,r,c] = qtgetblk(I,S,dim) 85 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 相关命令: qtdecomp, qtsetblk lk 功能: 86 设置四叉树分解中的块值. 语法: 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 功能: 计算Radon变换. 语法: R = radon(I,theta) R = radon(I,theta,n) [R,xp] = radon(...) 87 举例 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 2gray 功能: 转换RGB图像或颜色映像表为灰度图像. 语法: I = rgb2gray(RGB) newmap = rgb2gray(map) 相关命令: MATLAB高级应用——图形及影像处理 362 ind2gray, ntsc2rgb, rgb2ind, rgb2ntsc 2hsv 功能: 转化RGB值为HSV颜色空间. 语法: hsvmap = rgb2hsv(rgbmap) HSV = rgb2hsv(RGB) 相关命令: hsv2rgb, rgbplot 88 2ind 功能: 转化RGB图像为索引图像. 语法: [X,map] = rgb2ind(RGB,tol) [X,map] = rgb2ind(RGB,n) X = rgb2ind(RGB,map) [...] = rgb2ind(...,dither_option) 举例 RGB = imread(''); [X,map] = rgb2ind(RGB,128); imshow(X,map) 相关命令: cmunique, dither, imapprox, ind2rgb, rgb2gray 2ntsc 功能: 转化RGB的值为NTSC颜色空间. 语法: yiqmap = rgb2ntsc(rgbmap) YIQ = rgb2ntsc(RGB) 附录 MATLAB图像处理命令 363 相关命令: ntsc2rgb, rgb2ind, ind2rgb, ind2gray 2ycbcr 功能: 转化RGB的值为YcbCr颜色空间. 语法: 89 ycbcrmap = rgb2ycbcr(rgbmap) YCBCR = rgb2ycbcr(RGB) 相关命令: ntsc2rgb, rgb2ntsc, ycbcr2rgb t 功能: 划分颜色映像表. 语法: rgbplot(map) 举例 rgbplot(jet) 相关命令: colormap or 功能: 选择感兴趣的颜色区. 语法: BW = roicolor(A,low,high) BW = roicolor(A,v) 举例 I = imread(''); BW = roicolor(I,128,255); imshow(I); MATLAB高级应用——图形及影像处理 364 90 figure, imshow(BW) 相关命令: roifilt2, roipoly l 功能: 在图像的任意区域中进行平滑插补. 语法: 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(''); 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 t2 91 功能: 过滤敏感区域. 语法: 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 y 功能: 选择一个敏感的多边形区域. 语法: 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(''); c = [222 272 300 270 221 194]; 92 r = [21 21 75 121 121 75]; BW = roipoly(I,c,r); imshow(I) MATLAB高级应用——图形及影像处理 366 figure, imshow(BW) 相关命令: roifilt2, roicolor, roifill 2 功能: 计算矩阵元素的标准偏移. 语法: b = std2(A) 相关命令: corr2, mean2 ge 功能: 在一幅图中显示多个图像. 语法: subimage(X,map) subimage(I) subimage(BW) subimage(RGB) subimage(x,y,...) h = subimage(...) 93 举例 load trees [X2,map2] = imread(''); subplot(1,2,1), subimage(X,map) subplot(1,2,2), subimage(X2,map2) 相关命令: 附录 MATLAB图像处理命令 367 ze 功能: 调整图像显示尺寸. 语法: truesize(fig,[mrows mcols]) truesize(fig) 相关命令: imshow, iptsetpref, iptgetpref 8 功能: 转换数据为8位无符号整型. 语法: B = uint8(A) 举例 a = [1 3 5]; b = uint8(a); whos 94 Name Size Bytes Class a 1x3 24 doublearray b 1x3 3 uint8 array 相关命令: double, im2double, im2uint8 16 功能: 转换数据为16位无符号整型. 语法: I = uint16(X) MATLAB高级应用——图形及影像处理 368 举例 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. 功能: 将图像显示到纹理映射表面. 语法: 95 warp(X,map) warp(I,n) warp(BW) warp(RGB) warp(z,...) warp(x,y,z,...) h = warp(...) 举例 [x,y,z] = cylinder; I = imread(''); warp(x,y,z,I); 相关命令: imshow 附录 MATLAB图像处理命令 369 2 功能: 进行二维适应性去噪过滤处理. 语法: J = wiener2(I,[m n],noise) [J,noise] = wiener2(I,[m n]) 举例 I = imread(''); J = imnoise(I,'gaussian',0,0.005); K = wiener2(J,[5 5]); 96 imshow(J) figure, imshow(K) 相关命令: filter2, medfilt2 2rgb 功能: 转化YcbCr值为RGB颜色空间. 语法: rgbmap = ycbcr2rgb(ycbcrmap) RGB = ycbcr2rgb(YCBCR) 相关命令: ntsc2rgb, rgb2ntsc, rgb2ycbcr 功能: 缩放图像. 语法: zoom on zoom off zoom out MATLAB高级应用——图形及影像处理 370 zoom reset zoom zoom xon zoom yon zoom(factor) 97


发布评论