如何使用代表点对复杂形状进行建模?

PsP*_*PsP 3 opencv image-processing connected-components

我想将此图像中的白色像素数量减少到输出图像中的某些候选点或代表点(目标是模拟不同类型的形状)

输入图像

输出图像

如果您只是将输出图像中的灰点连接在一起,则路径相同但白色像素较少.此路径应该只有一个起点和一个终点,并涵盖从开始到结束的所有路径.

我可以使用CCA(连通分量分析)和一些其他规则来解决它!但似乎很慢.

我需要这个算法来减少描述形状所需的像素数量.

这里最快,最准确的算法是什么?

我也欢迎那些可以通过增加候选点来提高形状建模精度的方法.

Yve*_*ust 5

  • 对形状进行骨架化以获得单像素宽的路径(请参阅https://en.wikipedia.org/wiki/Topological_skeleton)

  • 将路径表示为像素链.

  • 沿路径选择多个像素,定期间隔.

  • 通过这些点生成一个Cardinal样条曲线(请参阅https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline).三次样条也是可能的.

  • 对于样条曲线的每个部分,估计图像中的路径与曲线之间的偏差.这可以通过沿曲线采样几个点并找到路径截面上的最近点(通过尝试所有像素)来完成.

  • 当偏差太大时,在该部分中添加一个或多个像素.

  • 重新计算整个样条并重复,直到您不再需要插入点.

    [1]:https://i.stack.imgur.com/1IA在此输入图像描述

通过调整偏差阈值,您可以交换曲线平滑度以获得匹配精度.

可以避免重新计算没有发生点插入的曲线,但这需要一些小心.