CN106960209B - 一种图像轮廓有序点集提取方法 - Google Patents
一种图像轮廓有序点集提取方法 Download PDFInfo
- Publication number
- CN106960209B CN106960209B CN201710172510.0A CN201710172510A CN106960209B CN 106960209 B CN106960209 B CN 106960209B CN 201710172510 A CN201710172510 A CN 201710172510A CN 106960209 B CN106960209 B CN 106960209B
- Authority
- CN
- China
- Prior art keywords
- idy
- idx
- selsete
- fragment
- points
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/40—Extraction of image or video features
- G06V10/44—Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
Landscapes
- Engineering & Computer Science (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Theoretical Computer Science (AREA)
- Transforming Light Signals Into Electric Signals (AREA)
- Image Analysis (AREA)
- Image Processing (AREA)
Abstract
本发明公开了一种图像轮廓有序点集提取方法,其的特征在于:基于一种逻辑拓扑结构,每个点对应八个碎点,一个碎点代表点的一个联通方向;将所有碎点进行连接,其方法是,如果一个碎点对应联通方向达到联通条件,则将碎点指向对应联通方向的碎点的时针方向上的下一个碎点,否则将其指向本点的时针方向上的下一个碎点。所述的时针方向包括顺时针和逆时针。所述的时针方向对所有的点都是统一的。本发明的新颖性在于:本发明相对现有技术可以更加快速便捷的获得图像轮廓有序点集数据。
Description
技术领域
本发明属于计算机视觉领域,更具体的涉及一种图像轮廓有序点集提取方法、计算机视觉***,属于专利分类名称为“图像特征或特性的抽取”的G06K9/46(2006.01)I号分类。
背景技术
图像轮廓的提取是计算机视觉中一个基础性的核心步骤,在很多场合需要对图像轮廓提取并转换为有序点集。
现有的计算机图像轮廓有序点集提取方法一般使用虫随法、光栅扫描法等,这些方法运行时都难以实现并行运算,图像内部小图像越多,耗时越大,难以预测轮廓抽取的耗时;这些方法难以解析交叉的边界;这些方法收敛特性不够稳定,可能掉入所谓的“陷阱”。
发明内容
本发明的目的在于针对现有技术的不足提出一种图像轮廓有序点集提取方法,解决现有图像轮廓有序点集提取方法运行缓慢、难以解析相交叉的边界、收敛不稳定的问题,有利于计算机视觉开发者开发计算机视觉***。
一种图像轮廓有序点集提取方法,基于一种逻辑拓扑结构,每个点对应八个碎点,一个碎点代表点的一个联通方向;将所有碎点进行连接,其方法是:如果一个碎点对应联通方向达到联通条件,则将碎点指向对应联通方向的碎点的时针方向上的下一个碎点,否则将其指向本点的时针方向上的下一个碎点。
进一步说明 1:所述的时针方向包括逆时针方向和顺时针方向。
进一步说明2:所述的时针方向对所有的点都是统一的,也就是说在一次图片处理中所有点使用的时针方向必须是一致的,也就是说,不允许任何一个点使用与其他点不同的时针方向;(参见图2)。
进一步说明3:所述的联通条件是可变的,由使用本发明的计算机视觉开发者根据需求而定义。
进一步说明4:所述的统一的时针方向不是对碎点连接形成的边界链的时针方向的限定,也就是说碎点连接完毕后产生的碎点链可以是不同的时针方向,事实上本发明碎点连接形成的碎点链,其方向既有顺时针也有逆时针。
进一步说明5:由于进行过碎点连接运算后,边界碎点链就被勾出,又由于碎点和点是对应的,也就是说边界碎点链的勾出,对于计算机视觉开发者而言,等同于有序点集的勾出;(参见图3、图4、图5)。
进一步说明6:为了方便计算机视觉开发者对本发明的理解和利用,特意做出非本发明必要特征的补充——孤点的判断依据:孤点即对外无连接的点,一个碎点链其包含的所有碎点都对应同一个点,那么这条碎点链也就是一个孤点的碎点链(参见图3,点P8)。
进一步说明7:为了方便计算机视觉开发者对本发明的理解和利用,特意做出非本发明必要特征的补充——非边界碎点链的判断依据1:由于所有连接都成对出现,那么当一个点的两个相邻联通方向都对外先连接时,位于时针方向上排位靠后的碎点所在的碎点链一定是非边界碎点链;参见图3,碎点链P0(S6)、P1(S3,S4)、P4(S1)和碎点链P1(S5,S6)、P2(S3,S4)、P4(S7,S0)、P5(S5,S2)。
进一步说明8:为了方便计算机视觉开发者对本发明的理解和利用,特意做出非本发明必要特征的补充——非边界碎点链的判断依据2:孤点不算作有效图像的情况下,由于一个点对应八个碎点,那么连接后一个有效碎点链碎点数一定大于八,无效碎点链碎点数一定小于等于八;参见图3,碎点链P0(S6)、P1(S3,S4)、P4(S1)和碎点链P1(S5,S6)、P2(S3,S4)、P4(S7,S0)、P5(S5,S2)。
进一步说明9:为了方便计算机视觉开发者对本发明的理解和利用,特意做出非本发明必要特征的补充——碎点链的简化方法,以点为单元顺着时针方向的逆方向依次运算八个碎点,如果某碎点对外不联通,就将其指向更改为时针方向上下一个碎点的指向,并将下一个碎点清除;经过运算后同一点上的碎点出现在同一碎点链中的次数减少了;值得注意的是,由于孤点的所有碎点对外均无连接经过简化后会被消除(参见图5)。
进一步说明10:由于所有碎点的联通条件是一致的,也就是说一个联通方向上的连接是成对出现;由于连接成对出现且所有的点使用的连接方向规则相同(时针方向),所以所有碎点形成的连接一定都是闭合链接,所以不用担心收敛问题。
进一步说明11:由于每个碎点对应一个联通方向,碎点的连接只与这个方向是否达到条件相关,所以当两个边界交叉时,本发明也能分别检测出来,而不会出现判断冲突。
进一步说明12:因为每个联通方向上的碎点连接运算是独立的,和其他联通方向状况无关,且碎点之间的数据相关性比较小,所以本发明很适合并行运算。
进一步说明13:理解了进一步说明1-12后可知,本发明虽为并行化运算而创造,但相对传统方法其运行速度较快、可以检测交叉边界、不必担心收敛问题的优势,在非并行计算中同样存在。
本发明的新颖性在于:本发明是一种新的图像轮廓有序点集提取方法。
本发明的实用性在于:为计算机视觉开发者提供了一种图像轮廓有序点集提取方法,方便计算机视觉开发者开发适应于多处理器并行的计算机视觉***,相对现有技术可以更加快速便捷的获得图像轮廓有序点集数据。
附图说明
图1是本发明提出的的逻辑拓扑结构一个示例,点P的横坐标为x,纵坐标为y,颜色值为c,点P对应的八个碎点为S0-S7。
图2是本发明的一个实施实例,体现的是一个3*3像素的图像数据被导入后的逻辑拓扑结构。
图3 是图2实施实例的另一个状态,体现了图2经过碎点连接运算后的逻辑拓扑结构。
图4 是图2实施实例的另一个状态,体现了图3清除非边界碎点链后的逻辑拓扑结构。
图5 是图2实施实例的另一个状态,体现了图4简化碎点链并清除孤点后的逻辑拓扑结构。
具体实施方式
下面将结合实施实例对本发明进行说明。
如图2、图3、图4、图5所示,是本发明一种图像轮廓有序点集提取方法的一个实施实例,处理了一个具有3*3像素、具有0,1,3三种颜色值的图像;本实例使用的联通条件是颜色相同。
如图2所示,是本实施实例在图像数据导入后,碎点连接运算之前的逻辑拓扑结构;其中所有点的碎点都构成了一个顺时针的圈状闭合链;其中所有的辅助点P(-1,-1,-1)构成一道防止计算溢出的‘围墙’,因为‘围墙’中的碎点没有参与运算,为了视图的清晰、简洁,图中未将其指向画出。
如图3所示,是图2经过碎点连接运算后的逻辑拓扑结构,P0(S6)、P1(S3,S4)、P4(S1)构成了一条“长条形”的非边界碎点链;P1(S5,S6)、P2(S3,S4)、P4(S7,S0)、P5(S5,S2)构成了一个“十字形”非边界碎点链。
如图3所示,P3、P7构成的图像的边界与P6所在图像的边界虽然是交叉边界,但经过碎点连接运算后他们被分别检出为两条碎点链。
如图3所示,孤点P8对外没有联通。
如图4,是图3剔除非边界碎点链后的逻辑拓扑结构,非边界碎点链被清除(即标记为负,为了视图的清晰没有画出)。
如图5,是图4进行碎点链简化运算后的逻辑拓扑结构,同一点的碎点在同一碎点链上出现的次数减少了,孤点也被消除(即标记为负,为了视图的清晰没有画出)。
如图5所示,本实例得出的边界有序集是:(P3,P7)和(P0,P4,P6,P4,P5,P2,P1),P4在对应的轮廓有序集中出现了两次,符合实际情况。
以下是本实施实例的基于英伟达公司CUDA并行计算技术的部分代码,体现了本发明适合并行运算的特性;提供这些代码的目的是,为计算机视觉开发者理解和使用本发明提供参考。
struct FR_POINT{ //碎点
long next_x; //指向的碎点所在点的x值
long next_y; //指向的碎点所在点的y值
long next_s; //指向的碎点的编号
};
struct POINT{
long X; //点的横坐标
long y; //点的纵坐标
long c; //点的颜色值
long selsete[4]; //用于选择,可以代替if语句根据不同情况结合运
算,产生不同值
FR_POINT S[8]; //碎点集
};
POINT P[5][5]; //构造一个被点结构体组
for(i=0;i<5;i++){
//构造围墙,防止计算溢出,其颜色值-1为无效值,以防被连接
P[0][i].c = -1;
P[4][i].c = -1;
P[i][0].c = -1;
P[i][4].c = -1;
}
idx=threadIdx.x+1; //线程号x,idx的范围1-3
idy=threadIdx.y+1; //线程号y,idy的范围1-3
if(idx<4 && idy<4){ // idx的范围1-3, idy的范围1-3
for(t=0;t<8;t++){
P[idx][idy].S[t].next_x=idx; //将所有碎点指向本点,
P[idx][idy].S[t].next_y=idy;
P[idx][idy].S[t].next_s=(t+1)%8; //将碎点构成顺时针闭合环状链,
结果见图2;
}
P[idx][idy].c=IMAGE_COLOR[idx][idy]; //导入图像颜色值
//碎点连接,连接运算为并行运算,运算结果见图3
P[idx][idy].selsete[3] = !P[idx][idy].c-P[idx][idy-1].c;
//保存S0对应联通方向的联通状况,颜色相等则连接状态为1,否则为零
P[idx][idy].S[0].next_y -= P[idx][idy].selsete[3];
//如果S0对外联通改变y的值,S0对应联通方向的点横坐标与S0所在点一致;S0对
应的联通方向的点横坐标x值和本点的相同所以无需变化
P[idx][idy].S[0].next_s = 4 * P[idx][idy].selsete[3]+1;
//如果S0对外联通变S的值为5,如果不联通则S值为1
P[idx][idy].selsete[3] = !(P[idx][idy].c-P[idx-1][idy-1].c);
P[idx][idy].S[1].next_x -= P[idx][idy].selsete[3];
P[idx][idy].S[1].next_y -= P[idx][idy].selsete[3];
P[idx][idy].S[1].next_s = 4 * P[idx][idy].selsete[3]+2;
P[idx][idy].selsete[3] = !(P[idx][idy].c-P[idx-1][idy].c);
P[idx][idy].S[2].next_x -= P[idx][idy].selsete[3];
P[idx][idy].S[2].next_s = 4 * P[idx][idy].selsete[3]+3;
P[idx][idy].selsete[3] = !(P[idx][idy].c-P[idx-1][idy+1].c);
P[idx][idy].S[3].next_x -= P[idx][idy].selsete[3];
P[idx][idy].S[3].next_y += P[idx][idy].selsete[3];
P[idx][idy].S[3].next_s = 4 * !P[idx][idy].selsete[3];
P[idx][idy].selsete[3] = !(P[idx][idy].c-P[idx][idy+1].c);
P[idx][idy].S[4].next_y += P[idx][idy].selsete[3];
P[idx][idy].S[4].next_s = 4 * !P[idx][idy].selsete[3]+1;
P[idx][idy].selsete[3] = !(P[idx][idy].c-P[idx+1][idy+1].c);
P[idx][idy].S[5].next_x += P[idx][idy].selsete[3];
P[idx][idy].S[5].next_y += P[idx][idy].selsete[3];
P[idx][idy].S[5].next_s = 4 * !P[idx][idy].selsete[3]+2;
P[idx][idy].selsete[3] = !(P[idx][idy].c-P[idx+1][idy].c);
P[idx][idy].S[6].next_x += P[idx][idy].selsete[3];
P[idx][idy].S[6].next_s = 4 * !P[idx][idy].selsete[3]+3;
P[idx][idy].selsete[3] = !(P[idx][idy].c-P[idx+1][idy-1].c);
P[idx][idy].S[7].next_x += P[idx][idy].selsete[3];
P[idx][idy].S[7].next_y += P[idx][idy].selsete[3];
P[idx][idy].S[7].next_s = 4 * P[idx][idy].selsete[3];
//以下是将非边界碎点链标记为负数,以清除非边界碎点链,运算结果参图4
P[idx][idy].selsete[0] = -10;
P[idx][idy].selsete[1] = 0;
P[idx][idy].selsete[2] = 0;
P[idx][idy].selsete[3]=!(P[idx][idy].S[0].next_s-1)+ !(P[idx][idy].S[1].
next_s-2);
//判断相邻两碎点S0,S1对外联通状况
P[idx][idy].S[1].next_s += P[idx][idy].selsete[P[idx][idy].selsete[3]];
//如果S0,S1都对外联通,S1.next_s指向被变化为负值,代表被消除
P[idx][idy].selsete[3]=!(P[idx][idy].S[1].next_s-2)+ !(P[idx][idy].S[2].
next_s-3);
P[idx][idy].S[2].next_s += P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3]=!(P[idx][idy].S[2].next_s-3)+ !(P[idx][idy].S[3].
next_s-4);
P[idx][idy].S[3].next_s += P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3]=!(P[idx][idy].S[3].next_s-4)+ !(P[idx][idy].S[4].
next_s-5);
P[idx][idy].S[4].next_s += P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3]=!(P[idx][idy].S[4].next_s-5)+ !(P[idx][idy].S[5].
next_s-6);
P[idx][idy].S[5].next_s += P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3]=!(P[idx][idy].S[5].next_s-6)+ !(P[idx][idy].S[6].
next_s-7);
P[idx][idy].S[6].next_s += P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3]=!(P[idx][idy].S[6].next_s-7)+ !(P[idx][idy].S[7].
next_s-0);
P[idx][idy].S[7].next_s += P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3]=!(P[idx][idy].S[7].next_s-0)+ !(P[idx][idy].S[0].
next_s-1);
P[idx][idy].S[0].next_s += P[idx][idy].selsete[P[idx][idy].selsete[3]];
//以下是对前面的运算可能未完全清除的非边界碎点链(比如P1(S3))进行清除;
P[idx][idy].selsete[3]=!(P[idx][idy].S[0].next_s-1)+ !(P[idx][idy].S[2].
next_s-3);
//保存S0、S2对外联通情况,如果都对外联通则所得值为零
P[idx][idy].S[1].next_s += P[idx][idy].selsete[ P[idx][idy].selsete[3] ];
//如果S0、S2对外联通,则S1的指向变为负数
P[idx][idy].selsete[3]=!(P[idx][idy].S[2].next_s-3)+ !(P[idx][idy].S[4].
next_s-5);
P[idx][idy].S[3].next_s += P[idx][idy].selsete[ P[idx][idy].selsete[3] ];
P[idx][idy].selsete[3]=!(P[idx][idy].S[4].next_s-5)+ !(P[idx][idy].S[6].
next_s-7);
P[idx][idy].S[5].next_s += P[idx][idy].selsete[ P[idx][idy].selsete[3] ];
P[idx][idy].selsete[3]=!(P[idx][idy].S[6].next_s-0)+ !(P[idx][idy].S[0].
next_s-1);
P[idx][idy].S[7].next_s += P[idx][idy].selsete[ P[idx][idy].selsete[3] ];
//下面是边界碎点链的简化,运算结果参见图5
P[idx][idy].selsete[3] = !(P[idx][idy].S[7].next_s-0);
//如果指向0,则说明S[7]对外不联通,如果对外不联通就将其指向S[0]的指向,并
清除S[0]
P[idx][idy].selsete[0] = P[idx][idy].S[7].next_x;
//S[7]对外联通则S7指向的横坐标x不变
P[idx][idy].selsete[1] = P[idx][idy].S[0].next_x;
//S[7]对外不联通则S7指向的横坐标 x变为S[0]指向的横坐标
P[idx][idy].S[7].next_x = P[idx][idy].selsete[P[idx][idy].selsete[3]];
//选择运算,如果
P[idx][idy].selsete[0] = P[idx][idy].S[7].next_y;
P[idx][idy].selsete[1] = P[idx][idy].S[0].next_y;
P[idx][idy].S[7].next_y = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[7].next_s;
P[idx][idy].selsete[1] = P[idx][idy].S[0].next_s;
P[idx][idy].S[7].next_s = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = 1;
//如果S[7]对外连通,其指向在前面几行代码中没被改变,需要保留S[0]
P[idx][idy].selsete[1] = -10;
//如果S[7]对外不连通,其指向会在前面几行代码中改变,需要清除S[0] ,负值代
表清除
P[idx][idy].S[0].next_s *=P[idx][idy].selsete[P[idx][idy].selsete[3]];
//做出选择运算,
P[idx][idy].selsete[3] = !(P[idx][idy].S[6].next_s-7); //如果指向7,则说
明S[6]对外不联通
P[idx][idy].selsete[0] = P[idx][idy].S[6].next_x;
P[idx][idy].selsete[1] = P[idx][idy].S[7].next_x;
P[idx][idy].S[6].next_x = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[6].next_y;
P[idx][idy].selsete[1] = P[idx][idy].S[7].next_y;
P[idx][idy].S[6].next_y = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[6].next_s;
P[idx][idy].selsete[1] = P[idx][idy].S[7].next_s;
P[idx][idy].S[6].next_s = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = 1;
P[idx][idy].selsete[1] = -10;
P[idx][idy].S[7].next_s *=P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3] = !(P[idx][idy].S[5].next_s-6); //如果指向6,则说
明S[5]对外不联通
P[idx][idy].selsete[0] = P[idx][idy].S[5].next_x;
P[idx][idy].selsete[1] = P[idx][idy].S[6].next_x;
P[idx][idy].S[5].next_x = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[5].next_y;
P[idx][idy].selsete[1] = P[idx][idy].S[6].next_y;
P[idx][idy].S[5].next_y = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[5].next_s;
P[idx][idy].selsete[1] = P[idx][idy].S[6].next_s;
P[idx][idy].S[5].next_s = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = 1;
P[idx][idy].selsete[1] = -10;
P[idx][idy].S[6].next_s *=P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3] = !(P[idx][idy].S[4].next_s-5); //如果指向5,则说
明S[4]对外不联通
P[idx][idy].selsete[0] = P[idx][idy].S[4].next_x;
P[idx][idy].selsete[1] = P[idx][idy].S[5].next_x;
P[idx][idy].S[4].next_x = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[4].next_y;
P[idx][idy].selsete[1] = P[idx][idy].S[5].next_y;
P[idx][idy].S[4].next_y = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[4].next_s;
P[idx][idy].selsete[1] = P[idx][idy].S[5].next_s;
P[idx][idy].S[4].next_s = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = 1;
P[idx][idy].selsete[1] = -10;
P[idx][idy].S[5].next_s *=P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3] = !(P[idx][idy].S[3].next_s-4); //如果指向4,则说
明S[3]对外不联通
P[idx][idy].selsete[0] = P[idx][idy].S[3].next_x;
P[idx][idy].selsete[1] = P[idx][idy].S[4].next_x;
P[idx][idy].S[3].next_x = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[3].next_y;
P[idx][idy].selsete[1] = P[idx][idy].S[4].next_y;
P[idx][idy].S[3].next_y = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[3].next_s;
P[idx][idy].selsete[1] = P[idx][idy].S[4].next_s;
P[idx][idy].S[3].next_s = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = 1;
P[idx][idy].selsete[1] = -10;
P[idx][idy].S[4].next_s *=P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3] = !(P[idx][idy].S[2].next_s-3); //如果指向3,则说
明S[2]对外不联通
P[idx][idy].selsete[0] = P[idx][idy].S[2].next_x;
P[idx][idy].selsete[1] = P[idx][idy].S[3].next_x;
P[idx][idy].S[2].next_x = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[2].next_y;
P[idx][idy].selsete[1] = P[idx][idy].S[3].next_y;
P[idx][idy].S[2].next_y = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[2].next_s;
P[idx][idy].selsete[1] = P[idx][idy].S[3].next_s;
P[idx][idy].S[2].next_s = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = 1;
P[idx][idy].selsete[1] = -10;
P[idx][idy].S[3].next_s *=P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3] = !(P[idx][idy].S[1].next_s-2); //如果指向2,则说
明S[1]对外不联通
P[idx][idy].selsete[0] = P[idx][idy].S[1].next_x;
P[idx][idy].selsete[1] = P[idx][idy].S[2].next_x;
P[idx][idy].S[1].next_x = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[1].next_y;
P[idx][idy].selsete[1] = P[idx][idy].S[2].next_y;
P[idx][idy].S[1].next_y = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[1].next_s;
P[idx][idy].selsete[1] = P[idx][idy].S[2].next_s;
P[idx][idy].S[1].next_s = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = 1;
P[idx][idy].selsete[1] = -10;
P[idx][idy].S[2].next_s *=P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[3] = !(P[idx][idy].S[0].next_s-1); //如果指向1,则说
明S[0]对外不联通
P[idx][idy].selsete[0] = P[idx][idy].S[0].next_x;
P[idx][idy].selsete[1] = P[idx][idy].S[1].next_x;
P[idx][idy].S[0].next_x = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[0].next_y;
P[idx][idy].selsete[1] = P[idx][idy].S[1].next_y;
P[idx][idy].S[0].next_y = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = P[idx][idy].S[0].next_s;
P[idx][idy].selsete[1] = P[idx][idy].S[1].next_s;
P[idx][idy].S[0].next_s = P[idx][idy].selsete[P[idx][idy].selsete[3]];
P[idx][idy].selsete[0] = 1;
P[idx][idy].selsete[1] = -10;
P[idx][idy].S[1].next_s *=P[idx][idy].selsete[P[idx][idy].selsete[3]];
}。
本发明提供的一种图像轮廓有序点集提取方法,是一种方法发明,它可以通过CPU、GPU、MCU、DSP、FPGA等计算机硬件来实现。
根据发明内容说明和实施实例可知,本发明的典型实施实例并不是对本发明的限定,任何利用本发明提出的逻辑拓扑结构,并依照本发明提出的碎点连接方法进行碎点连接的图像轮廓有序点集提取方法,都应属于本发明的范畴。
Claims (3)
1.一种图像轮廓有序点集提取方法,其特征在于:用于计算机图像轮廓有序点集提取;基于一种逻辑拓扑结构,每个点 对应八个碎点,一个碎点代表点的一个联通方向;将所有碎点进行连接,其方法是,如果一 个碎点对应联通方向达到联通条件,则将碎点指向对应联通方向的碎点的时针方向上的下 一个碎点,否则将其指向本点的时针方向上的下一个碎点;所述的时针方向 对所有的点都是统一的。
2.如权利要求1所述的一种图像轮廓有序点集提取方法,其特征在于:所述的时针方向为顺时针。
3.如权利要求1所述的一种图像轮廓有序点集提取方法,其特征在于:所述的时针方向为逆时针。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710172510.0A CN106960209B (zh) | 2013-10-30 | 2013-10-30 | 一种图像轮廓有序点集提取方法 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710172510.0A CN106960209B (zh) | 2013-10-30 | 2013-10-30 | 一种图像轮廓有序点集提取方法 |
CN201310522543.5A CN103530639B (zh) | 2013-10-30 | 2013-10-30 | 一种图像轮廓有序点集提取方法 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310522543.5A Division CN103530639B (zh) | 2013-10-30 | 2013-10-30 | 一种图像轮廓有序点集提取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106960209A CN106960209A (zh) | 2017-07-18 |
CN106960209B true CN106960209B (zh) | 2020-08-14 |
Family
ID=49932636
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310522543.5A Expired - Fee Related CN103530639B (zh) | 2013-10-30 | 2013-10-30 | 一种图像轮廓有序点集提取方法 |
CN201710172510.0A Active CN106960209B (zh) | 2013-10-30 | 2013-10-30 | 一种图像轮廓有序点集提取方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310522543.5A Expired - Fee Related CN103530639B (zh) | 2013-10-30 | 2013-10-30 | 一种图像轮廓有序点集提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN103530639B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103530639B (zh) * | 2013-10-30 | 2017-10-31 | 湖南轻创科技有限公司 | 一种图像轮廓有序点集提取方法 |
CN107818539B (zh) * | 2017-10-23 | 2021-04-23 | 湖南轻创科技有限公司 | 图像轮廓数据结构的转换模版的构造方法 |
CN107704861B (zh) * | 2017-10-23 | 2021-07-27 | 九竹物联技术有限公司 | 用于计算机视觉***的图像轮廓数据结构的转换模版的构造方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020191812A1 (en) * | 2001-04-24 | 2002-12-19 | Nam-Deuk Kim | Object edge watermarking |
CN100407231C (zh) * | 2004-06-10 | 2008-07-30 | 中国煤炭地质总局航测遥感局 | 用于图像转图形中边界线追踪的优化方法 |
CN101119429A (zh) * | 2006-08-01 | 2008-02-06 | 北京北大方正电子有限公司 | 一种数字水印嵌入与提取的方法及装置 |
CN100380406C (zh) * | 2006-12-29 | 2008-04-09 | 四川大学 | 放射治疗计划***中获得三维解剖结构投影轮廓线的方法 |
CN100520811C (zh) * | 2007-07-11 | 2009-07-29 | 苏州大学 | 一种数字图像轮廓形态的识别方法 |
CN101520851A (zh) * | 2008-02-29 | 2009-09-02 | 富士通株式会社 | 字符信息识别装置和方法 |
CN101414358B (zh) * | 2008-11-18 | 2011-03-16 | 广东威创视讯科技股份有限公司 | 一种基于定向搜索的染色体轮廓检测和提取方法 |
US8238658B2 (en) * | 2009-01-21 | 2012-08-07 | The United States Of America, As Represented By The Secretary Of The Navy | Boundary extraction method |
CN102270299B (zh) * | 2011-08-24 | 2013-06-12 | 复旦大学 | 由断点出发可并行实现的边缘连接算法 |
US8873865B2 (en) * | 2011-10-10 | 2014-10-28 | Qualcomm Incorporated | Algorithm for FAST corner detection |
CN103268384B (zh) * | 2013-06-01 | 2016-02-17 | 哈尔滨工业大学 | 一种有序提取结构轮廓的方法 |
CN103353991B (zh) * | 2013-06-24 | 2016-02-24 | 西安交通大学 | 一种轮廓片段的迭代解析生成方法 |
CN103530639B (zh) * | 2013-10-30 | 2017-10-31 | 湖南轻创科技有限公司 | 一种图像轮廓有序点集提取方法 |
-
2013
- 2013-10-30 CN CN201310522543.5A patent/CN103530639B/zh not_active Expired - Fee Related
- 2013-10-30 CN CN201710172510.0A patent/CN106960209B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN106960209A (zh) | 2017-07-18 |
CN103530639B (zh) | 2017-10-31 |
CN103530639A (zh) | 2014-01-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106910176B (zh) | 一种基于深度学习的人脸图像去遮挡方法 | |
Wu et al. | Deep image: Scaling up image recognition | |
CN106960209B (zh) | 一种图像轮廓有序点集提取方法 | |
Wang et al. | Haze concentration adaptive network for image dehazing | |
CN111047522B (zh) | 一种基于边缘生成的图像修复方法 | |
CN110163813A (zh) | 一种图像去雨方法、装置、可读存储介质及终端设备 | |
JP6493163B2 (ja) | 粗密探索方法および画像処理装置 | |
CN102064977A (zh) | 基于gpu的高速网络报文内容检测方法 | |
CN104182719A (zh) | 一种图像识别方法及装置 | |
CN109377459A (zh) | 一种生成式对抗网络的超分辨率去模糊方法 | |
CN104375838A (zh) | 一种基于OpenMP对天文学软件Gridding的优化方法 | |
CN107610210A (zh) | 骨骼动画***优化方法、装置及骨骼动画*** | |
CN101937577A (zh) | 生成具有边界像素超采样效果的阴影的方法 | |
CN113642581A (zh) | 基于编码多路径语义交叉网络的图像语义分割方法及*** | |
CN106503345B (zh) | 一种蓝印花布纹样设计方法 | |
CN115039076A (zh) | 无障碍和无围栏共享存储器同步 | |
CN116778346A (zh) | 一种基于改进自注意力机制的管线识别方法及*** | |
CN107025664A (zh) | 基于并行计算的国产遥感卫星快速配准方法 | |
DE102018128592A1 (de) | Erzeugen eines Bilds unter Verwendung einer Map, die verschiedene Klassen von Pixeln repräsentiert | |
CN114881103A (zh) | 一种基于通用扰动贴纸的对抗样本检测方法及装置 | |
CN112348042B (zh) | 一种基于改进YOLOv3的红外目标检测方法 | |
CN112099850A (zh) | 一种多核Hourglass网络加速方法 | |
Görür et al. | Improving the performance of optimistic time management mechanism with sub-state saving. | |
CN110110722A (zh) | 一种基于深度学习模型识别结果的区域检测修正方法 | |
CN109840926A (zh) | 一种图像生成方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB03 | Change of inventor or designer information | ||
CB03 | Change of inventor or designer information |
Inventor after: Jiang Qing Inventor after: Liu Wei Inventor before: Liu Wei |
|
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200717 Address after: 200050 room 217-5, No. 1158 Xiehe Road, Changning District, Shanghai Applicant after: HAODE TECH Co.,Ltd. Address before: 410600 Hunan province Changsha city Ningxiang County Shuang Fu Pu Zhen Su Xi Cun Xian Chong Li group Applicant before: Liu Wei |
|
GR01 | Patent grant | ||
GR01 | Patent grant |