circularitycircularityCircularityCircularitycircularity圆形度(算子)
名称
circularitycircularityCircularityCircularitycircularity — 区域圆形度(与圆的相似性)的形状因子。
签名
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
模块
基础