一种基于边缘对偶关系的番茄植株茎秆边缘识别方法与流程

文档序号:17223398发布日期:2019-03-27 12:16阅读:334来源:国知局
一种基于边缘对偶关系的番茄植株茎秆边缘识别方法与流程

本发明涉及一种番茄植株茎秆边缘识别方法,尤其是一种基于边缘对偶关系的番茄植株茎秆边缘识别方法。



背景技术:

番茄生产机器人能够较好地解决当前番茄生产中劳动力资源紧缺,劳动力成本高的问题。番茄生产机器人视觉系统的主要功能是实现番茄植株各组成器官的识别和三维定位。其中,进行番茄植株茎秆边缘的识别,可为实现番茄生产过程自动化,如自动对靶喷施、成簇采摘、避障、导航等提供必要的番茄植株茎秆在图像中的位置和尺寸信息,因此具有非常重要的应用价值。

当前果蔬植株茎秆识别方法可分为基于彩色图像、多光谱图像及立体视觉的识别方法。基于多光谱图像的识别方法虽然能够实现枝叶近色的果蔬植株茎秆识别,但识别效果较差,且硬件成本较高。基于立体视觉的识别方法对枝叶近色或异色的果蔬茎秆识别均适用,但较难去除与植株距离较近的近色或异色背景。基于彩色图像的识别方法硬件成本较低,较易得到应用和推广。由于该方法主要是基于果蔬植株茎秆与其他器官及背景的颜色差异实现果蔬植株茎秆的识别,因此较适用于枝叶异色果蔬植株茎秆的识别,但该方法较难实现如番茄植株这类枝叶近色的果蔬植株茎秆识别。虽然目前有基于彩色图像实现枝叶近色果蔬植株茎秆的识别,但主要是基于主茎支持线的识别实现果蔬植株主茎的识别,其应用有局限,且只能实现主茎的识别。

综上,非常需要一种基于彩色图像的植株茎秆边缘识别方法。本发明可实现番茄植株茎秆边缘的识别,可为番茄植株对靶喷施、番茄生产机器人自动导航、成簇采摘、自动避障等提供所需的番茄植株茎秆在图像中的位置及尺寸等信息。



技术实现要素:

本发明的目的在于提供一种基于边缘对偶关系的番茄植株茎秆边缘识别方法,以实现彩色图像中枝叶近色的番茄植株茎秆边缘与叶子边缘的分离,识别出番茄植株茎秆边缘对。

本发明采用的技术方案是:

本发明包括如下步骤:

①图像分割:对番茄植株彩色图像c进行图像分割,获得番茄植株二值图像i;采用基于归一化绿红色差的固定阈值图像分割算法,归一化绿红色差的计算如式(1)所示:

式中:cn—归一化绿红色差;min-表示求最小值;max-表示求最大值;cc—绿红色差,如式(2)所示:

式中:rgb—彩色图像的三个颜色分量;

②连续边缘提取:在图像分割后的二值图像i中,进行连续边缘提取,获得边缘图像e2,左右边缘图像elr,上下边缘图像eud,如式(3)所示:

式中:(x,y)—图像i、e2、elr及eud的横、纵坐标;

③边缘去噪:去除e2中长度小于阈值tl的短边缘,获得边缘图像e3;

④边缘排序:应用一种番茄植株边缘排序算法对边缘图像e3中各边缘的边缘点按其在图像坐标系中的位置先后关系分别进行排序,获得边缘图像e4;

⑤基于tl邻域滤波的边缘点类型标识:按序统计e4边缘图像中各边缘中各边缘点的tl邻域内像素在边缘图像elr、eud中的4种类型(elr中值为1的像素为左类型、值为2的像素为右类型;eud中值为1的像素为上类型、值为2的像素为下类型)边缘点个数,将当前边缘点类型修改为4种类型中边缘点数最多的类型;获得边缘图像e5,其中边缘点类型分别为左、右、上、下像素的值分别为1、2、3、4;

⑥短边缘段滤波:对边缘图像e5各边缘中长度小于阈值ts的短边缘段的边缘点类型修改为与该短边缘段相邻的长边缘段的边缘点类型,获得边缘图像e6;

⑦边缘分割:按序遍历e6图像中各边缘中的各边缘点,在边缘点序号前后相邻的两个类型不同的边缘点处,将该边缘分割为两段,获得边缘图像e7;

⑧基于边缘对偶关系的番茄植株茎秆边缘对提取;番茄植株茎秆边缘对间距较小;通过遍历边缘图像e7中各边缘,求当前边缘上边缘点与对偶边缘点的间距t,若该边缘上边缘点与同一对偶边缘的所有相应对偶边缘点间距t均小于非茎秆宽度阈值tn,且该对偶边缘上间距t小于茎秆宽度阈值ty(ty<tn,且tn-ty为茎秆边缘噪声宽度)的对偶边缘点数大于阈值tm,则提取出该边缘和该对偶边缘,从而实现番茄茎秆边缘的识别;其中,当前边缘点若分别为左、右、上、下类型,则其对偶边缘点分别为在该当前边缘点右、左、下、上侧区域内的第一个右、左、下、上类型边缘点;对偶边缘点所在边缘为当前边缘的对偶边缘。

如步骤⑤所述的基于tl邻域滤波的边缘点类型标识,实现方法如下:按序遍历e4边缘图像中的所有边缘点;统计当前边缘点及其前后tl/2个边缘点共计tl+1个边缘点在边缘图像elr、eud中的4种类型边缘点个数,将当前边缘点类型修改为4种类型中边缘点数最多的类型;对于每条边缘前tl/2个边缘点,则将其边缘点类型修改为该边缘前tl个边缘点4种类型中边缘点数最多的类型;对于每条边缘最后tl/2个边缘点,则将其边缘点类型修改为该边缘最后tl个边缘点4种类型中边缘点数最多的类型;获得经tl邻域边缘滤波后的边缘图像e5。

如步骤⑥所述的短边缘段滤波,实现方法如下:遍历边缘图像e5中各边缘上的各边缘点,定义边缘长度变量count并初始化为0;判断当前边缘点与其相邻的前一边缘点的边缘点类型是否一致:若是,则count自增1,将当前边缘点的后一相邻边缘点作为当前边缘点;否则,将当前边缘点之前count个边缘点的边缘点类型修改为当前边缘点之前第count+1个边缘点的类型,若这count个边缘点为当前边缘的起始count个边缘点,则将该count个边缘点的边缘点类型修改为当前边缘点的边缘点类型,count重置为1,将当前边缘点的后一相邻边缘点作为当前边缘点;重复上述步骤,直至遍历完边缘图像e5中所有边缘上的所有边缘点为止。

如步骤⑦所述的边缘分割,实现方法如下:遍历边缘图像e6中各边缘上的各边缘点;判断当前边缘点与其相邻的前一边缘点的边缘点类型是否一致:若是,则当前边缘点与其相邻的前一边缘点属于同一边缘,不进行边缘分割,将当前边缘点的后一相邻边缘点作为当前边缘点;否则,当前边缘点与其相邻的前一边缘点属于不同边缘,以当前边缘点为边缘分割点,将当前边缘分为两段,将当前边缘点所在的边缘作为当前边缘,将当前边缘点的后一相邻边缘点作为当前边缘点;重复上述步骤,直至遍历完边缘图像e6中所有边缘上的所有边缘点为止。

如步骤⑧所述的基于边缘对偶关系的番茄植株茎秆边缘对提取,包括如下步骤:

步骤8.1:边缘序号ne=1,即将边缘图像e7中第1条边缘作为当前边缘;

步骤8.2:变量和数组定义、初始化:判断是否已遍历所有边缘,即ne是否大于ens;若是,则结束本算法;否则,设置np=1,即将当前边缘的第1个边缘点作为当前边缘点(r,c),定义第一个对偶边缘点标记变量firpf,保存前一对偶边缘点所在边缘序号变量froeno,前一对偶边缘无效标记变量nomatf,对偶边缘数变量mec,对偶边缘对偶点数变量mpno,且均初始化为0,定义存储对偶边缘序号的一维数组meno及存储对偶边缘对偶点数的一维数组mpno;

步骤8.3:当前边缘点对偶边缘扫描范围的设定:根据当前边缘点类型,设置扫描范围ystart到yend行,xstart到xend列,及对偶边缘类型mf,即判断当前边缘点e7(r,c)的值,

若为1,则ystart=r,yend=r,xstart=c+1,xend=c+ts,mf=2;

若为2,则ystart=r,yend=r,xstart=c-1,xend=c-ts,mf=1;

若为3,则ystart=r+1,yend=r+ts,xstart=c,xend=c,mf=4;

若为4,则ystart=r-1,yend=r-ts,xstart=c,xend=c,mf=3;

进入步骤8.4;

步骤8.4:对偶边缘点的扫描及扫描间距计算:判断是否没有遍历完当前边缘ne的所有边缘点,即np是否小于等于epns(ne);若是,p从ystart行到yend行,q从xstart列到xend列,逐点扫描e7图像中的像素(p,q),计算扫描点(p,q)到当前边缘点(r,c)的距离t=abs(p-r)+abs(q-c),进入步骤8.5;否则,跳转到步骤8.12;

步骤8.5:有效对偶边缘点的识别:若当前边缘点与其对偶边缘点间距t小于阈值ty,即像素(p,q)值为mf且t小于ty,则该对偶边缘点为有效对偶边缘点,对偶边缘对偶点数mpno自增1,进入步骤8.6;否则跳转至步骤8.8;

步骤8.6:出现新对偶边缘时前一对偶边缘是否为有效对偶边缘的判断:判断当前对偶边缘点所在边缘序号是否与前一对偶边缘点所在边缘序号不同,即firpf是否大于0且noe(p,q)是否不等于froeno;若是,判断前一对偶边缘是否为有效对偶边缘,即nomatf是否为0,若是,则当前边缘的对偶边缘数mec自增1,保存对偶边缘序号及对偶边缘点数,meno(mec)=froeno,mpno(mec)=mpno,否则,将前一对偶边缘无效标记清零nomatf=0,对偶边缘对偶点数mpno=1;

步骤8.7:保存前一对偶边缘点所在边缘序号,即froeno=noe(p,q),且设置第一个对偶边缘点标记变量firpf=1,表示非第一个对偶边缘点;

步骤8.8:无效对偶边缘点的识别:若当前边缘点与其对偶边缘点间距t大于阈值tn,即像素(p,q)值为mf且t大于tn,则该对偶边缘点为无效对偶边缘点,进入步骤8.9;否则,跳转至步骤8.11;

步骤8.9:出现新对偶边缘时前一对偶边缘是否为有效对偶边缘的判断:判断当前对偶边缘点所在边缘序号是否与前一对偶边缘点所在边缘序号不同,且前一对偶边缘是否为有效对偶边缘,即firpf是否大于0且noe(p,q)是否不等于froeno且nomatf为0;若是,则当前边缘的对偶边缘数mec自增1,保存对偶边缘序号及对偶边缘点数,meno(mec)=froeno,mpno(mec)=mpno,对偶边缘对偶点数mpno=0;

步骤8.10:保存前一对偶边缘点所在边缘序号,即froeno=noe(p,q);设置第一个对偶边缘点标记变量firpf=1,表示非第一个对偶边缘点;设置前一对偶边缘无效标记nomatf=1,表示前一对偶边缘为无效对偶边缘;

步骤8.11:将当前边缘的下一边缘点作为当前边缘点(r,c),即np自增1;跳转到步骤8.3;

步骤8.12:当前边缘最后一段对偶边缘的处理:在当前边缘所有边缘点遍历完成后,判断最后一对偶边缘是否为有效边缘,即nomatf是否为0;若是,当前边缘的对偶边缘数mec自增1,保存对偶边缘序号及对偶边缘点数,meno(mec)=froeno,mpno(mec)=mpno;

步骤8.13:番茄茎秆边缘对的提取:逐条判断第t条(t为1到mec)对偶边缘的对偶点数mpno(t)是否大于阈值tm,若是,将该对偶边缘meno(t)和当前边缘作为番茄植株茎秆边缘对;将边缘图像e7中的下一条边缘作为当前边缘,即ne自增1,跳转到5.2。

本发明具有的有益效果是:本发明通过设计一种基于边缘对偶关系的番茄植株茎秆边缘识别方法,实现从枝叶近色的番茄植株边缘中提取出茎秆边缘,进而可为番茄生产机器人提供番茄植株茎秆在图像中的位置及尺寸等信息。

附图说明

图1是基于边缘对偶关系的番茄植株茎秆边缘识别系统组成示意图。

图2是基于边缘对偶关系的番茄植株茎秆边缘识别方法流程图。

图3是番茄植株边缘类型标识、滤波及茎秆边缘识别原理图。

图4是基于边缘对偶关系的番茄茎秆边缘对提取流程图。

图5是基于边缘对偶关系的番茄茎秆边缘识别实例。

图1中:1、番茄植株,2、彩色相机,3、照明系统,4、1394图像采集卡,5、计算机,6、基于边缘对偶关系的番茄植株茎秆边缘识别软件。

具体实施方式

下面结合附图和实施例对本发明作进一步说明。

如图1示意了基于边缘对偶关系的番茄植株茎秆边缘识别系统的一个具体实施例。照明系统3采用2盏3w的白色荧光灯构成的对角照射系统,对角距离为400mm。图像接收装置采用双目立体相机2(立体相机可为后续应用获取番茄植株茎秆三维位置),双目立体相机2中的图像传感器为彩色sonyicx204ccd,最大分辨率为1024×768,透镜焦距为6mm。图像采集卡4型号为moge1394。计算机5为lenovor400笔记本电脑,内存3g,cpu为intelcoreduot6570,win7操作系统。使用1394连接线将双目立体相机2与1394图像采集卡4相连,1394图像采集卡4通过7合1读卡器接口安装在计算机5上。

基于边缘对偶关系的番茄植株茎秆边缘识别的具体实现如下:

使用照明系统3对夜间室外番茄植株1照明;双目立体相机2的彩色ccd接收到番茄植株1的一对光学图像对后,将其转换为一对电子图像对输出;双目立体相机2输出的这对电子图像对输入到1394图像采集卡4;1394图像采集卡4将模拟图像信号转换为数字图像信号后输入到计算机5中;计算机5中的基于边缘对偶关系的番茄植株茎秆边缘识别软件6实现番茄植株茎秆边缘识别。

如图2所示,基于边缘对偶关系的番茄植株茎秆边缘识别软件6中基于边缘对偶关系的番茄植株茎秆边缘识别方法的具体实现如下:

①图像分割:对番茄植株彩色图像c进行图像分割,获得番茄植株二值图像i;采用基于归一化绿红色差的阈值图像分割算法,如式(1)所示:

式中:i(x,y)—二值图像i中坐标为(x,y)像素的像素值;tb—图像分割阈值,设为0.37;cn—归一化绿红色差,如式(2)所示:

式中:min-表示求最小值;max-表示求最大值;cc—绿红色差,如式(3)所示:

式中:rgb—彩色图像的三个颜色分量;

②连续边缘提取:在图像分割后的二值图像i中,进行连续边缘提取,获得边缘图像e2,左右边缘图像elr,上下边缘图像eud,如式(4)所示:

式中:(x,y)—图像i、e2、elr及eud的横、纵坐标;

③边缘去噪:去除e2中长度小于阈值tl(设为10)的短边缘,获得边缘图像e3;

④边缘排序:应用一种番茄植株边缘排序算法对边缘图像e3中各边缘的边缘点按其在图像坐标系中的位置先后关系分别进行排序,获得边缘图像e4;

⑤基于tl邻域滤波的边缘点类型标识:按序统计e4边缘图像中各边缘中各边缘点的tl(设为10)邻域内边缘点在边缘图像elr、eud中的4种类型(elr中值为1的像素为左类型、值为2的像素为右类型;eud中值为1的像素为上类型、值为2的像素为下类型)边缘点个数,将当前边缘点类型修改为4种类型中边缘点数最多的类型;获得边缘图像e5,其中边缘点类型分别为左、右、上、下像素的值分别为1、2、3、4;

⑥短边缘段滤波:对边缘图像e5各边缘中长度小于阈值ts(设为10)的短边缘段的边缘点类型修改为与该短边缘段相邻的长边缘段的边缘点类型,获得边缘图像e6;

⑦边缘分割:按序遍历e6图像中各边缘中的各边缘点,在边缘点序号前后相邻的两个类型不同的边缘点处,将该边缘分割为两段,获得边缘图像e7;

⑧基于边缘对偶关系的番茄植株茎秆边缘对提取;番茄植株茎秆边缘对间距较小;通过遍历边缘图像e7中各边缘,求当前边缘上边缘点与对偶边缘点的间距t,若该边缘上边缘点与同一对偶边缘的所有相应对偶边缘点间距t均小于非茎秆宽度阈值tn(设为20),且该对偶边缘上间距t小于茎秆宽度阈值ty(设为15,茎秆边缘噪声宽度为5)的对偶边缘点数大于阈值tm(设为10),则提取出该边缘和该对偶边缘,从而实现番茄茎秆边缘的识别;其中,当前边缘点若分别为左、右、上、下类型,则其对偶边缘点分别为在该当前边缘点右、左、下、上侧区域内的第一个右、左、下、上类型边缘点;对偶边缘点所在边缘为当前边缘的对偶边缘。

如步骤④所述的一种番茄植株边缘排序算法包括如下步骤:

步骤4.1:存储已排序边缘的变量和数组定义和初始化;定义已排序边缘数变量en,初始化为0;定义存储已排序边缘点数的一维数组epn,并将其所有元素均初始化为0;定义存储已排序边缘点图像纵横坐标y、x的二维数组epy、epx,第一维表示该边缘点所在边缘序号,第二维表示该边缘点在所在已排序边缘所有边缘点中的序号;定义标识边缘点是否为已排序边缘点的二维数组edgpof,第一维表示边缘点在图像坐标系中的纵坐标,第二维表示边缘点在图像坐标系中的横坐标,将其所有元素均初始化为0;进入步骤4.2;

步骤4.2:进行同一起点边缘簇中边缘的排序;存储同一起点边缘簇所需变量和数组的定义和初始化;定义同一起点边缘簇中边缘数变量edgeno,初始化为0;定义存储边缘点数的一维数组edgpono,并将其所有元素均初始化为0;定义存储边缘点图像纵横坐标y、x的二维数组edgpoy、edgpox,第一维表示该边缘点所在边缘的序号,第二维表示该边缘点在所在边缘所有边缘点中的序号;进入步骤4.3;

步骤4.3:从上往下,从左往右逐点扫描边缘图像e3,判断当前像素(i,j)是否为未排序边缘点,即判断e3(i,j)及edgpof(i,j)的值;若是,即e3(i,j)值为1、edgpof(i,j)值为0,则新建一条以该边缘点(i,j)为起点的边缘,即将边缘数edgeno置为1,将第edgeno号边缘的边缘点数edgpono(edgeno)置为1,保存第edgeno号边缘中第1个边缘点的图像纵横坐标,即edgpoy(edgeno,1)=i,edgpox(edgeno,1)=j;将该边缘点(i,j)标识为已排序边缘点,即设置edgpof(i,j)=1;使用变量starty、startx分别保存该起点的图像纵横坐标,即设置starty=i,startx=j;将该边缘作为当前边缘edgeno;将该边缘点(i,j)作为当前边缘点(r,c),即r=i,c=j,进入步骤4.4;否则,跳转至步骤4.12;

步骤4.4:存储分叉点及相应公共边缘的变量和数组的定义及初始化;定义分叉点数变量cropono,并初始化为0;定义存储分叉点图像纵横坐标的一维数组cropoy及cropox;定义存储第cropono个分叉点对应的公共边缘cropono的边缘点图像横纵坐标的二维数组shaedgpoy、shaedgpox,其中第一维表示公共边缘序号,第二维表示边缘点序号;进入步骤4.5;

步骤4.5:统计当前边缘点(r,c)8邻域内的未排序边缘点数unfpono,即遍历当前边缘点(r,c)8邻域内像素(m,n),统计e3(m,n)为1且edgpof(m,n)为0的像素数,存入unfpono;定义标识当前边缘点(r,c)是否为分叉点的变量cropof并初始化为0,进入步骤4.6;

步骤4.6:判断当前边缘点(r,c)是否为分叉点;判断unfpono是否等于2,若是,计算边缘点(r,c)8邻域内的这两个未排序边缘点的间距dist,判断dist是否大于1,若是,标识当前边缘点(r,c)是分叉点,即设置标识变量cropof为1;若unfpono大于2,则当前边缘点(r,c)同样是分叉点,即设置标识变量cropof为1;进入步骤4.7;

步骤4.7:若当前边缘点(r,c)是分叉点,则保存该分叉点图像纵横坐标,并将起点(starty,startx)到该分叉点(r,c)的边缘作为相应的公共边缘加以保存,即判断cropof是否为1,若是,分叉点数cropono自增1,保存该分叉点的图像纵横坐标,即cropoy(cropono)=r,cropox(cropono)=c,新增一条公共边缘,即将edgpoy(edgeno,t)、edgpox(edgeno,t)按t从1至edgpono(edgeno)的顺序分别存入shaedgpoy(cropono,t)、shaedgpox(cropono,t),并用shaedgpono数组保存该公共边缘的边缘点数,即shaedgpono(cropono)=edgpono(edgeno),跳转到步骤4.8;否则,直接转入步骤4.8;

步骤4.8:判断当前边缘点(r,c)的8邻域内是否存在未排序边缘点(p,q),即判断是否存在e3(p,q)为1且edgpof(p,q)同时为0的像素;若是,当前边缘edgeno的边缘点数edgpono(edgeno)自增1,将该边缘点(p,q)按序存入当前边缘edgeno,即edgpoy(edgeno,edgpono(edgeno))=p,edgpox(edgeno,edgpono(edgeno))=q,将该边缘点(p,q)标识为已排序边缘点,即设置edgpof(p,q)=1,并以该边缘点(p,q)为当前边缘点,即r=p,c=q,跳转至步骤4.5;否则,进入步骤4.9;

步骤4.9:判断分叉点数cropono是否大于0;若是,新建一边缘,即边缘数edgeno自增1,且将序号为cropono的公共边缘的边缘点按序存入该新建边缘,作为该新建边缘中的边缘点,即将shaedgpoy(cropono,t)、shaedgpox(cropono,t)按t从1至shaedgpono(cropono)的顺序分别存入edgpoy(edgeno,t)、edgpox(edgeno,t),当前边缘edgeno的边缘点数为该公共边缘的边缘点数,即edgpono(edgeno)=shaedgpono(cropono),同时以该新建边缘为当前边缘edgeno,以该分叉点为当前边缘点,即r=cropoy(cropono),c=cropox(cropono),公共边缘数cropono减1,跳转至步骤4.5;否则,转入步骤4.10;

步骤4.10:判断同一起点(starty,startx)的边缘数量edgeno是否大于0;若是,确定同一起点(starty,startx)的所有边缘中边缘点数最多的边缘作为最长边缘mle,并暂存mle的边缘点图像纵横坐标及边缘点数,即暂存已排序边缘数变量en自增1,将mle边缘所有边缘点图像纵横坐标edgpoy(mle,t)、edgpox(mle,t)分别按t从1至edgpono(mle)的顺序存入epy(en,t)、epx(en,t)数组中,将最长边缘边缘点数edgpono(mle)存入epn(en)中,转入步骤4.11;否则,跳转至步骤4.2;

步骤4.11:将同一起点(starty,startx)的所有边缘中,除最长边缘mle外,其他所有边缘进行逐点扫描,去除其中属于最长边缘的边缘点,即逐点判断第te号边缘(te为1到edgeno中的一个整数且不等于mle)中的各边缘点,若第t个(t为1到edgpono(te)中的一个整数)边缘点的图像纵或横坐标edgpoy(te,t)、edgpox(te,t)与edgpoy(mle,t)、edgpox(mle,t)不全相等,则去除te边缘中第1到第t-1号的边缘点,只保留第t到第edgpono(te)号边缘点,且te边缘的边缘点数edgpono(te)修改为edgpono(te)-t+1个;同一起点的边缘数edgeno自减1,从同一起点(starty,startx)的所有边缘中去除mle边缘,即将edgpono(mle)清零;跳转至步骤4.10;

步骤4.12:结束边缘排序过程。

如步骤⑤所述的基于tl邻域滤波的边缘点类型标识,实现方法如下:按序遍历e4边缘图像中的所有边缘点;统计当前边缘点及其前后tl/2个边缘点共计tl+1个边缘点在边缘图像elr、eud中的4种类型边缘点个数,将当前边缘点类型修改为4种类型中边缘点数最多的类型;对于每条边缘前tl/2个边缘点,则将其边缘点类型修改为该边缘前tl个边缘点4种类型中边缘点数最多的类型;对于每条边缘最后tl/2个边缘点,则将其边缘点类型修改为该边缘最后tl个边缘点4种类型中边缘点数最多的类型;获得经tl邻域边缘滤波后的边缘图像e5。图3左图是基于tl邻域边缘滤波的边缘点类型标识的一个实例,以其中的点19为例,在其10(tl取10)邻域内有7个边缘点类型为下类型,分别为:点15,16,17,20,21,22,23;有8个边缘点类型为左类型,分别为:点13,14,15,16,17,18,20,22,24。因此点19的边缘点类型为左类型。

如步骤⑥所述的短边缘段滤波,包括如下步骤:

步骤6.1:将边缘图像e5中第1条边缘作为当前边缘,即边缘序号ne=1;

步骤6.2:判断是否已遍历完所有边缘,即ne是否大于en;若是,则结束本算法;否则,进入步骤6.3;

步骤6.3:定义边缘长度变量count并初始化为0;将当前边缘的第1个边缘点类型存入前一边缘类型变量frontf;定义保存前一边缘的前一边缘类型的变量ffrontf并初始化为0;进入步骤6.4;

步骤6.4:将当前边缘的第2个边缘点作为当前边缘点(r,c),即np=2;

步骤6.5:判断是否已遍历完当前边缘的所有边缘点,即np是否小于epn(ne);若是,边缘序号ne自增1,则跳转到步骤6.2;否则,进入步骤6.6;

步骤6.6:类型不连续边缘点识别:判断当前边缘点类型e5(r,c)与前一边缘点类型frontf是否一致;若是,表明边缘点类型连续,则count自增1,跳转到步骤6.9;否则,边缘点类型发生变化,进入步骤6.7;

步骤6.7:短边缘段识别:判断类型连续边缘点数count是否小于阈值ts(设为10);若是,则该类型连续边缘段为短边缘段,进入步骤6.8;否则,该类型连续边缘为长边缘段,保存该边缘类型,用作下一条短边缘段处理时该短边缘段的前一边缘的类型,即ffrontf=frontf,且count=1,跳转到步骤6.9;

步骤6.8:短边缘段类型修改:判断短边缘段是否为当前边缘的第一段边缘,即ffrontf是否为0;若是,则将短边缘段边缘点类型修改为当前边缘点类型,即当前点前count个边缘点类型均修改为e5(r,c),count自增1;否则,将短边缘段边缘点类型修改为该短边缘段的前一边缘的类型,即将当前点前count个边缘点类型均修改为ffrontf,count=1,进入步骤6.9;

步骤6.9:保存当前边缘点类型作为下一个边缘点处理时的前一边缘点类型,frontf=e5(r,c);

步骤6.10:将下一个边缘点作为当前边缘点,即np自增1,跳转到步骤6.5。

图3中间图是图3左图的短边缘类型滤波结果。可见,边缘点7和8、边缘点9、边缘点11、边缘点19、边缘点21,22和23的边缘点类型均做了修改。

如步骤⑦所述的边缘分割包括如下步骤:

步骤7.1:变量和数组定义及初始化:定义已分割边缘数变量ens,初始化1;定义存储已分割边缘点数的一维数组epns,并将其所有元素均初始化为0;定义存储已分割边缘点图像纵横坐标y、x的二维数组epys、epxs,第一维表示该边缘点所在边缘序号,第二维表示该边缘点在所在已分割边缘所有边缘点中的序号;定义存储边缘点所在边缘序号的二维数组edgno,第一维和第二维分别表示边缘点在边缘图像中的纵横坐标;边缘序号ne=1,即将边缘图像e6中第1条边缘作为当前边缘;

步骤7.2:判断是否已遍历完所有边缘,即ne是否大于en;若是,则结束本算法;否则,进入步骤7.3;

步骤7.3:保存当前边缘的第1个边缘点图像纵横坐标、边缘序号,即epys(ens,1)=epy(ne,1)、epxs(ens,1)=epx(ne,1);保存该边缘点所在边缘序号noe(epys(ens,1),epxs(ens,1))=1;保存该边缘点类型,即frontf=e6(epys(ens,1),epxs(ens,1));边缘长度epns(ens)=1;进入步骤7.4;

步骤7.4:将当前边缘的第2个边缘点作为当前边缘点(r,c),即np=2;

步骤7.5:判断是否已遍历完当前边缘的所有边缘点,即判断np是否大于epn(ne);若是,ne自增1,跳转到步骤7.2;否则,进入步骤7.6;

步骤7.6:根据前后边缘点类型是否一致确定边缘分割点并进行边缘分割:判断当前边缘点类型与前一边缘点类型是否一致,即e6(r,c)与frontf是否一致;若是,则前后边缘点属于同一边缘,epns(ens)自增1,epys(ens,epns(ens))=r、epxs(ens,epns(ens))=c;否则,前后边缘点属于不同边缘,将当前边缘分为两段,即ens自增1,epns(ens)=1,epys(ens,1)=r、epxs(ens,1)=c;

步骤7.7:保存当前边缘点(r,c)所在边缘序号,即noe(r,c)=ens;保存当前边缘点类型,用作下一边缘点处理时的前一边缘点类型,即frontf=e6(r,c);将下一个边缘点作为当前边缘点(r,c),即np自增1,跳转到步骤7.5。

如步骤⑧所述的基于边缘对偶关系的番茄植株茎秆边缘对提取,如图4所示,包括如下步骤:

步骤8.1:边缘序号ne=1,即将边缘图像e7中第1条边缘作为当前边缘;

步骤8.2:变量和数组定义、初始化:判断是否已遍历所有边缘,即ne是否大于ens;若是,则结束本算法;否则,设置np=1,即将当前边缘的第1个边缘点作为当前边缘点(r,c),定义第一个对偶边缘点标记变量firpf,保存前一对偶边缘点所在边缘序号变量froeno,前一对偶边缘无效标记变量nomatf,对偶边缘数变量mec,对偶边缘对偶点数变量mpno,且均初始化为0,定义存储对偶边缘序号的一维数组meno及存储对偶边缘对偶点数的一维数组mpno;

步骤8.3:当前边缘点对偶边缘点扫描范围的设定:根据当前边缘点类型,设置扫描范围ystart到yend行,xstart到xend列,及对偶边缘点类型mf,即判断当前边缘点e7(r,c)的值,

若为1,则ystart=r,yend=r,xstart=c+1,xend=c+ts,mf=2;

若为2,则ystart=r,yend=r,xstart=c-1,xend=c-ts,mf=1;

若为3,则ystart=r+1,yend=r+ts,xstart=c,xend=c,mf=4;

若为4,则ystart=r-1,yend=r-ts,xstart=c,xend=c,mf=3;

ts设为25,进入步骤8.4;如图3右图中的边缘点20,其图像坐标为(186,476),因此其对偶点的扫描范围设为:ystart=185,yend=156,xstart=476,xend=476,对偶边缘类型mf=3;

步骤8.4:对偶边缘点的扫描及扫描间距计算:判断是否没有遍历完当前边缘ne的所有边缘点,即np是否小于等于epns(ne);若是,p从ystart行到yend行,q从xstart列到xend列,逐点扫描e7图像中的像素(p,q),计算扫描点(p,q)到当前边缘点(r,c)的距离t=abs(p-r)+abs(q-c),进入步骤8.5;否则,跳转到步骤8.12;

步骤8.5:有效对偶边缘点的识别:若当前边缘点与其对偶边缘点间距t小于阈值ty(设为15),即像素(p,q)值为mf且t小于ty,如图3右图所示,则该对偶边缘点为有效对偶边缘点,对偶边缘对偶点数mpno自增1,进入步骤8.6;否则跳转至步骤8.8;图3右图中,边缘点20及其对偶边缘点9间距为10,小于阈值ty,因此边缘点9为边缘点20的有效对偶边缘点;

步骤8.6:出现新对偶边缘时前一对偶边缘是否为有效对偶边缘的判断:判断当前对偶边缘点所在边缘序号是否与前一对偶边缘点所在边缘序号不同,即firpf是否大于0且noe(p,q)是否不等于froeno;若是,判断前一对偶边缘是否为有效对偶边缘,即nomatf是否为0,若是,则当前边缘的对偶边缘数mec自增1,保存对偶边缘序号及对偶边缘点数,meno(mec)=froeno,mpno(mec)=mpno,否则,将前一对偶边缘无效标记清零nomatf=0,对偶边缘对偶点数mpno=1;

步骤8.7:保存前一对偶边缘点所在边缘序号,即froeno=noe(p,q),且设置第一个对偶边缘点标记变量firpf=1,表示非第一个对偶边缘点;

步骤8.8:无效对偶边缘点的识别:若当前边缘点与其对偶边缘点间距t大于阈值tn,即像素(p,q)值为mf且t大于tn(设为20),如图3右图所示,则该对偶边缘点为无效对偶边缘点,进入步骤8.9;否则,跳转至步骤8.11;

步骤8.9:出现新对偶边缘时前一对偶边缘是否为有效对偶边缘的判断:判断当前对偶边缘点所在边缘序号是否与前一对偶边缘点所在边缘序号不同,且前一对偶边缘是否为有效对偶边缘,即firpf是否大于0且noe(p,q)是否不等于froeno且nomatf为0;若是,则当前边缘的对偶边缘数mec自增1,保存对偶边缘序号及对偶边缘点数,meno(mec)=froeno,mpno(mec)=mpno,对偶边缘对偶点数mpno=0;

步骤8.10:保存前一对偶边缘点所在边缘序号,即froeno=noe(p,q);设置第一个对偶边缘点标记变量firpf=1,表示非第一个对偶边缘点;设置前一对偶边缘无效标记nomatf=1,表示前一对偶边缘为无效对偶边缘;

步骤8.11:将当前边缘的下一边缘点作为当前边缘点(r,c),即np自增1;跳转到步骤8.3;

步骤8.12:当前边缘最后一段对偶边缘的处理:在当前边缘所有边缘点遍历完成后,判断最后一对偶边缘是否为有效边缘,即nomatf是否为0;若是,当前边缘的对偶边缘数mec自增1,保存对偶边缘序号及对偶边缘点数,meno(mec)=froeno,mpno(mec)=mpno;

步骤8.13:番茄茎秆边缘对的提取:逐条判断第t条(t为1到mec)对偶边缘的对偶点数mpno(t)是否大于阈值tm(设为10),若是,将该对偶边缘meno(t)和当前边缘作为番茄植株茎秆边缘对;将边缘图像e7中的下一条边缘作为当前边缘,即ne自增1,跳转到5.2。

图5,中间图为左图中番茄植株边缘图像,右图为应用本发明后得到的番茄茎秆边缘识别结果,可见,应用本发明可实现枝叶近色番茄植株茎秆边缘识别。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1