1 颜色特征
颜色特征是图像检索中应用最为广泛的视觉特征。颜色特征无需进行大量计算。只需将数字图像中的像素值进行相应转换,表现为数值即可。因此颜色特征以其低复杂度成为了一个较好的特征。
在图像处理中,我们可以将一个具体的像素点所呈现的颜色分多种方法分析,并提取出其颜色特征分量。比如通过手工标记区域提取一个特定区域(region)的颜色特征,用该区域在一个颜色空间三个分量各自的平均值表示,或者可以建立三个颜色直方图等方法。
颜色直方图:
颜色直方图用以反映图像颜色的组成分布,即各种颜色出现的概率。从512x512的灰度图像中提取维度为k的颜色直方图,将256种灰度值分为k个区间,然后计算每个区间中像素点总数为多少。图像直方图对图像的物理变换是不敏感的。因此常提取颜色特征并用颜色直方图应用于衡量和比较两幅图像的全局差。
颜色直方图也有其缺点:由于颜色直方图是全局颜色统计的结果,因此丢失了像素点间的位置特征。可能有几幅图像具有相同或相近的颜色直方图,但其图像像素位置分布完全不同。因此,图像与颜色直方图得多对一关系使得颜色直方图在识别前景物体上不能获得很好的效果。
2 形状特征
形状特征的表达必须以对图像中物体或区域的分割为基础。 两种经典的算法是SIFT和HOG。 Sift是先找特征点,而hog是对图片进行分割。
SIFT在尺度空间中所提取的图像局部特征点。SIFT特征点提取较为方便,对于图像的缩放等变换比较鲁棒,得到了广泛的应用。
SIFT算法的步骤:
①构造尺度空间 ,把图像按比例进行缩小
②搜索尺度空间中的关键点 ,关键点就是角点或者拐点
③去除可能的噪音点 ,非极大值抑制
④计算方向构造128维的特征向量 ,计算每个特征点的向量,每个向量是128维。
HOG (Histogram of Oriented Gradient)用于检测物体的特征描述,通过计算图像局部区域的梯度方向直方图来构建特征。HOG特征特别适合于做图像中的人体检测 ,由于HOG是在图像的局部方格单元上操作,所以它对图像几何的和光学的形变都能保持很好的不变性。 在粗的空域抽样、精细的方向抽样以及较强的局部光学归一化等条件下,只要行人大体上能够保持直立的姿势,可以容许行人有一些细微的肢体动作,这些细微的动作可以被忽略而不影响检测效果。
HOG特征步骤:
假设每个区域都有关键的特征,所以是对每个区域都进行操作。
①输入图片 ,Gamma归一化
②计算梯度:通过差分计算出图像在水平方向上及垂直方向上的梯度,然后得到各个像素点的梯度的幅值及方向
③将整个窗口划分成大小相同互不重叠的细胞单元cell(如8×8像素),计算出每个cell的梯度大小及方向.然后将每像素的梯度方向在0−180(无向:0-180,有向:0-360)平均分为9个bins,统计每个cell的梯度直方图,即可形成每个cell的descriptor.
④ 将2×2个相邻的cell组成大小为16×16的像素块即block.依次将block大小的滑动窗口从左到右从上到下滑动,求其梯度方向直方图向量,一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。
Haar特征
Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征,组合成特征模板。特征模板内有白色和黑色两种矩形,并定义该模板的特征值为白色矩形像素和减去黑色矩形像素和。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征能由矩形特征简单的描述,如:眼睛要比脸颊颜色要深,鼻梁两侧比鼻梁颜色要深,嘴巴比周围颜色要深等。但矩形特征只对一些简单的图形结构,如边缘、线段较敏感,所以只能描述特定走向(水平、垂直、对角)的结构。
3 纹理特征
纹理是一种反映图像中同质现象的视觉特征,它体现了物体表面的具有缓慢变化或者周期性变化的表面结构组织排列属性。纹理具有三大标志。
某种局部序列性不断重复;
非随机排列;
纹理区域内大致为均匀的统一体;
不同于灰度、颜色等图像特征,纹理通过像素及其周围空间邻域的灰度分布来表现,即局部纹理信息。另外,局部纹理信息不同程度上的重复性,就是全局纹理信息。
纹理特征体现全局特征的性质的同时,它也描述了图像或图像区域所对应景物的表面性质。与颜色特征不同,纹理特征不是基于像素点的特征,它需要在包含多个像素点的区域中进行统计计算。在模式匹配中,这种区域性的特征具有较大的优越性,不会由于局部的偏差而无法匹配成功。
在检索具有粗细、疏密等方面较大差别的纹理图像时,利用纹理特征是一种有效的方法。但当纹理之间的粗细、疏密等易于分辨的信息之间相差不大的时候,通常的纹理特征很难准确地反映出人的视觉感觉不同的纹理之间的差别。
优点:
LBP
LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征。
原始的LBP算子定义为在33的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,33邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。
灰度共生矩阵
共生矩阵用两个位置的像素的联合概率密度来定义,它不仅反映亮度的分布特征,也反映具有同样亮度或者接近亮度的像素之间的位置分布特性,是有关图像亮度变化的二阶统计特征。灰度共生矩阵(GLCM)是定义一组纹理特征的基础。
取图像(N×N)中任意一点 (x,y)及偏离它的另一点 (x+a,y+b),设该点对的灰度值为(g1,g2)。令点(x,y)在整个画面上移动,则会得到各种 (g1,g2)值,设灰度值的级数为 k,则(g1,g2) 的组合共有 k^2种。对于整福图像,统计出每一种(g1,g2)值出现的次数,然后排列成一个方阵,在用(g1,g2) 出现的总次数将它们归一化为出现的概率P(g1,g2),这样的方阵称为灰度共生矩阵。
距离差分值(a,b) 取不同的数值组合,可以得到不同情况下的联合概率矩阵。(a,b)取值要根据纹理周期分布的特性来选择,对于较细的纹理,选取(1,0)、(1,1)、(2,0)等小的差分值。当 a=1,b=0时,像素对是水平的,即0度扫描;当a=0,b=1 时,像素对是垂直的,即90度扫描;当 a=1,b=1时,像素对是右对角线的,即45度扫描;当 a=-1,b=-1时,像素对是左对角线,即135度扫描。
若将图像的灰度级定为N级,那么共生矩阵为N×N矩阵,可表示为M(Δx,Δy)(h,k),其中位于(h,k)的元素的值表示一个灰度为h而另一个灰度为k的两个相距为(Δx,Δy)的像素对出现的次数。
共生矩阵实际上是两个像素点的联合直方图,对粗纹理的区域,其灰度共生矩阵的值较集中于主对角线附近。因为对于粗纹理,像素对趋于具有相同的灰度。而对于细纹理的区域,其灰度共生矩阵中的值则散布在各处。
下图为一个简单的例子:
图a为原图像,最大灰度级为16。为表示方便,这里将灰度级数减小为4级,图a变为图b的形式。这样(f1,f2)取值范围便为[0,3]。取不同的间隔,将(f1,f2)各种组合出现的次数排列起来,就可得到图e~g所示的灰度共生矩阵。
图e表示图b中(x,y)与偏离它的(x+1,y+0)构成点对时,(f1,f2)取值的情况(填充黄色部分为f1取0,f2取1时的情况,由图b填充易知共10种)。同理,f,g分别表示图c,d中(x,y)分别于点(x+1,y+1),(x+2,y+0)构成的点对(f1,f2)出现的情况(图c填充黄色部分表示f1取0,f2取0时,对角线点对(0,0)出现的情况,共8种:图d填充黄色部分表示f1取0,f2取2时水平点对(0,2)出现的情况,共9种)。例如,对于a=1,b=0,点对中(0,1)的组合共出现了10次。对比可以看出,(0,1),(1,2),(2,3)和(3,0)均有较高的出现频数。图b表明,图像中存在明显的左上右下方向的纹理。
距离(a,b)的取值不同,灰度共生矩阵中的值不同。a和b的取值要根据纹理周期分布的特征来选择,对于较细的纹理,选取(1,0),(1,1),(2,0)等这样的值是有必要的。a,b取值较小对应于变化缓慢的纹理图像,其灰度共生矩阵对角线上的数值较大。纹理的变化越快,则对角线上的数值越小,而对角线两侧的值增大。
为了能更直观地以共生矩阵描述纹理状况,从共生矩阵导出一些反映矩阵状况的参数,典型的有以下几种:
(1)能量:是灰度共生矩阵元素值的平方和,所以也称能量,反映了图像灰度分布均匀程度和纹理粗细度。若灰度共生矩阵的元素值相近,则能量ASM较小,表示纹理细致;相反,如果其中一些值大而其它值小,则ASM值大。当共生矩阵中元素集中分布时,此时ASM值大,表明一种较均一和规则变化的纹理模式。
(2)对比度:反映了图像的清晰度和纹理沟纹深浅的程度。纹理沟纹越深,其对比度越大,视觉效果越清晰;反之,对比度小,则沟纹浅,效果模糊。
(3)相关:它度量空间灰度共生矩阵元素在行或列方向上的相似程度,因此,相关值大小反映了图像中局部灰度相关性。当矩阵元素值均匀相等时,相关值就大;相反,如果矩阵像元值相差很大则相关值小。如果图像中有水平方向纹理,则水平方向矩阵的COR大于其余矩阵的COR值。
(4)熵:是图像所具有的信息量的度量,纹理信息也属于图像的信息,是一个随机性的度量,当共生矩阵中所有元素有最大的随机性、空间共生矩阵中所有值几乎相等时,共生矩阵中元素分散分布时,熵较大。它表示了图像中纹理的非均匀程度或复杂程度。
(5)逆差距: 反映图像纹理的同质性,度量图像纹理局部变化的多少。其值大则说明图像纹理的不同区域间缺少变化,局部非常均匀。
4、边缘特征
边缘检测旨在检测一张数字图像中有明显变化的边缘或者不连续的区域。边缘是一幅图像中不同区域之间的边界线,通常一个边缘图像是一个二值图像。边缘检测的目的是捕捉亮度急剧变化的区域,而这些区域通常是我们关注的。
理想情况下,对所给图像应用边缘检测器可以得到一系列连续的曲线,用于表示对象的边界。应用边缘检测将会大大减少图像数据量,留下图像的重要结构。然而,从普通图片上提取的边缘往往被图像的分割所破坏,这就需要边缘检测算法的准确性。常见的边缘检测算法:canny算子和sobel算子。
% 程序名称: 主程序 %main() %9.4.7 clc ,clear all, close all % 读取图像文件 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% imgs_array = read_images(); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 彩色图像灰度化 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% colorflame_img1 = imgs_array(1).img; %自己选择K值,表示读取该文件夹下随意的第几幅图像。 Gray_Img = RGBtoGray(colorflame_img1); figure(10),imshow(colorflame_img1),title('原始图像') %第一幅图像 figure(11),imshow(uint8(Gray_Img.Max_Intensity)),title('最大值法') figure(12),imshow(uint8(Gray_Img.Mean_Intensity)),title('平均值法') figure(13),imshow(uint8(Gray_Img.Weight_Intensity)),title('加权平均值法') %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 利用5种边缘检测算子进行边缘检测 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Extra_Edge = operator5(colorflame_img1); figure(14),imshow(Extra_Edge.sobel_edge),title('边缘提取(sobel算子)') figure(15),imshow(Extra_Edge.prewitt_edge),title('边缘提取(prewitt算子)') figure(16),imshow(Extra_Edge.roberts_edge),title('边缘提取(roberts算子)') figure(17),imshow(Extra_Edge.log_edge),title('边缘提取(log算子)') figure(18),imshow(Extra_Edge.canny_edge),title('边缘提取(canny算子)') function RGBPixel_Dis = RGB_distribution() %9.4.4 % 函数功能:估计RGB分量的分布 % 输入参数:不需要输入参数 % 输出参数:RGBPixel_Dis结构体,包含 RGB三分量的分布 RPixel_Dis GPixel_Dis BPixel_Dis %获取各种类型的图片 [~,pathname] = uigetfile({'*.jpg;*.bmp;*.tif;*.png;*.gif','All Image Files';'*.*','All Files'}); cd(pathname); %获取当前路径下的所有jpg文件 files = dir('*.jpg'); %获取当前jpg类型图片的个数 K = size(files,1); %三通道初始值 RPixel_Dis = 0; GPixel_Dis = 0; BPixel_Dis = 0; for i=1:K %20行~24行:对若干张图片,依次获取三通道分量 temp = imread(files(i).name); R = temp(:,:,1); G = temp(:,:,2); B = temp(:,:,3); % x是各个像素级 0~256,counts 是每个像素级出现的次数 %综合起来的意思就是:counts和x分别是直方图 (像素级出现次数)和(像素级) [counts,x] = imhist(R); % 红色分量分布加上每个像素级出现的次数 RPixel_Dis = RPixel_Dis + counts; [counts,x] = imhist(G); GPixel_Dis = GPixel_Dis + counts; [counts,x] = imhist(B); BPixel_Dis = BPixel_Dis + counts; end %RGBPixel_Dis结构体,包含RGB三种分量的分布:RPixel_Dis GPixel_Dis BPixel_Dis; RGBPixel_Dis.RPixel_Dis = RPixel_Dis; RGBPixel_Dis.GPixel_Dis = GPixel_Dis; RGBPixel_Dis.BPixel_Dis = BPixel_Dis; function Extra_Edge = operator5(color_img) %9.4.3 % 函数功能:利用5种边缘检测算子进行边缘检测 % 输入参数:color_img 彩色图像 % 输出参数:Gray_Img 结构体,包含5种算子提取的边缘 %彩色图像转化为灰度图像 Gral_Img = rgb2gray(color_img); %进行sobel边缘检测(一阶导算子) Extra_Edge.sobel_edge = edge(Gral_Img,'sobel'); %进行prewitt边缘检测(一阶导算子) Extra_Edge.prewitt_edge = edge(Gral_Img,'prewitt'); %进行roberts边缘检测(一阶导算子) Extra_Edge.roberts_edge = edge(Gral_Img,'roberts'); %进行拉普拉斯(二阶导算子)
版本:2014a
完整代码或代写加1564658423