形状
形状 (塑造它)是一个用于Node.JS或网页浏览器的公用库,它将取出一组代表粗略所绘形状的顶点作为输入并会输出一个固定形状及其名称. 可能的形状估计取自以一组阈值常数为基础的形状图集. 形状图集和阈值常数都可以由用户明确提供,不过如果您正在寻找一个基本但体面的功能,则先前存在的值将被用作倒数.
文档
形状(Shapeit)是一个接受一个大致被划出形状的单个参数的函数. 给定的形状是代表有X和Y值的2D顶点的数对阵. 简单的使用案例如下:
import shapeit from 'shapeit'
const uglySquare = [
[-0.1, 0 ],
[4.9 , 0.2 ],
[10.1, -0.1],
[10.2, 4.9 ],
[9.9 , 9.8 ],
[5.1 , 9.9 ],
[0.1 , 10 ],
[-0.1, 4.7 ],
[0.1 , -0.1],
]
const prettySquare = shapeit(uglySquare)
assert(prettySquare, [[Number, Number]])
assert(prettySquare.name, 'square')
结果也是一种外形,但顶点数量大为减少,最能与外形图中呈现出的一种外形相配合. 结果的形状还将增加一个 name 字段代表形状的名称。 唯一的例外是圆形结果, 在那里,我们有一个物体与 center 财务报告和审定财务报表 radius 字段 :
import shapeit from 'shapeit'
const uglyCircle = [
[1 , 0 ],
[0.86 , 0.49 ],
[0.5 , 0.86 ],
[6.12 , 1 ],
[-0.49, 0.86 ],
[-0.86, 0.5 ],
[-1 , 1.22 ],
[-0.86, -0.49],
[-0.5 , -0.86],
[-1.83, -1 ],
[0.49 , -0.86],
[0.86 , -0.5 ],
]
const prettyCircle = shapeit(uglyCircle)
assert(prettyCircle.center, [Number, Number])
assert(prettyCircle.radius, Number)
assert(prettySquare.name, 'circle')
可以使用自定义配置创建新的形状实例 new() 方法 :
import shapeit from 'shapeit'
const shapethat = shapeit.new({
atlas: {},
output: {},
thresholds: {},
})
此外,可以使用 modify() 方法 :
import shapeit from 'shapeit'
modify.new({
atlas: {},
output: {},
thresholds: {},
})
更多关于上述示例中使用的配置选项的信息,详见文件部分。 此外,本文还列出每个配置字段的快速参考:
形状图集
如初始摘要所指出,可提供形状图集和阈值常数。 让我们从形状图集开始。 形状图集是一个包含可能形状估计的图集,其几何可能以这样或那样的形式出现(翻译,旋转或镜像). 默认形状图集可能估计以下形状:
- 四边形
- 等边六边形
- 等边五边形
- 等边三角形
- 金色- ratio 三角形
- 红外线
- 银角三角形
- 闪光
- 星号
- 夹子
默认地图集可在 此文件。 。 。 .
此外,无论我们提供的地图集如何,可能估计的基本形状很少:
- 圆
- 六边形
- 八边形
- 打开多边形
- 五边形
- 多边形
- 矩形
- 平方圆
- 三角形
- 向量
- 向量
实例
默认情况下,指定的地图集形状将被视为一个封闭的多边形:
import shapeit from 'shapeit'
const shapethat = shapeit.new({
atlas: {
parallelogram: [
[1, 0],
[5, 0],
[4, 2],
[0, 2],
[1, 0],
]
}
})
const uglyParallelogram = [
[0.9 , 0.1 ],
[3 , 0.2 ],
[5.1 , -0.1],
[4.6 , 0.9 ],
[4.2 , 2.2 ],
[2.1 , 2 ],
[-0.1, 1.9 ],
[0.4 , 1.1 ],
[1.2 , -0.1],
]
const prettyParallelogram = shapethat(uglyParallelogram)
assert(prettyParallelogram, [[Number, Number]])
assert(prettyParallelogram.closed, true)
assert(prettyParallelogram.name, 'parallelogram')
如果我们想要指定一个开放的多边形,而不是为对象提供额外的 closed 布尔字段,顶点将在 vertexes 字段 :
import shapeit from 'shapeit'
const shapethat = shapeit.new({
atlas: {
caret: {
closed: false,
vertices: [
[-1, 0],
[0 , 1],
[1 , 0],
]
}
}
})
const uglyCaret = [
[-1.1, 0.1 ],
[-0.1, 0.89 ],
[1.2 , -0.05],
]
const prettyCaret = shapethat(uglyCaret)
assert(prettyCaret, [[Number, Number]])
assert(prettyCaret.closed, false)
assert(prettyCaret.name, 'caret')
阈值常数
虽然很多次都是不必要的甚至危险的,但我们可以修改阈值常数. 每个阈值用于检测给定形状中的特定特征,这样我们就可以确定最终结果并相应固定. 以下是所有阈值列表,然后是对其作用的描述:
- 圆减角 - 当试图将给定的形状与圆相匹配时,其值大于这个角的所有角会被减小. 较高的值会导致圆相匹配的概率更高. 0至 Q 之间的距离,默认为 0.6.
- 圆闭相隔 - 只有当上个顶点与向量之一之间的距离比这个值更短时,一个给定的开口形状才可能被视为圆形,这意味着更高的值更可能导致一个圆形而不是开口的多边形. 0到 QQ 之间的距离,默认为 100 .
- 常规偏差 - 只有当最后一个顶点与一个向量之间的距离比这个值短时,一个给定的开口形状可能自动被关闭并与地图集中的一个形状相匹配. 0到 QQ 和 90 之间的默认值.
- 半径 - 用来通过检查其标准偏差与平均半径大小的比例来说明分布的均匀性如何是所有半径. 更低的值更可能使给定的形状与圆相匹配. 0到1之间的距离和默认为0.18.
- minpolygon地区 - 2个向量之间的相交点,只有在其面积大于这个值时,才被视为形成多边形的相交点,这意味着将困入一个小区域的相交点,不会被视为形成一个多边形,在我们计算时也不会被考虑. 0到 QQ 之间的距离, 默认为 300 .
- 分数 - 与地图集中形状之一的匹配的最低分数被视为成功。 更高的值会导致更多的形状,这些形状有可能相匹配. 0到1之间的距离,默认值为0.83.
- 分数 ——能给平方对决带来喜悦的最低分数,这意味着更低的分数更可能使给定的形状与平方相匹配. 0到1之间,默认值为0.85.
- 向量还原角度 - 如果两个向量之间的角低于这个值,则2个向量将减少为一个向量,否则它们将被视为构成一角的2个向量。 更高的值会减少更多的角并导致直线. 范围在 0 至 Q 之间,默认为 0. 3.
默认阈值可以在 此文件。 。 。 .
实例
import shapeit from 'shapeit'
// Circles are more likely to be detected with these thresholds
const shapethat = shapeit.new({
thresholds: {
circleReductionAngle: 0.7,
circleClosureDistance: 120,
}
})
输出选项
输出形状可以通过指定其输出选项进行前置配置. 输出选项是可选的,可能包含以下字段:
- 矩形旋转 - 如果输出形状是一个矩形,则其角将被四舍五入到该值的最近乘法上。 0至2π的距离和默认为 * / 8.
- 向量旋转 - 如果输出形状是矢量,则其角将四舍五入到该值的最近乘法。 0至2π和默认值为 π/ 16.
默认输出选项可在 此文件。 。 。 .
实例
import shapeit from 'shapeit'
// Will result in vertical or horizontal rectangles and vectors only
const shapethat = shapeit.new({
output: {
rectRotationProduct: Math.PI / 2,
vectorRotationProduct: Math.PI / 2,
}
})
下载
该源可下载自 GitHub 图像。也可以使用节点软件包管理器安装(npm:
npm install shapeit