circularitycircularityCircularityCircularitycircularity圆形度(算子)

名称

circularitycircularityCircularityCircularitycircularity — 区域圆形度(与圆的相似性)的形状因子。

签名

circularity(Regions : : : Circularity)

Herror circularity(const Hobject Regions, double* Circularity)

Herror T_circularity(const Hobject Regions, Htuple* Circularity)

void Circularity(const HObject& Regions, HTuple* Circularity)

HTuple HRegion::Circularity() const

static void HOperatorSet.Circularity(HObject regions, out HTuple circularity)

HTuple HRegion.Circularity()

def circularity(regions: HObject) -> Sequence[float]

def circularity_s(regions: HObject) -> float

描述

算子 circularitycircularityCircularityCircularityCircularitycircularity 计算输入区域与圆的相似度。

Calculation:

若 F 为区域面积,max 为中心点到所有轮廓像素点的最大距离,则形状因子 C 定义为:

C = min(1,C')

圆的形状因子 C 值为 1。若区域细长或存在孔洞,C 值将小于 1。算子 circularitycircularityCircularityCircularityCircularitycircularity 尤其能检测到显著凸起、孔洞及不相连区域。C 值被限制在 1.0 范围内,因为区域像素面积仅能近似真实圆形面积。这种近似误差在小区域中比在大区域中更为显著。

在本章( 区域 / 特征)的文档中,您可找到一张展示不同圆度区域的示意图。

若区域为空,算子 circularitycircularityCircularityCircularityCircularitycircularity 将返回值 0(除非设置了其他行为(参见 set_systemset_systemSetSystemSetSystemSetSystemset_system))。若传递多个区域,形状因子的数值将存储于元组中,元组中数值的位置对应于输入元组中区域的位置。

执行信息

参数

RegionsRegionsRegionsRegionsregionsregions (输入对象)  region(-array) objectHRegionHObjectHRegionHobject

待检查的区域。

CircularityCircularityCircularityCircularitycircularitycircularity (输出控制)  real(-array) HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

输入区域的圆形度。

断言: 0 <= Circularity && Circularity <= 1.0

示例(HDevelop)

* Comparison between shape factors of rectangle, circle and ellipse:
gen_rectangle1(R1,10,10,20,20)
gen_rectangle2(R2,100,100,0.0,100,20)
gen_ellipse(E100,100,100,0.0,100,20)
gen_circle(C,100,100,20)
circularity(R1,M_R1)
circularity(R2,M_R2)
circularity(E100,M_E)
circularity(C,M_C)
fwrite_string(FileId,['quadrate:  ',M_R1])
fnew_line(FileId)
fwrite_string(FileId,['rectangle: ',M_R2])
fnew_line(FileId)
fwrite_string(FileId,['ellipse:   ',M_E])
fnew_line(FileId)
fwrite_string(FileId,['circle:    ',M_C])
fnew_line(FileId)

示例(C)

/* Comparison between shape factors of rectangle, circle and ellipse */
gen_rectangle1(&R1,10.0,10.0,20.0,20.0);
gen_rectangle2(&R2,100.0,100.0,0.0,100.0,20.0);
gen_ellipse(&E,100.0,100.0,0.0,100.0,20.0);
gen_circle(&C,100.0,100.0,20.0);
circularity(R1,&R1_);
circularity(R2,&R2_);
circularity(E,&E_);
circularity(C,&C_);
printf("quadrate:   %g\n",R1_);
printf("rectangle:  %g\n",R2_);
printf("ellipse:    %g\n",E_);
printf("circle:     %g\n",C_);

示例(HDevelop)

* Comparison between shape factors of rectangle, circle and ellipse:
gen_rectangle1(R1,10,10,20,20)
gen_rectangle2(R2,100,100,0.0,100,20)
gen_ellipse(E100,100,100,0.0,100,20)
gen_circle(C,100,100,20)
circularity(R1,M_R1)
circularity(R2,M_R2)
circularity(E100,M_E)
circularity(C,M_C)
fwrite_string(FileId,['quadrate:  ',M_R1])
fnew_line(FileId)
fwrite_string(FileId,['rectangle: ',M_R2])
fnew_line(FileId)
fwrite_string(FileId,['ellipse:   ',M_E])
fnew_line(FileId)
fwrite_string(FileId,['circle:    ',M_C])
fnew_line(FileId)

示例(HDevelop)

* Comparison between shape factors of rectangle, circle and ellipse:
gen_rectangle1(R1,10,10,20,20)
gen_rectangle2(R2,100,100,0.0,100,20)
gen_ellipse(E100,100,100,0.0,100,20)
gen_circle(C,100,100,20)
circularity(R1,M_R1)
circularity(R2,M_R2)
circularity(E100,M_E)
circularity(C,M_C)
fwrite_string(FileId,['quadrate:  ',M_R1])
fnew_line(FileId)
fwrite_string(FileId,['rectangle: ',M_R2])
fnew_line(FileId)
fwrite_string(FileId,['ellipse:   ',M_E])
fnew_line(FileId)
fwrite_string(FileId,['circle:    ',M_C])
fnew_line(FileId)

示例(HDevelop)

* Comparison between shape factors of rectangle, circle and ellipse:
gen_rectangle1(R1,10,10,20,20)
gen_rectangle2(R2,100,100,0.0,100,20)
gen_ellipse(E100,100,100,0.0,100,20)
gen_circle(C,100,100,20)
circularity(R1,M_R1)
circularity(R2,M_R2)
circularity(E100,M_E)
circularity(C,M_C)
fwrite_string(FileId,['quadrate:  ',M_R1])
fnew_line(FileId)
fwrite_string(FileId,['rectangle: ',M_R2])
fnew_line(FileId)
fwrite_string(FileId,['ellipse:   ',M_E])
fnew_line(FileId)
fwrite_string(FileId,['circle:    ',M_C])
fnew_line(FileId)

结果

算子 circularitycircularityCircularityCircularityCircularitycircularity 在输入不为空时返回值 2 (H_MSG_TRUE)。当输入为空(无可用输入区域)时,可设置行为通过算子 set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)。当空区域(区域是空集)时,可设置行为通过算子 set_system('empty_region_result',<Result>)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)set_system("empty_region_result",<Result>)。如有必要,则抛出异常。

可能的前趋

thresholdthresholdThresholdThresholdThresholdthreshold, regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowingregiongrowing, connectionconnectionConnectionConnectionConnectionconnection

替代

roundnessroundnessRoundnessRoundnessRoundnessroundness, compactnesscompactnessCompactnessCompactnessCompactnesscompactness, convexityconvexityConvexityConvexityConvexityconvexity, eccentricityeccentricityEccentricityEccentricityEccentricityeccentricity

另见

area_centerarea_centerAreaCenterAreaCenterAreaCenterarea_center, select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape

模块

基础