图像目标提取及特征计算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
武汉理工大学《专业综合》课程设计说明书
摘要
对图像进行研究和应用时,人们往往对图像中的某些部分感兴趣,这些部分常被称为目标或对象
目标或对象特征提取是计算机视觉和图像处理中的一个概念。
它指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。
特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。
本课设需要解决的问题是,利用阈值分割方法,对该图像进行分割,得到提取那个目标后的二值图像,计算该目标的面积、周长、中心坐标等三个参数。
阈值分割采用的是全局阈值分割方法,而面积、周长的计算则是先通过将图像转换成二值图像,在通过计算二值图像像素点的方式求取。
关键词:阈值分割,边缘检测,像素点
目录
摘要 (I)
1 绪论 (1)
2 设计原理 (2)
2.1 常用的特征提取的方法 (2)
2.2阈值分割原理 (2)
2.2.1 阈值分割思想和原理 (2)
2.2.2 全局阈值分割 (3)
2.2.3 自适应阈值 (4)
2.3 边缘检测原理 (4)
2.4 图像物体中心位置的确定 (6)
3 设计程序与仿真结果 (7)
3.1 提取目标的二值图像 (7)
3.2 计算目标的面积 (8)
3.3 计算目标的周长 (9)
3.4 计算目标的中心坐标 (9)
4 心得体会 (11)
参考文献 (12)
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 图像分割算法
2.2.2 全局阈值分割
阈值法有多种类型,主要有:全局阈值,自适应阈值等。
所谓全局阈值,如果背景的灰度值在整个图像中可合理的看做恒定,而且所有物体与背景都具有几乎相同的对比度,那么,只要选择了正确的阈值,使用了一个固定的全局阈值一般会有较好的效果。
给出利用全局阈值分割图像的MATLAB 程序如下:
I=imread('tsaml.jpg');
T y x f T
y x f y x g ≥<),(),(10){,(
for i=1:width
for j=1:height
if(I(i,j)<60)
BW1(i,j)=0;
else
BW1(i,j)=1;
end
end
end
figure
imshow(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:width
for j=1:height
if(I(i,j)<80)
BW(i,j)=1;
end
end
end
figure(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:width
for j=1:height
if(BW(i,j)==1)
area=area+1;
end
end
end
area
对应的运行结果为: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:width
for j=1:height
if(BW(i,j)==0)
circum=circum+1;
end
end
end
circum
对应的运行结果为:circum =
7099
3.4 计算目标的中心坐标
对应matlab程序代码为:
clc; clear all;
I = imread('bw.jpg '); %加载图像
I1 = im2bw(I);
L = bwlabel(I1);
stats = regionprops(L, 'Centroid');
hold on
for i = 1 : length(stats)
temp = stats(i).Centroid; %计算中心坐标
plot(temp(1), temp(2), '+r'); %得到中心坐标后用+标出end
对应的运行结果为:
图3-2 计算目标的中心坐标
4 心得体会
课程设计初期,由于对图片的处理不够熟练,直接对彩色图像进行二值化,导致最后程序运行的结果中出现了三张图。
后来分析得知,出现三张图的原因应该是真彩图像的三原色对应三个变量分别进行了二值化。
于是对图像进行了灰度变换,然后再进行二值化就不会出现上述问题。
通过本次专业综合课程设计,我进一步熟悉了如何使用matlab软件岁图像进行处理,加深了《数字图像处理》这门课程的认识。
课程设计过程中遇到了很多困难,通过广泛地查阅相关资料最终解决了这些问题,提高了独立思考和解决问题的能力。
同时,通过此次课程设计,我也有了不少新的认识。
首先,很多知识其实书上都已经讲的很透彻了,只要把课本上的内容看懂就完全能完成题目要求。
参考文献是对课本以外的知识的拓展,在完成要求的基础上多翻看一些相关书籍对题目的理解会更深入一些。
其次,数字图像处理在现实生活中有着非常广泛的应用,在心理学、生理学、计算机科学等诸多领域内都发挥着作用。
同时,图像处理在军事、遥感、气象等大型应用中有不断增长的需求。
我想,经过这次课程设计我不但对数字图像处理有了更深入的了解,对MATLAB编程变得更加熟练,更重要的是激发了我在数字图像处理方面的兴趣。
相信这份兴趣会成为以后继续深入学习数字图像处理方面知识的动力。
参考文献
[1] 夏得深傅德胜《现代图像处理技术与应用》东南大学出版 2001
[2] 杨杰黄朝兵《数字图像处理及MATLAB实现》电子工业出版社 2010
[3] 冈萨雷斯《数字图像处理(MATLAB版)》电子工业出版社 2005
[4] 胡学龙许开宇《数字图像处理》电子工业出版社 2006
[5] 刘直芳王运琼《数字图像处理分析》清华大学出版社 2006。