CN101751665A - 检测当前像素是否位于多边形中的方法和系统 - Google Patents
检测当前像素是否位于多边形中的方法和系统 Download PDFInfo
- Publication number
- CN101751665A CN101751665A CN200810184068A CN200810184068A CN101751665A CN 101751665 A CN101751665 A CN 101751665A CN 200810184068 A CN200810184068 A CN 200810184068A CN 200810184068 A CN200810184068 A CN 200810184068A CN 101751665 A CN101751665 A CN 101751665A
- Authority
- CN
- China
- Prior art keywords
- current pixel
- polygon
- intersection edges
- polygonal
- limit
- 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.)
- Granted
Links
Images
Landscapes
- Image Analysis (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种检测当前像素是否位于多边形中的方法和系统。其中,该检测当前像素是否位于多边形中的方法包括以下步骤:获取当前像素所在扫描线与多边形的相交边;将相交边两两配对为多对配对相交边;计算当前像素位于多少对配对相交边之间;以及如果当前像素位于奇数对配对相交边之间,则判定当前像素位于多边形中,否则判定当前像素位于多边形外。本发明适用于凸多边形、凹多边形以及带有多边形孔的复杂多边形;并且本发明的方法简单,过程模块化强,容易硬件实现。
Description
技术领域
本发明涉及图形处理领域,更具体地涉及一种检测当前像素是否位于多边形中的方法和系统。
背景技术
在计算机图形学中,多边形(包括凸多边形、凹多边形、以及包含多边形孔的多边形)栅格化可以不通过三角化来进行。这是因为三角化常常需要太多的计算负担,没有简单的算法来将一个多边形(尤其是凸多边形和包含孔以及自相交的复杂多边形)分为三角形。
使用扫描线来对多边形进行栅格化(而不使用三角化)对于栅格显示是一个直接途径。在每条扫描线上,需要判断当前像素是否包含在多边形中,如果是,则需要对此像素进行描画。
对于检测当前像素是否在多边形中,存在很多方法。最著名的是Jordan曲线理论:对于从当前像素出发的任何射线,如果此射线与多边形相交的数目为奇数,那么此像素位于多边形中。另一个比较常用的方法是检测当前像素相对于所有多边形边的边方程值,如果相对于凸边的边方程值都是正,并且相对于凹边的边方程值也为正,那么此像素就位于多边形中。另外一个方法是检测当前像素与多边形顶点组成的符号角之和,如果其为零,那么像素在多边形外,否则在多边形中。
然而,上述方法在实际图形产品中不太容易使用硬件实现,效率也不高。具体地,在Jordan曲线理论中,计算当前像素的射线与多边形相交的计算量巨大,且不容易使用硬件实现射线的方法;在检测所有多边形边方程值的方法中,当多边形边的数目很大时,此方法的性能大大降低;在计算符号角的方法中,需要大量计算角度的数学运算,硬件上不容易实现,同时,当计算带有多边形孔的复杂多边形时,算法变得很复杂。
发明内容
鉴于以上所述的一个或多个问题,本发明提供了一种检测当前像素是否位于多边形中的方法和系统。
根据本发明实施例的检测当前像素是否位于多边形中的方法,包括以下步骤:获取当前像素所在扫描线与多边形的相交边;将相交边两两配对为多对配对相交边;计算当前像素位于多少对配对相交边之间;以及如果当前像素位于奇数对配对相交边之间,则判定当前像素位于多边形中,否则判定当前像素位于多边形外。
根据本发明实施例的检测当前像素是否位于多边形中的系统,包括:相交边获取单元,用于获取当前像素所在扫描线与多边形的相交边;相交边配对单元,用于将相交边两两配对为多对配对相交边;中间性计算单元,用于计算当前像素位于多少对配对相交边之间;以及像素位置判定单元,用于在当前像素位于奇数对配对相交边之间的情况下,判定当前像素位于多边形中,在当前像素位于偶数对配对相交边之间的情况下,判定当前像素位于多边形外。
本发明适用于凸多边形、凹多边形以及带有多边形孔的复杂多边形;并且本发明的方法简单,过程模块化强,容易硬件实现。另外,在本发明中,在每行扫描之前使用相交边获取单元计算相交边,与每一行的像素步进无关,扫描性能不会随多边形边数目的增加而降低;在中间性计算单元中,像素在扫描线上的步进可以使用加法来计算边方程值,简单而高效;并且奇数为内、偶数为外的奇数中间性规则简化了系统的实现。
附图说明
图1是应用了根据本发明实施例的检测当前像素是否位于多边形中的方法/系统的多边形栅格化系统的工作原理的示意性框图;
图2是根据本发明实施例的检测当前像素是否位于多边形中的方法的简要流程图;
图3是根据本发明实施例的检测当前像素是否位于多边形中的方法的详细流程图;
图4是根据本发明实施例的获取当前像素所在扫描线与多边形的相交边的过程的详细流程图;
图5是应用左上规则来判定是否描画当前像素的原理示意图;
图6是应用了根据本发明实施例的检测当前像素是否位于多边形中的方法/系统的多边形栅格化系统的硬件模块示意图;
图7是应用根据本发明实施例的检测当前像素是否位于多边形中的方法/系统来判断当前像素相对于包含多边形孔的凹多边形的位置的示意图;
图8是根据本发明实施例的将相交边两两配对的过程的示意图;
图9是扫描线上的当前像素相对于多边形的相交边的三种位置的示意图;
图10是根据本发明实施例的奇数中间性规则的一个示例的示意图;
图11至图16是用于说明根据本发明实施例的奇数中间性规则的各种多边形与当前像素之间的相对位置关系的示意图。
具体实施方式
本发明提供了一种检测当前像素是否位于多边形中的方法和系统。其中,在根据本发明实施例的检测当前像素是否位于多边形中的方法和系统中,应用了奇数中间性规则。该奇数中间性规则的内容在于:将与当前像素所在的扫描线相交的多边形边两两配对为多对配对相交边,如果当前像素位于奇数对配对相交边之间,则判定当前像素位于多边形中,否则判定当前像素位于多边形外。
图1是应用了根据本发明实施例的检测当前像素是否位于多边形中的方法/系统的多边形栅格化系统的工作原理的示意性框图。在图1所示的多边形栅格化系统中,按照不同的顺序对多边形顶点以及多边形孔的顶点进行排序。例如,如果多边形顶点是顺时针计数的,那么多边形孔的顶点就是按逆时针计数的,反过来也是如此。在找到第一条扫描线之后,按照扫描线的顺序逐行计算扫描线与多边形和/或多边形孔的相交边。其中,可以通过对扫描线的Y轴坐标值与多边形和/或多边形孔的顶点的Y轴坐标值进行比较来找出相交边,而不需要计算相交点,所以可以避免除法运算。然后,将每两条相交边配对为一对配对相交边,以计算配对相交边中间性的数目。其中,使用多边形的边方程值来进行当前像素的中间性的计算。然后,将计算出的中间性的信息输入到检测模块,用来判断当前扫描线的像素是否在多边形内。如果是,则将这些像素送入描画模块和输入的参数一起进行渲染;否则该多边形栅格化系统移到下一条扫描线进行以上所述的过程。
图2是根据本发明实施例的检测当前像素是否位于多边形中的方法的简要流程图。如图2所示,该检测当前像素是否位于多边形中的方法包括以下步骤:S202,获取当前像素所在扫描线与多边形的相交边;S204,将相交边两两配对为多对配对相交边;S206,计算当前像素位于多少对配对相交边之间;以及S208,如果当前像素位于奇数对配对相交边之间,则判定当前像素位于多边形中,否则判定当前像素位于多边形外。
具体地,可以通过将当前像素所在扫描线的Y轴坐标值与多边形的顶点的Y轴坐标值进行比较来获取当前像素所在扫描线与多边形的相交边。如果当前像素所在扫描线的Y轴坐标值介于多边形的任意两个相邻顶点的Y轴坐标值之间,则判定该任意两个相邻顶点所在的多边形边为当前像素所在扫描线与多边形的相交边。可以通过计算当前像素相对于配对相交边中的每条相交边的边方程值来判定当前像素是否位于配对相交边之间。如果当前像素相对于配对相交边中的每条相交边的边方程值都为正或者都为负,则判定当前像素位于配对相交边之间。如果当前像素相对于配对相交边中的一条相交边的边方程值为零,则判定当前像素位于该配对相交边中的该一条相交边上。
如果当前像素所在扫描线的Y轴坐标值等于多边形的任意两个相邻顶点的Y轴坐标值或者等于多边形的任意一个或多个顶点的Y轴坐标值,则判定当前像素所在扫描线通过多边形的该任意两个相邻顶点所在的多边形边或通过多边形的该任意一个或多个顶点。如果当前像素相对于该任意两个相邻顶点所在的多边形边或者该任意一个或多个顶点所在的多边形边的边方程值为零,则判定当前像素在该任意两个相邻顶点所在的多边形边上或者该任意一个或多个顶点所在的多边形边上。如果当前像素位于多边形的左上侧边上,则判定当前像素位于多边形中,如果当前像素位于多边形的右下侧边上,则判定当前像素位于多边形外。
当多边形为包含多边形孔的多边形时,通过将当前像素所在扫描线的Y轴坐标值与多边形孔的顶点的Y轴坐标值进行比较来获取当前像素所在扫描线与多边形孔的相交边。如果当前像素所在扫描线的Y轴坐标值等于多边形孔的任意两个相邻顶点的Y轴坐标值或者等于多边形孔的任意一个或多个顶点的Y轴坐标值,则判定当前像素所在扫描线通过多边形孔的该任意两个相邻顶点所在的多边形孔边或通过多边形孔的该任意一个或多个顶点。如果当前像素相对于该任意两个相邻顶点所在的多边形孔边或者该任意一个或多个顶点所在的多边形孔边的边方程值为零,则判定当前像素在该任意两个相邻顶点所在的多边形孔边上或者该任意一个或多个顶点所在的多边形孔边上。如果当前像素位于多边形孔的右下侧边上,则判定当前像素位于多边形中,如果当前像素位于所述多边形孔的左下侧边上,则判定当前像素位于所述多边形外。
图3是根据本发明实施例的检测当前像素是否位于多边形中的方法的详细流程图。如图3所示,在步骤S302中,将输入的顶点分为两个类型:多边形的顶点和多边形孔的顶点,他们分别存储于数组V[n]和HV[m]。其中,n是多边形的顶点的数目,m是多边形孔的顶点的数目。在步骤S304中,确定起始扫描线。通常,为了扫描多边形,需要创建一个边界框,那么起始扫描线就是该边界框中的最上面的扫描线yi=y0。
接着,对于每一条扫描线yi,在计算其与多边形的相交边(步骤S306)以及将其的相交边两两配对(步骤S308)之后,沿着当前扫描线按像素对多边形进行处理。对于每两条配对的相交边,首先判断当前像素(xi,yi)相对于该两条配对的相交边中的一条的边方程值e是否为零(步骤S310)。如果是,则使用左上规则来检测当前像素是否在多边形中(步骤S312);如果不是,则判断当前像素相对于两条配对的相交边的边方程值是否都为正或者都为负(步骤S314),如果是,则表明当前像素在该两条配对的相交边之间(称为中间性),并且中间性的数目betw加一(步骤S316)。
对于扫描线穿过的多边形或多边形孔的边(存储在ee数组中),逐个进行判断,如果当前像素的边方程值为0(步骤S318),则根据左上规则来确定它是否位于多边形中;如果不为0,则忽略。如果当前扫描线没有到达边界框的右边(xmax),则沿扫描线方向步进一个像素;否则转移到下一个扫描线上,直到边界框的下边(ymax)。
图4是根据本发明实施例的获取当前像素所在扫描线与多边形的相交边的过程的详细流程图。如图4所示,该过程包含两大部分:一部分用于多边形边,一部分用于多边形孔的边。首先,输入扫描线yi、多边形的顶点V[n]、以及多边形孔的顶点HV[m](步骤406)。在每一部分中,首先要检查yi是否介于V[u].y(V[u].y表示多边形的顶点V[u]的Y轴坐标值,下面的类似符号表示类似的意思)和V[u+1].y之间(步骤S408)以及是否介于HV[u].y(HV[u].y表示多边形孔的顶点HV[u]的Y轴坐标值,下面的类似符号表示类似的意思)和HV[u+1].y之间(步骤S410)。如果是,则将V[u]和V[u+1]所在的边、和HV[u]和HV[u+1]所在的边的计数号码存储于数组e[p]中(步骤S412和步骤S414);如果不是,则检查扫描线是否穿过多边形或者多边形孔的顶点或边,这是通过分别判断yi是否等于V[u].y或者V[u+1].y,以及HV[u].y或者HV[u+1].y,或者两者的全部来实现的(步骤S416和步骤S418)。如果扫描线穿过多边形和/或多边形孔的顶点和/或边,则将该边和/或该顶点所在的边的计数号存储在数组ee[q]中(步骤S420和步骤S422)。最后,输出数组e[p]和ee[p](步骤424)。
在计算数组e[p]中的配对边的中间性数目之后,通过扫描数组ee[q]来判断当前像素相对于ee[q]中的这些边的边方程值是否为零。如果是,则通过左上规则来完成是否在多边形中的检测。
图5是应用左上规则来判定是否描画当前像素的原理示意图。如图5所示,对于任意一条边,其边方程为e(xi,yi)=a*xi+b*yi+c,这里系数a、b以及c可以通过计算边顶点的坐标来获得。对于多边形边i,这些系数表示为a[i]、b[i]和c[i];对于多边形孔的边j,这些系数表示为a[j]、b[j]和c[j]。多边形的左上方边(边502、504、506和508)为描画,多边形孔的右下方边(边510、512和514)也为描画,其他边为不描画。描画的表示在多边形之内,否则在多边形之外。描画的多边形边的条件为a[i]>0或者a[i]==0 & & b[i]>0,描画的多边形孔的边的条件为a[j]>0或者a[j]==0 & & b[j]<0。
图6是应用了根据本发明实施例的检测当前像素是否位于多边形中的方法/系统的多边形栅格化系统的硬件模块示意图。如图6所示,计算边方程系数的模块利用顶点缓存中的顶点信息计算得到边方程系数,计算相交边的模块同时也从顶点缓存中读取顶点信息。相交边的系数和计数号码存储在内存中,用于计算中间性数目的模块进行的计算。通过检测规则(左上规则以及奇数中间性规则)检测的结果送入描画模块。
图7是应用根据本发明实施例的检测当前像素是否位于多边形中的方法/系统来判断当前像素相对于包含多边形孔的凹多边形的位置的示意图。图7示出了一个包含多边形孔的凹多边形,该凹多边形也包含扫描线。其中,多边形的顶点V[i]按顺时针计数,多边形孔的顶点HV[j]按逆时针计数。如果V[i].y<yi<V[i+1].y或者HV[j]<yi<HV[j+1].y,则扫描线yi将与多边形边V[i]V[i+1]相交或者与多边形孔的边HV[j]HV[j+1]相交(如图7中的虚线702)。如果yi==V[i].y或者yi==V[i+1].y,则扫描线yi将穿过多边形顶点V[i](如图7中的虚线704),这对于多边形孔是一样的。如果V[i].y==yi=V[i+1].y或者HV[i].y==yi==HV[i+1].y,则扫描线将分别穿过边V[i]V[i+1]或者HV[i]HV[i+1](如图7中的虚线706)。在本实施例中,不把这些穿过的情况看作是相交,所以使用左上规则来对穿过情况下的扫描线上的像素进行检测。相交边的计数号码存储于数组e[p]中,穿过情况中的边计数号码存储于数组ee[q]中。
从Jordan曲线理论可知,相交边的数目永远为偶数。因此,可以将相交边两两配对。图8是根据本发明实施例的将相交边两两配对的过程的示意图。其中,E用于计数原始的边号码。如图8所示,包含多边形孔的凹多边形的顶点按顺时针计数,被包含的多边形孔的顶点按逆时针计数。每个边的号码记录为此边的第一个顶点的号码,相交边画为粗实线。根据边号码和计算的顺序,图8中的配对边为[E0,E3]、[E4,E6]、[E7,E8]、[E9,E12]、[E15,E16]以及[E17,E18]。这里,多边形孔边的号码紧跟多边形边的号码计数。在实际运用中,一般将配对边的号码按顺序存储于数组e[p]中,所以不需要显式地进行配对操作,只要将e[i]和e[i+1]看作一对即可。
对于每一对配对边,扫描线上的当前像素具有三种位置:中间(中间性)、一侧(一侧性)、或者在配对边上,如图9所示。如果当前像素相对于一对配对边的边方程值都为正或者都为负,则当前像素在该对配对边的中间;如果一个为正一个为负,则当前像素在该对配对边的某条相交边的一侧;如果至少一个为零,此则当前像素在该对配对边的某条相交边上。同时,对于同一个多边形,根据不同的起始边号码,也有两种配对组合。例如,如图9中所示,配对边组合可以为[e0,e1]、[e2,e3]以及[e4,e5],也可以为[e5,e0]、[e1,e2]以及[e3,e4]。在第一种组合中,p0在所有配对边的一侧,p1在配对边[e2,e3]的中间,p2在配对边[e4,e5]中的相交边e4上。在第二种组合中,p0在配对边[e0,e1]和[e4,e5]中间,p1在配对边[e4,e5]中间并在其他配对边的一侧,p2在配对边[e2,e3]中上。其中,在配对边中间的像素相对于配对边的边方程值既可以都为正,也可以都为负。虽然有两种组合方式,他们不会影响奇数中间性规则。
本发明中应用了奇数中间性规则来检测当前像素与多边形之间的相对位置关系。奇数中间性规则表明,如果某像素的中间性数目为奇数,则此像素就在多边形中。图10示出了奇数中间性规则的一个示例。在图10所示的示例中,配对相交边为[e0,e1]、[e2,e3]、[e4,e5]、[e6,e7]、[e8,e9]和e[10,e11]。对于像素p0,中间性的数目为1,它位于多边形中;同样,根据奇数中间性规则,可以得到:p1的中间性数目为2,不位于多边形中;p2的中间性数目为3,位于多边形中;p3的中间性数目为3,位于多边形中;以及p4的中间性数目为4,不位于多边形中。
下面,对上述方法和系统中应用的奇数中间性规则进行证明。具体地,这里使用归纳法来证明奇数中间性规则。
这里,将多边形凹顶点的数目记为k,将多边形孔的凹点数目记为q。
第一步:对于任何不包含多边形孔的凸多边形(k=0),如图11所示,只存在两条相交边(图11中的边1103、1104),如果当前像素p(图11中的像素1101、1102)的中间性数目为1,那么该当前像素在多边形中。
对于任何包含一个凸多边形孔的凸多边形(k=0,q=0),如图12所示,对于凸多边形来说只存在两条相交边(图12中的边1201、1206),同时对于凸多边形孔来说也只存在两条相交边(图12中的边1202、1207)。对于多边形中的像素点p0(图12中的点1203、1208)来说,中间性的数目永远是1;对于多边形孔中的像素p1(图12中的点1204、1209)来说,中间性的数目永远是2;对于多边形外的像素点p2(图12中的点1205、1210)来说,中间性的数目永远是0。
对于任何具有m个凸多边形孔的凸多边形来说(k=0,q=0),如图13所示,存在最多2+m*2条相交边。对于在多边形中但是不在多边形孔之间的像素p0(图13中的点1301)来说,并且对于在多边形中而且也在多边形孔之间的像素p2(图13中的点1303)来说,中间性的数目永远是1;对于多边形孔中的像素p1(图13中的点1302)来说,中间性的数目永远是2;对于多边形外的像素p3(图13中的点1304)来说,中间性的数目永远是0。
由以上所述可见,奇数中间性规则对于k=0和q=0成立。
第二步:对于k=1的凹多边形,如图14所示,存在两种情况:情况1,扫描线穿过凹部分(图14中的1401),情况2:扫描线不穿过凹部分(图14中的1402)。对于情况1中的任何像素p,中间性的数目是0、1或者2;如果是1,则像素在多边形中。对于情况2中的任何像素p,中间性的数目是0或者1,如果是1,则像素在多边形中。
对于k=1并且q=1的包含一个凹多边形孔的凹多边形,如图15所示,对于在多边形中的像素(例如,图15中的点1501),因为它们总是在凹多边形孔的外面,所以根据k=1的规则,中间性的数目永远加0或者2,这里0或者2是当q=1时在凹多边形孔之外的像素的中间性数目。对于凹多边形孔中间的像素(例如,图15中的点1502),根据k=1的规则,中间性数目将加1(变成2)。
由以上所述可见,奇数中间性规则对于k=1和q=1成立。
第三步:假定奇数中间性规则当k=i-1,i<=k,以及q=j-1,j<=k时成立。
第四步:考虑k=i以及q=j。
首先考虑k=i。对于具有n个顶点的任何凹多边形,它具有最多n-2个凹点,并具有一个对应的n顶点凸多边形。通过将一个凸点变成凹点,一个具有j个凹点的凹多边形A可以从一个具有j-1个凹点的凹多边形生成,如图16所示。并且,从一条边产生一个凹点也具有相同的效果。
经过上述处理后,从按顺序排号的多边形B中的相交边,一对新的相交边在三角形V2V3’V4中删除了,它插入了三角形V2V3V4。对于多边形A中三角形V2V3’V4中的像素,中间性的数目减1,根据第3步,此数目将变成偶数,此像素不在多边形中。对于其他像素,中间性的数目不会改变,因此它们与多边形B的判断方式相同,这已经在第三步中证明过了。
这个增加凹点的过程同样对于q=j也实用。然而,我们只考虑在凹多边形之外的像素的中间性数目,根据上述已证明规则,它将永远为偶数。最后,我们考虑k=i和q=j,对于具有凹多边形孔的凹多边形中的像素,中间性的数目将是原来凹多边形相同像素的中间性数目(奇数)加上插入的凹多边形孔之外同样位置像素的中间性数目(偶数),因此结果永远为奇数。
由以上所述可见,奇数中间性规则对于k=i和q=j成立。
综上所述,本发明适用于凸多边形、凹多边形以及带有多边形孔的复杂多边形;并且本发明的方法简单,过程模块化强,容易硬件实现。另外,在本发明中,在每行扫描之前使用相交边获取单元计算相交边,与每一行的像素步进无关,扫描性能不会随多边形边数目的增加而降低;在中间性计算单元中,像素在扫描线上的步进可以使用加法来计算边方程值,简单而高效;并且奇数为内、偶数为外的奇数中间性规则简化了系统的实现。
本领域技术人员将理解,还存在可用于实现本发明实施例的更多可选实施方式和改进方式,并且上述实施方式和示例仅是一个或多个实施例的说明。因此,本发明的范围仅由所附权利要求书限制。
Claims (26)
1.一种检测当前像素是否位于多边形中的方法,其特征在于,包括以下步骤:
获取当前像素所在扫描线与多边形的相交边;
将所述相交边两两配对为多对配对相交边;
计算所述当前像素位于多少对所述配对相交边之间;以及
如果所述当前像素位于奇数对所述配对相交边之间,则判定所述当前像素位于所述多边形中,否则判定所述当前像素位于所述多边形外。
2.根据权利要求1所述的检测当前像素是否位于多边形中的方法,其特征在于,通过将所述当前像素所在扫描线的Y轴坐标值与所述多边形的顶点的Y轴坐标值进行比较来获取所述当前像素所在扫描线与所述多边形的相交边。
3.根据权利要求2所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素所在扫描线的Y轴坐标值介于所述多边形的任意两个相邻顶点的Y轴坐标值之间,则判定所述任意两个相邻顶点所在的多边形边为所述当前像素所在扫描线与所述多边形的相交边。
4.根据权利要求3所述的检测当前像素是否位于多边形中的方法,其特征在于,通过计算所述当前像素相对于所述配对相交边中的每条相交边的边方程值来判定所述当前像素是否位于所述配对相交边之间。
5.根据权利要求3所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素相对于所述配对相交边中的每条相交边的边方程值都为正或者都为负,则判定所述当前像素位于所述配对相交边之间。
6.根据权利要求3所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素相对于所述配对相交边中的一条相交边的边方程值为零,则判定所述当前像素位于所述配对相交边中的一条相交边上。
7.根据权利要求2所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素所在扫描线的Y轴坐标值等于所述多边形的任意两个相邻顶点的Y轴坐标值或者等于所述多边形的任意一个或多个顶点的Y轴坐标值,则判定所述当前像素所在扫描线通过所述多边形的任意两个相邻顶点所在的多边形边或通过所述多边形的任意一个或多个顶点。
8.根据权利要求7所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素相对于所述任意两个相邻顶点所在的多边形边或者所述任意一个或多个顶点所在的多边形边的边方程值为零,则判定所述当前像素在所述任意两个相邻顶点所在的多边形边上或者所述任意一个或多个顶点所在的多边形边上。
9.根据权利要求6或8所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素位于所述多边形的左上侧边上,则判定所述当前像素位于所述多边形中,如果所述当前像素位于所述多边形的右下侧边上,则判定所述当前像素位于所述多边形外。
10.根据权利要求1至8中任一项所述的检测当前像素是否位于多边形中的方法,其特征在于,当所述多边形为包含多边形孔的多边形时,通过将所述当前像素所在扫描线的Y轴坐标值与所述多边形孔的顶点的Y轴坐标值进行比较来获取所述当前像素所在扫描线与所述多边形孔的相交边。
11.根据权利要求10所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素所在扫描线的Y轴坐标值等于所述多边形孔的任意两个相邻顶点的Y轴坐标值或者等于所述多边形孔的任意一个或多个顶点的Y轴坐标值,则判定所述当前像素所在扫描线通过所述多边形孔的任意两个相邻顶点所在的多边形孔边或通过所述多边形孔的任意一个或多个顶点。
12.根据权利要求11所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素相对于所述任意两个相邻顶点所在的多边形孔边或者所述任意一个或多个顶点所在的多边形孔边的边方程值为零,则判定所述当前像素在所述任意两个相邻顶点所在的多边形孔边上或者所述任意一个或多个顶点所在的多边形孔边上。
13.根据权利要求12所述的检测当前像素是否位于多边形中的方法,其特征在于,如果所述当前像素位于所述多边形孔的右下侧边上,则判定所述当前像素位于所述多边形中,如果所述当前像素位于所述多边形孔的左上侧边上,则判定所述当前像素位于所述多边形外。
14.一种检测当前像素是否位于多边形中的系统,其特征在于,包括:
相交边获取单元,用于获取当前像素所在扫描线与多边形的相交边;
相交边配对单元,用于将所述相交边两两配对为多对配对相交边;
中间性计算单元,用于计算所述当前像素位于多少对所述配对相交边之间;以及
像素位置判定单元,用于在所述当前像素位于奇数对所述配对相交边之间的情况下,判定所述当前像素位于所述多边形中,在所述当前像素位于偶数对所述配对相交边之间的情况下,判定所述当前像素位于所述多边形外。
15.根据权利要求14所述的检测当前像素是否位于多边形中的系统,其特征在于,所述相交边获取单元通过将所述当前像素所在扫描线的Y轴坐标值与所述多边形的顶点的Y轴坐标值进行比较来获取所述当前像素所在扫描线与所述多边形的相交边。
16.根据权利要求15所述的检测当前像素是否位于多边形中的系统,其特征在于,所述相交边获取单元在所述当前像素所在扫描线的Y轴坐标值介于所述多边形的任意两个相邻顶点的Y轴坐标值之间的情况下,判定所述任意两个相邻顶点所在的多边形边为所述当前像素所在扫描线与所述多边形的相交边。
17.根据权利要求16所述的检测当前像素是否位于多边形中的系统,其特征在于,所述中间性计算单元通过计算所述当前像素相对于所述配对相交边中的每条相交边的边方程值来判定所述当前像素是否位于所述配对相交边之间。
18.根据权利要求16所述的检测当前像素是否位于多边形中的系统,其特征在于,所述中间性计算单元在所述当前像素相对于所述配对相交边中的每条相交边的边方程值都为正或者都为负的情况下,判定所述当前像素位于所述配对相交边之间。
19.根据权利要求16所述的检测当前像素是否位于多边形中的系统,其特征在于,所述像素位置判定单元在所述当前像素相对于所述配对相交边中的一条相交边的边方程值为零的情况下,判定所述当前像素位于所述配对相交边中的一条相交边上。
20.根据权利要求15所述的检测当前像素是否位于多边形中的系统,其特征在于,所述相交边获取单元在所述当前像素所在扫描线的Y轴坐标值等于所述多边形的任意两个相邻顶点的Y轴坐标值或者等于所述多边形的任意一个或多个顶点的Y轴坐标值的情况下,判定所述当前像素所在扫描线通过所述多边形的任意两个相邻顶点所在的多边形边或通过所述多边形的任意一个或多个顶点。
21.根据权利要求20所述的检测当前像素是否位于多边形中的系统,其特征在于,所述像素位置判定单元在所述当前像素相对于所述任意两个相邻顶点所在的多边形边或者所述任意一个或多个顶点所在的多边形边的边方程值为零的情况下,判定所述当前像素在所述任意两个相邻顶点所在的多边形边上或者所述任意一个或多个顶点所在的多边形边上。
22.根据权利要求19或21所述的检测当前像素是否位于多边形中的系统,其特征在于,所述像素位置判定单元在所述当前像素位于所述多边形的左上侧边上的情况下,判定所述当前像素位于所述多边形中,在所述当前像素位于所述多边形的右下侧边上的情况下,判定所述当前像素位于所述多边形外。
23.根据权利要求14至21中任一项所述的检测当前像素是否位于多边形中的系统,其特征在于,在所述多边形为包含多边形孔的多边形的情况下,所述相交边获取单元通过将所述当前像素所在扫描线的Y轴坐标值与所述多边形孔的顶点的Y轴坐标值进行比较来获取所述当前像素所在扫描线与所述多边形孔的相交边。
24.根据权利要求23所述的检测当前像素是否位于多边形中的系统,其特征在于,所述相交边获取单元在所述当前像素所在扫描线的Y轴坐标值等于所述多边形孔的任意两个相邻顶点的Y轴坐标值或者等于所述多边形孔的任意一个或多个顶点的Y轴坐标值的情况下,判定所述当前像素所在扫描线通过所述多边形孔的任意两个相邻顶点所在的多边形孔边或通过所述多边形孔的任意一个或多个顶点。
25.根据权利要求24所述的检测当前像素是否位于多边形中的系统,其特征在于,所述像素位置判定单元在所述当前像素相对于所述任意两个相邻顶点所在的多边形孔边或者所述任意一个或多个顶点所在的多边形孔边的边方程值为零的情况下,判定所述当前像素在所述任意两个相邻顶点所在的多边形孔边上或者所述任意一个或多个顶点所在的多边形孔边上。
26.根据权利要求25所述的检测当前像素是否位于多边形中的系统,其特征在于,所述像素位置判定单元在所述当前像素位于所述多边形孔的右下侧边上的情况下,判定所述当前像素位于所述多边形中,在所述当前像素位于所述多边形孔的左上侧边上的情况下,判定所述当前像素位于所述多边形外。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101840684A CN101751665B (zh) | 2008-12-15 | 2008-12-15 | 检测当前像素是否位于多边形中的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101840684A CN101751665B (zh) | 2008-12-15 | 2008-12-15 | 检测当前像素是否位于多边形中的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101751665A true CN101751665A (zh) | 2010-06-23 |
CN101751665B CN101751665B (zh) | 2013-02-27 |
Family
ID=42478610
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101840684A Expired - Fee Related CN101751665B (zh) | 2008-12-15 | 2008-12-15 | 检测当前像素是否位于多边形中的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101751665B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105869188A (zh) * | 2016-04-22 | 2016-08-17 | 广州日滨科技发展有限公司 | 点对多边形方位关系的检测方法和系统 |
CN106843633A (zh) * | 2016-12-01 | 2017-06-13 | 湖北荆楚网络科技股份有限公司 | 一种判断触点是否在不规则多边形内部的方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3139431B2 (ja) * | 1997-11-28 | 2001-02-26 | 日本電気株式会社 | 接続判定装置、方法及び記録媒体 |
GB2340006A (en) * | 1998-07-20 | 2000-02-09 | Sony Uk Ltd | Digital image processing |
JP4621617B2 (ja) * | 2006-03-28 | 2011-01-26 | 株式会社東芝 | 図形描画装置、図形描画方法、及びプログラム |
CN100524361C (zh) * | 2007-09-07 | 2009-08-05 | 中国科学院软件研究所 | 一种判断点是否位于多边形内的方法 |
-
2008
- 2008-12-15 CN CN2008101840684A patent/CN101751665B/zh not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105869188A (zh) * | 2016-04-22 | 2016-08-17 | 广州日滨科技发展有限公司 | 点对多边形方位关系的检测方法和系统 |
CN106843633A (zh) * | 2016-12-01 | 2017-06-13 | 湖北荆楚网络科技股份有限公司 | 一种判断触点是否在不规则多边形内部的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101751665B (zh) | 2013-02-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104346427B (zh) | 用于分析包括事件信息的图像的设备和方法 | |
TWI673651B (zh) | 二維碼定位方法及裝置 | |
CN105023265A (zh) | 鱼眼镜头下的棋盘格角点自动检测方法 | |
CN105096299A (zh) | 多边形检测方法和多边形检测装置 | |
CN105893929A (zh) | 手指与手腕的区分方法及其装置 | |
CN105303677B (zh) | 一种获取纸币安全线边界的方法及装置 | |
CN104359415B (zh) | 一种水火弯板角变形量测量方法及系统 | |
JP6576664B2 (ja) | エッジ検出偏り補正値計算方法、エッジ検出偏り補正方法、及びプログラム | |
JP5914732B2 (ja) | 画像検証方法、画像検証装置、およびプログラム | |
CN103295227B (zh) | 一种基于梯度方向分割的圆检测方法 | |
CN101751665B (zh) | 检测当前像素是否位于多边形中的方法和系统 | |
CN105627935A (zh) | 产品料厚三维分析系统及方法 | |
JP5764527B2 (ja) | 画像検証方法、画像検証装置、およびプログラム | |
CN101937577A (zh) | 生成具有边界像素超采样效果的阴影的方法 | |
TWI501118B (zh) | 電磁筆的傾斜角偵測方法 | |
CN102074011A (zh) | 数字图像中任意三角形的检测方法 | |
CN104952072A (zh) | 一种基于遗传算法的矩形检测方法 | |
CN107480710A (zh) | 特征点匹配结果处理方法和装置 | |
KR20150017762A (ko) | 식별기 생성 장치 및 패턴 검출 장치 | |
CN101546432B (zh) | 获取图像偏移位置的方法及装置 | |
US20090287459A1 (en) | System and method for measuring a curve of an object | |
CN104992218A (zh) | 一种生产线产量实时自动计数装置及其计数方法 | |
CN102262785A (zh) | 点阵字型的边缘平滑方法、缩放方法与其记录媒体 | |
CN110458881B (zh) | 一种无需阈值的斜射入激光光斑中心定位方法 | |
JP5911122B2 (ja) | 直線検出装置および直線検出方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130227 Termination date: 20161215 |
|
CF01 | Termination of patent right due to non-payment of annual fee |