时,图像块滑动。
B=im2col(A,[m n]) B=im2col(A,’index’,?)
它是用于对索引图像块排列成向量的操作。
3.5 图像分析
MATLAB的影像处理工具箱支持多种标准的图像处理操作,以方便用户对图像进行分析和调整。这些图像处理操作主要包括:
①获取像素值及其统计数据;
②分析图像,抽取其主要结构信息; ③调整图像,突出其某些特征或抑制噪声
3.5.1 像素值及其统计
MATLAB的影像处理工具箱提供了多个函数以返回与构成图像的数据值相关的信息,这些函数能够以多种形式返回图像数据的信息,主要包括:
①选定像素的数据值(pixval函数和impixel函数); ②沿图像中某个路径的数据值(improfile函数); ③图像数据的轮廓图(imcontour函数); ④图像数据的柱状图(imhist函数);
⑤图像数据的摘要统计值(mean2函数、std2函数和corr2函数); ⑥图像区域的特征度量(imfeature函数)
(1)像素选择
影像处理工具箱中包含两个函数可返回用户指定的图像像素的颜色数据值。 1)pixval函数
当光标在图像上移动时,该函数以交互的方式显示像素的数据值。另外,该函数还可以显示两个像素之间的Euclidean距离。
2)impixel函数
impixel函数可以返回选中像素或像素集的数据值。用户可以直接将像素坐标作为该函数的输入参数,或用鼠标选中像素。 例:imshow canoe.tif;
val=impixel
对于索引图像,pixel函数和impixel函数都将其显示为存储在颜色映像中的RGB值而不是索引值。
(2)强度描述图
在MATLAB影像处理工具箱中,提供了improfile函数用于沿着图像中一条直线段路径或直线路径计算并绘制其强度(灰度)值。 *例:imshow debyel.tif;
improfile
imshow canoe.tif; improfile
*例:RGB=imread('flowers.tif');
figure(1);imshow(RGB); improfile
(3)图像轮廓图
在灰度图的轮廓图显示时,可利用MATLAB影像处理工具箱中的imcontour函数。该函数类似于contour函数,与contour函数相比,其功能更全。它能够自动设置坐标轴对象,从而使得其方向和纵横比能够与所显示的图形相匹配。 *例:I=imread('rice.tif');
imshow(I);
figure;imcontour(I)
I=imread('rice.png'); imshow(I);
figure;imcontour(I)
(4)图像柱状图
图像柱状图可以用来显示索引图像或灰度图像中的灰度分布。可利用MATLAB影像处理工具箱中的imhist函数创建柱状图。
*例:以前面介绍的大米灰度图为例来创建该图的柱状图。其代码如下: I=imread('rice.tif'); imhist(I,64);
I=imread('rice.png'); imhist(I,64);
3.5.2 图像分析
MATLAB中的图像分析技术可以提取图像的结构信息。例如,可以利用影像处理工具箱提供的edge函数来探测边界。这里所谓的边界,其实就是图像中包含的对象所对应的位置。下面介绍几种常见图像分析函数。
(1)灰度图像的边缘:edge函数 该函数的语法如下: BW=edge(I,method)
返回与I大小一样的二进制图像BW,其中元素I为发现I中的边缘。method为下列字符串之一:
‘sobel’:缺省值,用导数的sobel近似值检测边缘,那些梯度最大点返回边缘; ‘prewitt’:用导数的prewitt近似值检测边缘,在那些梯度最大点返回边缘; ‘roberts’:用导数的roberts近似值检测边缘,在那些梯度最大点返回边缘;
‘log’:使用高斯滤波器的拉普拉斯运算对I进行滤波,通过寻找0相交检测边缘。 ‘zerocross’:使用指定的滤波器对I滤波后,寻找0相交检测边缘。
BW=edge(I,method,thresh)
用thresh指定灵敏度阈值,所有不强于thresh的边缘都被忽略。
BW=edge(I,method,thresh,direction) 对于’sobel’和’prewitt’方法指定方向;
direction为字符串:’horizontal’表示水平方向,’vertical’表示垂直方向,’both’两个方向(缺省值)。
BW=edge(I,’log’,thresh,sigma) 用sigma指定标准偏差。 [BW,thresh]=edge(?)。
(2)行四叉树分解:qtdecomp函数
将一块图像分成四块等大小的方块,然后判断每块是否满足同性质的标准,如果满足,则不再分解,否则,再进行细分成四块,并对每块应用测试标准,分解过程重复迭代下去,直到满足标准,结果可能包含不同大小的块。该函数的语法结构如下:
S=qtdecomp(I)
对灰度图像I进行四叉树分解,返回四叉树结构的稀疏矩阵S。 S=qtdecomp(I,threshold)
如果块中元素最大值减去最小值大于threshold,则分解块。threshold为0到1之间的值。 S=qtdecomp(I,threshold,mindim)
如果块小于mindim就不再分解,无论其符合阈值条件与否 S=qtdecomp(I,threshold,[mindim maxdim])
如果块小于mindim或大于maxdim就不再分解,maxdim/mindim必须为2 的幂。 S=qtdecomp(I,FUN)
使用函数FUN确定是否分解块。 S=qtdecomp(I,FUN,P1,P2,?)
(3)获取四叉树分解块值:qtdgetblk函数 该函数的语法结构如下:
[VALS,R,C]=qtdgetblk(I,S,dim)
VALS中对应dim×dim块的值取代I的四叉树分解中的每个dim×dim块。S由qtdecomp函数返回的稀疏矩阵,包含四叉树结构;VALS是dim×dim×k数组,k是四叉树的分解的dim×dim块的数量。如果没有指定大小的块,则返回一个空矩阵。R和C为包含块左上角行列坐标的向量。
[VALS,IDX]=qtdgetblk(I,S,dim)
返回块左上角直线索引的向量IDX。
(4)设置四叉树分解块值:qtsetblk函数 J=qtsetblk(I,S,dim,VALS)
用VALS中对应dim×dim块的值取代I的四叉树分解中的每个dim×dim块。S由qtdecomp函数返回的稀疏矩阵,包含四叉树结构;VALS是dim×dim×k数组,k是四叉树的分解的dim×dim块的数量。
(5)实例
1)图像分析中的灰度边缘检测实例 %调入与显示RGB图像 *RGB=imread('flowers.tif'); isrgb(RGB);
figure(1);imshow(RGB);
RGB=imread('autumn.tif'); isrgb(RGB);
figure(1);imshow(RGB);
% RGB图像转换为灰度图像 I=rgb2gray(RGB); figure(2);imshow(I); colorbar('horiz'); isgray(I);
% 边缘检测
ED=edge(I,'sobel',0.08); figure(3);imshow(ED);
2)Sobel边界探测器和Canny边界探测器在图像分析中的应用实例 操作的对象仍以前面提到rice.tif图像为例。其代码如下: I=imread('rice.tif');
I=imread('rice.png'); BW1=edge(I,'sobel'); BW2=edge(I,'canny'); figure(1);imshow(BW1); figure(2);imshow(BW2);
3.5.3 图像调整
MATLAB中的图像高速技术用于图像的改善。此处的“改善”有两个方面的含义,即:客观方面,例如提高图像的信噪比;主观方面,例如通过修正图像的颜色和强度(灰度)使其某些特征更容易辨识。
(1)对比度增强
在MATLAB中,有关函数有: 1)对比度调整函数:imadjust函数
该函数可用于调整灰度值或颜色图,其用法为: J=imadjust(I,[low high],[bottom top],gamma)
将灰度图像I转换为图像J,使值从low到high与从bottom到top相匹配。值大于high或小于low的被剪去,即小于low的值与bottom相匹配,大于high的值与top相匹配。使用该函数时可将[low high]或[bottom top]指定为空矩阵[ ],此时缺省值为[0 1]。Gamma用来指定描述I和J值关系曲线的形状;gamma < 1,越亮输出值越加强;gamma > 1,越亮输出值越减弱;缺省gamma=1,表示线性变换。
newmap=imadjust(map,[low high],[bottom top],gamma)
对索引图像的颜色图进行变换。如果[low high]和[bottom top]均为2×3矩阵,则gamma为1×3向量,imadjust函数分别调整红、绿、蓝成分,调整后的颜色图newmap大小与原来的map一样。
RGB=imadjust(RGB1,?)
对RGB图像RGB1的每个图像块进行调整。与调整颜色图一样,通过指定[low high]和[bottom top]均为2×3矩阵,gamma为1×3向量,对每个图像块可以使用不同的参数值。如果top < bottom,则图像颜色或灰度将倒置,即倒置变换,得到原图的底片。输入图像可以是uint8或双精度类型值,输出图像与输入图像类型一样。
2)函数:brighten函数
该函数的用法为:brighten(beta)
使现有颜色图变成更亮或更暗的图。如果0 < beta ≤1,则颜色图增亮;-1≤beta < 0,则颜色图变暗。brighten(beta)可以使用brighten(-beta)还原。
MAP=brighten(beta)
返回当前使用的颜色图的更亮或更暗变换后的颜色图MAP,但不改变现有的显示。
NEWMAP=brighten(MAP,beta)
返回指定颜色图MAP的更亮或更暗变换后的新颜色图NEWMAP,但不改变显示。
brighten(FIG,beta)
增强图FIG的所有物体。
3)直方图调整法
在MATLAB中,histeq函数用直方图均衡增强对比度。直方图均衡通过转换灰度图像亮度值或索引图像的颜色图值来增强图像对比度,输出图像的直方图近似与给定的直方图相匹配。
J=histeq(I,hgram) 转换灰度图像I,使输出图像J的直方图具有length(hgram)个条,近似与hgram相匹配。向量hgram包含等间隔条灰度值的整数计数个数。
J=histeq(I,N)
将灰度图像I转化成具有N个离散灰度级的灰度图像J,N缺省值为64。
[J,T]=histeq(I)
返回灰度级变换,使J的灰度级与I的灰度级相匹配。
NEWMAP=histeq(X,MAP,hgram)
变换索引图像X的颜色图,使索引图像(X,NEWMAP)的灰度级成分与hgram相匹配。返回变换后的颜色图NEWMAP,length(hgram)必须与size(MAP,1)一样。
输入图像可以是uint8或双精度类型。输出颜色图通常为双精度类型。输出T也是双精度类型。
(2)图像平滑
图像平滑主要用于受干扰而质量降低的图像,在MATLAB图像处理工具箱中有关图像噪声的函数有:
1)向图像增加噪声:imnoise函数 该函数的用法为: