当前位置:文档之家› 图像目标提取及特征计算

图像目标提取及特征计算

摘要对图像进行研究和应用时,人们往往对图像中的某些部分感兴趣,这些部分常被称为目标或对象目标或对象特征提取是计算机视觉和图像处理中的一个概念。

它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。

特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。

本课设需要解决的问题是,利用阈值分割方法,对该图像进行分割,得到提取那个目标后的二值图像,计算该目标的面积、周长、中心坐标等三个参数。

阈值分割采用的是全局阈值分割方法,而面积、周长的计算则是先通过将图像转换成二值图像,在通过计算二值图像像素点的方式求取。

关键词:阈值分割,边缘检测,像素点1绪论目标的特征提取是图像处理和自动目标识别(ATR)中的一个重要的研究课题,是解决图像识别问题的难点和关键。

特征提取是图象处理中的一个初级运算,也就是说它是对一个图像进行的第一个运算处理。

它检查每个像素来确定该像素是否代表一个特征。

假如它是一个更大的算法的一部分,那么这个算法一般只检查图像的特征区域。

作为特征提取的一个前提运算,输入图像一般通过高斯模糊核在尺度空间中被平滑。

此后通过局部导数运算来计算图像的一个或多个特征。

有时,假如特征提取需要许多的计算时间,而可以使用的时间有限制,一个高层次算法可以用来控制特征提取阶层,这样仅图像的部分被用来寻找特征。

由于许多计算机图像算法使用特征提取作为其初级计算步骤,因此有大量特征提取算法被发展,其提取的特征各种各样,它们的计算复杂性和可重复性也非常不同。

2 设计原理2.1 常用的特征提取的方法提取图像空间关系特征可以有两种方法:一种方法是首先对图像进行自动分割,划分出图像中所包含的对象或颜色区域,然后根据这些区域提取图像特征,并建立索引;另一种方法则简单地将图像均匀地划分为若干规则子块,然后对每个图像子块提取特征,并建立索引。

本课程设计是采用的第一种方法,即先对该图像进行分割,得到提取那个目标后的二值图像,计算该目标的面积、周长、中心坐标等三个参数。

阈值分割采用的是全局阈值分割方法,而面积、周长的计算则是先通过将图像转换成二值图像,在通过计算二值图像像素点的方式求取。

其中计算周长时,先需要对二值图像进行边缘检测,然后再统计其像素点。

2.2 阈值分割原理图像阈值化分割是一种最常用,同时也是最简单的图像分割方法,它特别适用于目标和背景占据不同灰度级范围的图像[1]。

它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。

图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属性。

这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。

2.2.1 阈值分割思想和原理阈值分割法是一种基于区域的图像分割技术,其基本原理是:通过设定不同的特征阈值,把图像象素点分为若干类。

常用的特征包括:直接来自原始图像的灰度或彩色特征;由原始灰度或彩色值变换得到的特征。

设原始图像为f (x,y),按照一定的准则f(x,y)中找到特征值T,将图像分割为两个部分,分割后的图像为:若取:b0=0(黑),b1=1(白),即为我们通常所说的图像二值化。

设图像为f(x,y),其灰度集范围是[0,L],在0和L之间选择一个合适的灰度阈值T,则图像分割方法可由下式描述这样得到的g(x,y)是一幅二值图像。

图2-1 图像分割算法T y x f T y x f y x g ≥<),(),(10){,(2.2.2 全局阈值分割阈值法有多种类型,主要有:全局阈值,自适应阈值等。

所谓全局阈值,如果背景的灰度值在整个图像中可合理的看做恒定,而且所有物体与背景都具有几乎相同的对比度,那么,只要选择了正确的阈值,使用了一个固定的全局阈值一般会有较好的效果。

给出利用全局阈值分割图像的MATLAB程序如下:I=imread('tsaml.jpg');for i=1:widthfor j=1:heightif(I(i,j)<60)BW1(i,j)=0;elseBW1(i,j)=1;endendendfigureimshow(BW1)这里设定了一个常数60,通过比较灰度值与60的大小关系来重新给图像赋值。

2.2.3 自适应阈值在许多情况下,背景的灰度值并不是常数,物体和背景的对比度在图像中也有变化,这时就要引入自适应阈值,一个在图像中某一区域效果良好的阈值在其他区域却可能效果很差。

在这种情况下,需要把灰度阈值取成一个随图像中位置缓慢变化的函数值,即为自适应阈值。

这类算法的时间复杂度和空间复杂度比较大,但是抗噪声的能力比较强,对采用全局阈值不容易分割的图像有较好的效果。

这种方法的关键问题是如何将图像进行细分和如何为得到子图像估计门限值。

由于用于每个像素的门限取决于像素在子图像中的位置,这类门限处理是自适应的。

2.3 边缘检测原理边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。

图像属性中的显著变化通常反映了属性的重要事件和变化。

这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。

边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。

图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。

有许多方法用于边缘检测,它们的绝大部分可以划分为两类:基于查找一类和基于零穿越的一类。

基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。

基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是Laplacian过零点或者非线性差分表示的过零点。

有许多用于边缘检测的方法, 他们大致可分为两类:基于搜索和基于零交叉。

基于搜索的边缘检测方法首先计算边缘强度, 通常用一阶导数表示,例如梯度模,然后,用计算估计边缘的局部方向,通常采用梯度的方向,并利用此方向找到局部梯度模的最大值。

基于零交叉的方法找到由图像得到的二阶导数的零交叉点来定位边缘。

通常用拉普拉斯算子或非线性微分方程的零交叉点。

滤波做为边缘检测的预处理通常是必要的,通常采用高斯滤波。

已发表的边缘检测方法应用计算边界强度的度量,这与平滑滤波有本质的不同。

正如许多边缘检测方法依赖于图像梯度的计算,他们用不同种类的滤波器来估计x-方向和y-方向的梯度。

一旦我们计算出导数之后,下一步要做的就是给出一个阈值来确定哪里是边缘位置。

阈值越低,能够检测出的边线越多,结果也就越容易受到图片噪声的影响,并且越容易从图像中挑出不相关的特性。

与此相反,一个高的阈值将会遗失细的或者短的线段。

一个常用的这种方法是带有滞后作用的阈值选择。

这个方法使用不同的阈值去寻找边缘。

首先使用一个阈值上限去寻找边线开始的地方。

一旦找到了一个开始点,我们在图像上逐点跟踪边缘路径,当大于门槛下限时一直纪录边缘位置,直到数值小于下限之后才停止纪录。

这种方法假设边缘是连续的界线,并且我们能够跟踪前面所看到的边缘的模糊部分,而不会将图像中的噪声点标记为边缘2.4 图像物体中心位置的确定物体的中心即物体内到四周距离相等的位置。

根据此定义,很容易就能找到,求取物体内部所有像素点的X,Y坐标的平均值即可确定物体的中心坐标,然后将这个坐标所表示的像素点用一个特定符号进行标记,就能明显地找到该物体的中心。

至于如何用特定符号标记这个中心点,可以使用matlab中已经定义的一个用于画函数图形的plot函数即可,我们在这里只需要利用其进行标记即可,基本函数形式可以表示为:plot(x,y,'*'),意思即为用*号标定(X,Y)。

如何标定出中心点的任务解决了,剩下的工作就是对相应的图形坐标的处理,进而准确地找到中心点位置了。

此时,可以编写一段循环语句,由于第一个物体由1组成,第二个物体由2组成,第n个物体由n组成。

可以定义一个k,从1到n连续变化,然后与物体内所包含的数值进行比较,若与此时的k值相等,则可以确定是一个物体,然后再将物体内部像素点的横纵坐标分别求平均值,这样就可以求出物体中心点的坐标,将此坐标储存。

同样的原理对第二个物体进行操作,如此往复直至第n个物体,,循环结束所有物体标定完成,最后通过plot函数对这些坐标对应的点进行标记,即可找出个物体的中心,本课设只有一个物体,故只需要执行一次操作。

3 设计程序与仿真结果3.1 提取目标的二值图像对应matlab程序代码为:I=imread('rgb.jpg');I=rgb2gray(I);figure(1);imshow(I);imwrite(I,'gray.jpg');[width,height]=size(I);%È«¾ÖãÐÖµBW=zeros(width,height);for i=1:widthfor j=1:heightif(I(i,j)<80)BW(i,j)=1;endendendfigure(2);imshow(BW);对应的运行结果如下图:图3-1 灰度图像与转换后的二值图像3.2 计算目标的面积对应matlab程序代码为:I=imread('rgb.jpg');I=rgb2gray(I);figure(1);imshow(I);[width,height]=size(I);area=0;for i=1:widthfor j=1:heightif(BW(i,j)==1)area=area+1;endendendarea对应的运行结果为:area=7416 3.3 计算目标的周长对应matlab程序代码为:I=imread('bw.jpg');BW1=edge(I, 'Roberts');figure;imshow(BW1);imwrite(BW1,'by.jpg');[width,height]=size(BW1);circum=0;for i=1:widthfor j=1:heightif(BW(i,j)==0)circum=circum+1;endendendcircum对应的运行结果为:circum =70993.4 计算目标的中心坐标对应matlab程序代码为:clc; clear all;I =imread('bw.jpg ');%加载图像I1 = im2bw(I);L = bwlabel(I1);stats = regionprops(L, 'Centroid');hold onfori= 1 :length(stats)temp = stats(i).Centroid; %计算中心坐标plot(temp(1), temp(2),'+r'); %得到中心坐标后用+标出end对应的运行结果为:图3-2计算目标的中心坐标4 心得体会课程设计初期,由于对图片的处理不够熟练,直接对彩色图像进行二值化,导致最后程序运行的结果中出现了三张图。

相关主题