图像特征提取论文.docx
《图像特征提取论文.docx》由会员分享,可在线阅读,更多相关《图像特征提取论文.docx(34页珍藏版)》请在冰豆网上搜索。
![图像特征提取论文.docx](https://file1.bdocx.com/fileroot1/2023-7/26/5fc5af53-827e-4e35-9042-0f4cbd9fde89/5fc5af53-827e-4e35-9042-0f4cbd9fde891.gif)
图像特征提取论文
基于C++的图像特征提取
摘要图像特征提取技术是20世纪50年代在国内外迅速发展起来的一种图像处理技术。
本文首先论述了图像特征提取技术相关概念及分类,在此基础上阐述了图像特征提取的流程,并讨论了基于C++实现图像特征几种基本且重要的提取方式的算法实现。
关键字特征提取,灰度图,直方图,C++
目录
1概述1
1.1引言1
1.2图像特征2
1.3图像特征提取的相关定义2
1.3.1图像颜色特征提取2
1.3.2纹理特征提取2
1.3.3形状特征提取2
1.3.4空间关系特征提取3
2工作基础与工作环境4
2.1数字图像处理技术4
2.1.1图像处理的基本内容4
2.2图像格式-BMP格式5
2.3将VisualC++应用于数字图像的特征提取6
2.4形参说明6
3算法及数学基础7
3.1二值图像binaryimage7
3.1.1二值图像分析的目的7
3.1.2二值图像生成算法7
3.1.3二值图象C++实现8
3.2基于二值图像的处理9
3.2.1腐蚀与膨胀9
3.2.3轮廓提取与轮廓追踪13
3.2.4细线化14
3.3灰度图17
3.3.1基于灰度图的特征提取方法18
3.3.2边缘检测20
4结束语24
1概述
图像是客观对象的一种相似性的、生动性的描述或写真,是人类社会活动中最常用的信息载体。
或者说图像是客观对象的一种表示,它包含了被描述对象的有关信息。
它是人们最主要的信息源。
据统计,一个人获取的信息大约有75%来自视觉。
古人说“百闻不如一见”、“一目了然”便是非常形象的例子,都反映了图像在信息传递中的独特效果[1]。
广义上,图像就是所有具有视觉效果的画面,它包括:
纸介质上的、底片或照片上的、电视、投影仪或计算机屏幕上的。
图像根据图像记录方式的不同可分为两大类:
模拟图像和数字图像。
模拟图像可以通过某种物理量(如光、电等)的强弱变化来记录图像亮度信息,例如模拟电视图像;而数字图像则是用计算机存储的数据来记录图像上各点的亮度信息[2]。
国际图像艺术推广机构君友会对图像处理流程的阐述是:
图像处理是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。
图像处理是信号处理在图像域上的一个应用。
目前大多数的图像是以数字形式存储,因而图像处理很多情况下指数字图像处理。
此外,基于光学理论的处理方法依然占有重要的地位。
图像处理是信号处理的子类,另外与计算机科学、人工智能等领域也有密切的关系。
传统的一维信号处理的方法和概念很多仍然可以直接应用在图像处理上,比如降噪、量化等。
然而,图像属于二维信号,和一维信号相比,它有自己特殊的一面,处理的方式和角度也有所不同。
几十年前,图像处理大多数由光学设备在模拟模式下进行。
由于这些光学方法本身所具有的并行特性,至今他们仍然在很多应用领域占有核心地位,例如全息摄影。
但是由于计算机速度的大幅度提高,这些技术正在迅速的被数字图像处理方法所替代。
从通常意义上讲,数字图像处理技术更加普适、可靠和准确。
比起模拟方法,它们也更容易实现。
专用的硬件被用于数字图像处理,例如,基于流水线的计算机体系结构在这方面取得了巨大的商业成功。
今天,硬件解决方案被广泛的用于视频处理系统,但商业化的图像处理任务基本上仍以软件形式实现,运行在通用个人电脑上
1.1引言
图像特征选择提取是图像识别中的一个关键问题。
特征选择和提取的基本任务是如何从众多特征中找出最有效的特征。
图像特征分析在工业生产中有重要的应用。
我通过关注和学习图像特征提取并用VC实践,强化了所学习过的知识,并对图像特征提取有了更深一步的认识和理解。
1.2图像特征
图像特征是指图像的原始特性或属性。
常见的图像特征可以分为灰度特征、纹理特征和几何形状特征等。
1.3图像特征提取的相关定义
由于实际问题的应用类型各不相同,所以对图像特征提取一直没有精确的定义,许多的计算机图像分析和算法都是以特征为切点,其算法成功与否与其使用和定义的特征息息相关。
参阅大量文献,其定义概述为:
图象处理中最初级的运算就是特征提取,所以数字图像首先要进行的运算就是特征提取,然后通过运算来检查图像的每个像素,最后确定像素所属的特征.如果算法检查的是图像的一些特征区域,那么图像特征提取就是算法中的一部分作为特征提取的一个前提运算,其输入图像一般在尺度空间中被平滑,最后运用导数法则计算出图像的特征。
1.3.1图像颜色特征提取
颜色特征是通过图像或图像区域的颜色特征来描述,它具有整体性,颜色特征提取方法有颜色直方图、颜色集、颜色矩等方法。
1.3.2纹理特征提取
纹理特征和颜色特征类似,它也是一种整体性的特征。
近些年来,对纹理分析方法的各种理论或方法在纹理特征提取中的应用已经基本成形,纹理特征提取方法归纳为5类,即结构方法、信号处理方法、几何方法、模型方法和计方法。
灰度共生矩阵是被广泛应用的纹理提取算法,是分析图像的基础,它运用统计学中的概率来反映图像灰度有关方向和间隔等整体信息。
1.3.3形状特征提取
形状特征提取表示方法有2类,一类是区域特征,它主要针对图像的整个形状区域;另一类是轮廓特征,它针对的是物体的外边界。
前人关于形状特征提取的典型方法有:
边界特征值法(图像的外边界)、几何参数法(图像几何参数化处理)、形状不变矩法(找图像不变矩特征)、傅里叶形状描述法(傅里叶变换法)等。
1.3.4空间关系特征提取
空间关系表明图像中分割的多个目标之间存在着一定的空间位置关系和方向性的关系,如图像的邻接与连接关系、图像的包容和包含关系等。
常用的图像空间特征提取方法有2种:
根据图像中的对象或者颜色等其他特征对图像进行分割后提取特征;把图像分割成规则的子块,分别对图像的每个子块进行特征提取。
运用空间关系特征描述图像内容能起到更完备的功效,但是一旦图像或目标发生反转、旋转等变化时,空间关系特征发生的变化就非常明显。
当采用空间特征关系以提高检索准确率时,一般不单独使用,而是经常和其它特征提取方法综合使用。
2工作基础与工作环境
2.1数字图像处理技术
将客观世界实体或图片等通过不同的量化(数字化)手段送入计算机,由计算机按使用要求进行图像的平滑、增强、复原、分割、重建、编码、存储、传输等种种不同的处理,需要时把加工处理后的图像重新输出,这个过程称为图像处理。
因此,图像处理的含义是用计算机对图像进行加工处理以得到某种预期的效果,它本质上是一种二维数字信号处理技术。
2.1.1图像处理的基本内容
图像处理的基本内容可以归结为:
对图像进行增强或修改。
以改变或强调图像信息的某些特点(增强有用信息,无用信息),改善图像的视觉质量;描述图像的特征并进行特征抽取和分析。
例如提取图像的纹理特征、频谱特征、边界特征和颜色特征等;对像素用某个标准衡量并进行分类比较,将抽取的特征归结为一定的模式,这属于模式识别的范围;图像的重建(Reconstruction)。
对图像的某些部分合并或进行重新组织,这种技术是从N—1维的信息用某种算法得到N维的图像,例如计算机视觉就是这样的一种技术。
2.1.2主要图像处理技术
1)图像的增强和恢复
图像增强所追求的目标是改善图像的视觉质量,符合人们的主观要求,它不追究图像客观质量的降低原因。
图像的视觉质量是因人而异的,其质量的高低和好坏受观看者的心理、爱好和文化素质等因素的影响。
图像的恢复则致力于探索图像质量降低的原因,并尽可能消除图像质量的降低,恢复图像的本来面目。
2)图像的压缩编码
彩色数字图像通常是由三个二维数组组成的,其信息量相当大,这给图像的传输、处理、存储和显示等带来很大的负担。
但问题的另一方面是图像中又往往存在很多冗余信息,在传输和存储时可以对数字图像进行一定方式的编码,删除图像中的冗余信息,以提高图像传输和存储的效率。
3)图像重建
在医学和工程应用中,利用超声波、x射线等技术取得物体的多幅来自不同角度的投影图,通过计算可得到物钵内部的图像,这种技术称为投影重建,例如CT就是图像重建的一个应用。
4)图像的分割和描述
计算机按照一定的客观测度(例如灰度、颜色和几何性质等)将图像中包含的物体和区域从图像中区分出来,称为图像的分割。
用适当的数学语言来表示被分割出来的物体或区域的结构和统计特性,或用数学语言表示区域问的关系,称为描述。
图像经分别和描述后,可较为容易地分类和识别。
2.2图像格式-BMP格式
BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图像处理软件都支持BMP图像文件格式。
Windows系统内部各图像绘制操作都是以BMP为基础的。
Windows3。
0以前的BMP图文件格式与显示设备有关,因此把这种BMP图像文件格式称为设备相关位图DDB(device-dependentbitmap)文件格式。
Windows3。
0以后的BMP图像文件与显示设备无关,因此把这种BMP图像文件格式称为设备无关位图DIB(device-independentbitmap)格式,目的是为了让Windows能够在任何类型的显示设备上显示所存储的图像。
BMP位图文件默认的文件扩展名是BMP或者bmp(有时它也会以。
DIB或。
RLE作扩展名)。
位图文件可看成由4个部分组成:
位图文件头(bitmap-fileheader)、位图信息头(bitmap-informationheader)、彩色表(colortable)和定义位图的字节阵列,它具有如表2-1所示的形式
表2-1BMP文件组成
位图文件的组成
结构名称
符号
位图文件头
(bitmap-fileheader)
BITMAPFILEHEADER
bmfh
位图信息头
(bitmap-informationheader)
BITMAPINFOHEADER
bmih
彩色表(colortable)
RGBQUAD
aColors[]
图象数据阵列字节
BYTE
aBitmapBits[]
2.3将VisualC++应用于数字图像的特征提取
VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具。
在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用。
2.4形参说明
Image_in原图像指针
Image_out输出图像指针
Xsize图像宽度
Ysize图像高度
3算法及数学基础
3.1二值图像binaryimage
是指每个像素不是黑就是白,其灰度值没有中间过渡的图像。
二值图像一般用来描述文字或者图形,其优点是占用空间少,缺点是,当表示人物,风景的图像时,二值图像只能描述其轮廓,不能描述细节。
这时候要用更高的灰度级。
二值图像是每个像素只有两个可能值的数字图像。
人们经常用黑白、B&W、单色图像表示二值图像,但是也可以用来表示每个像素只有一个采样值的任何图像,例如灰度图像等。
二值图像中所有的像素只能从0和1这两个值中取,因此在MATLAB中,二值图像用一个由0和1组成的二维矩阵表示。
这两个可取的值分别对应于关闭和打开,关闭表征该像素处于背景,而打开表征该像素处于前景。
以这种方式来操作图像可以更容易识别出图像的结构特征。
二值图像操作只返回与二值图像的形式或结构有关的信息,如果希望对其他类型的图像进行同样的操作,则首先要将其转换为二进制的图像格式
二值图像经常出现在数字图像处理中中作为图像掩码或者在图像分割、二值化和dithering的结果中出现。
一些输入输出设备,如激光打印机、传真机、单色计算机显示器等都可以处理二值图像。
二值图像经常使用位图格式存储。
3.1.1二值图像分析的目的
首先是区分所提取出的不同的目标物,然后,对不同的目标物特征差异进行描述与计算,最后获得所需要的分析结果。
二值化处理流程:
3.1.2二值图像生成算法
1)读取图像像素数据
2)设定阈值
3)以阈值确定每个像素点的值为0或者1
通过阈值运算是否可以有效地进行图像分割,取决于物体和背景之间是否有足够的对比度.设一幅灰度图像
中物体的灰度分布在区间
内,经过阈值运算后的图像为二值图像
,即:
(3.1)
如果物体灰度值分布在几个不相邻区间内时,阈值化方案可表示为:
(3.2)
其中Z是组成物体各部分灰度值的集合
阈值(如图3-1)算法与应用领域密切相关.事实上,某一阈值运算常常是为某一应用专门设计的,在其它应用领域可能无法工作.阈值选择(如图1)常常是基于在某一应用领域获取的先验知识,因此在某些场合下,前几轮运算通常采用交互式方式来分析图像,以便确定合适的阈值.但是,在机器视觉系统中,由于视觉系统的自主性能(autonomy)要求,必须进行自动阈值选择.现在已经研究出许多利用图像灰度分布和有关的物体知识来自动选择适当阈值的技术.
图3-1一幅灰度图像和使用不同阈值得到的二值图像结果.上左:
原始灰度图像,上右:
阈值T=100;左下:
T=128.右下:
T1=100|T2=128.
3.1.3二值图象C++实现:
voidThreshold(BYTE*image_in,BYTE*image_out,intxsize,intysize,intthresh,intmode)
{
inti,j;
for(j=0;j{for(i=0;i{
switch(mode)
{case2:
if(*(image_in+j*xsize+i)<=thresh)
*(image_out+j*xsize+i)=HIGH;
else
*(image_out+j*xsize+i)=LOW;
break;
default:
if(*(image_in+j*xsize+i)>=thresh)
*(image_out+j*xsize+i)=HIGH;
else
*(image_out+j*xsize+i)=LOW;
break;}
运行结果如图3-2:
图3-2:
原图及C++二值化处理后图像
3.2基于二值图像的处理
这里主要介绍去除噪声,主要有腐蚀与膨胀,轮廓检测,细线化等。
3.2.1腐蚀与膨胀
二值图像中的一种主要处理是对所提取的目标图形进行形态分析。
而形态处理中最基本的是腐蚀与膨胀。
腐蚀与膨胀是两个互为对偶的运算。
腐蚀处理的作用是将目标图形收缩,而膨胀处理的作用是将目标图形扩大。
为了实现腐蚀与膨胀,数学形态学提出了结构元素的概念。
所谓结构元素是指具有某种确定形状的基本结构元素,例如,一定大小的矩形、圆或者菱形等。
腐蚀与膨胀属非线性逻辑模板,非线性逻辑模板不能用简洁的数学形式表达。
它实际上是对邻域内的像素分布模式进行分类后,根据不同的模式而给出不同处理。
下面给出的各种算法都是针对二值图像的。
处理中均使用一定尺寸的模板(结构元素--SE),并假定图中背景像素灰度值为0,景物像素值为1。
腐蚀是一种消除连通域的边界点,使边界向内收缩的处理。
可以用来消除小且无意义的目标物。
如果两目标物间有细小的连接,可以选取足够大的结构元素,将细小连接腐蚀掉。
腐蚀处理可以表示成用结构元素对图像进行探测,找出图像中可以放下该结构元素的区域(如图3-3)。
例:
图3-3腐蚀处理
腐蚀——算法步骤
(1)扫描原图,找到第一个像素值为1的目标点;
(2)将预先设定好形状以及原点位置的结构元素的原点移到该点;
(3)判断该结构元素所覆盖的像素值是否全部为1:
如果是,则腐蚀后图像中的相同位置上的像素值为1;
如果不是,则腐蚀后图像中的相同位置上的像素值为0;
(4)重复
(2)和(3),直到所有原图中像素处理完成。
1)腐蚀C++算法实现:
voidErodible(BYTE*image_in,BYTE*image_out,intxsize,intysize)
{
inti,j;
for(j=1;jfor(i=1;i*(image_out+j*xsize+i)=*(image_in+j*xsize+i);
if(*(image_in+(j-1)*xsize+i-1)==LOW)
*(image_out+j*xsize+i)=LOW;
if(*(image_in+(j-1)*xsize+i)==LOW)
*(image_out+j*xsize+i)=LOW;
if(*(image_in+(j-1)*xsize+i-1)==LOW)
*(image_out+j*xsize+i)=LOW;
if(*(image_in+j*xsize+i+1)==LOW)
*(image_out+j*xsize+i)=LOW;
if(*(image_in+j*xsize+i)==LOW)
*(image_out+j*xsize+i)=LOW;
if(*(image_in+j*xsize+i-1)==LOW)
*(image_out+j*xsize+i)=LOW;
if(*(image_in+(j+1)*xsize+i+1)==LOW)
*(image_out+j*xsize+i)=LOW;
if(*(image_in+(j+1)*xsize+i)==LOW)
*(image_out+j+1*xsize+i)=LOW;
if(*(image_in+(j+1)*xsize+i-1)==LOW)
*(image_out+j*xsize+i)=LOW;
}
}
}
运行结果如图3-4:
图3-4二值图像及腐蚀后的图像效果
膨胀
膨胀是将与目标区域的背景点合并到该目标物中,使目标物边界向外部扩张的处理。
膨胀可以用来填补目标区域中存在的某些空洞,以及清除包含在目标区域中的小颗粒噪声。
膨胀处理可以理解成是对图像的补集进行腐蚀处理(如图3-5)。
例:
膨胀——算法步骤
(1)扫描原图,找到第一个像素值为0的背景点;
(2)将预先设定好形状以及原点位置的结构元素的原点移到该点;
(3)判断该结构元素所覆盖的像素值是否存在为1的目标点:
如果是,则膨胀后图像中的相同位置上的像素值为1;
如果不是,则膨胀后图像中的相同位置上的像素值为0;
(4)重复
(2)和(3),直到所有原图中像素处理完成。
2)膨胀C++算法实现:
voidDilation(BYTE*image_in,BYTE*image_out,intxsize,intysize)
{
inti,j;
for(j=1;jfor(i=1;i*(image_out+j*xsize+i)=*(image_in+j*xsize+i);
if(*(image_in+(j-1)*xsize+i-1)==HIGH)
*(image_out+j*xsize+i)=HIGH;
if(*(image_in+(j-1)*xsize+i)==HIGH)
*(image_out+j*xsize+i)=HIGH;
if(*(image_in+(j-1)*xsize+i-1)==HIGH)
*(image_out+j*xsize+i)=HIGH;
if(*(image_in+j*xsize+i+1)==HIGH)
*(image_out+j*xsize+i)=HIGH;
if(*(image_in+j*xsize+i)==HIGH)
*(image_out+j*xsize+i)=HIGH;
if(*(image_in+j*xsize+i-1)==HIGH)
*(image_out+j*xsize+i)=HIGH;
if(*(image_in+(j+1)*xsize+i+1)==HIGH)
*(image_out+j*xsize+i)=HIGH;
if(*(image_in+(j+1)*xsize+i)==HIGH)
*(image_out+j+1*xsize+i)=HIGH;
if(*(image_in+(j+1)*xsize+i-1)==HIGH)
*(image_out+j*xsize+i)=HIGH;
}
}
}
运行结果如图3-6:
图3-6:
二值图象及膨胀处理后的结果
3.2.3轮廓提取与轮廓追踪
用下述算法可以很简单地抽取二值图像的轮廓线。
(1)若中心像素值为0,不问其余8像素的值如何,一律保留中心像素值为0;
(2)若中心像素值为1,且其余8个像素全为1,则改变中心像素值为0;
(3)除此以外,全部将中心像素值设为1。
如图3-7
图3-7轮廓提取
轮廓跟踪
轮廓跟踪,顾名思义就是通过顺序找出边缘点来跟踪出边界。
简单二值图像闭合边界的轮廓跟踪算法很简单:
首先按从上到下,从左到右的顺序搜索,找到的第一个非前景点一定是最左上方的边界点,记为A。
它的右,右下,下,左下四个邻点中至少有一个是边界点,记为B。
从开始B找起,按右,右上,上,左上,左,左下,下,右下的顺序找相邻点中的边界点C。
如果C就是A点,则表明已经转了一圈,程序结束。
否则从C点继续找,直到找到A为止。
判断是不是边界点很容易:
如果它的上下左右四个邻居都是前景点则不是边界点,否则是边界点。
3.2.4细线化
细化(thinning)是一种图像处理运算,可以把二值图像区域缩成线条,以逼近区域的中心线,也称之为骨架或核线.细化的目的是减少图像成份,直到只留下区域的最基本信息,以便进一步分析和识别.虽然细化可以用在包含任何区域形状的二值图像,但它主要对细长形(而不是凸圆形或水滴状)区域有效.细化一般用于文本分析预处理阶段,以便将文本图像中线条图画或字符笔画表示成单像素线条.细化要求如下[2]:
(1)连通图像区域必须细化成连通线结构.
(2)细化结果最少应该是8-连通(下面将要解释).
(3)保留近似终止线的位置.
(4)细化结果应该近似于中轴线.
(5)由细化引起的附加突刺(短分支)应该是最小的.
细化结果应该保证第一条要求中所定义的连通性,这一点是最基本的要求,它保证了连通线结构的数量等于原始图像中连通区域的数量.第二条要求保证所得到的线条总是含有8-连通图像的最小数量.第三条要求说明终止线位置应该保持不变.细化可以通过迭代方式不断去除边界点来实现,重要的是在迭代过程中不要去除端点像素,因为这样不仅会缩短细化线,丢掉结构信息,而且不能保持其位置不变.第四条要求说明所得线段应能最好地逼近原始区域的中线,如两个像素点宽的竖线或水平线的真正中线应该位于这两个像素之间半个像素间距的位置.在数字图像中表示半个像素间距是不可能的,因此得到的结果是一条位于原直线一侧的直线.第五条要求没有明确指出