Alc*_*sta 4 algorithm matlab image-processing computer-vision
可以使用bwtraceboundary函数在Matlab中提取对象的参数边界.它返回Q×2矩阵B,其中Q是对象的边界像素的数量,第一和第二列分别存储边界像素的行和列坐标.
我想要做的是通过N个点对Q元素的这个边界进行采样,这些点将原始边界划分为相等拱长的段.
我认为一个直接的解决方案在于通过对所有两个连续边界像素的距离求和来计算边界的长度L. 这些距离是1或sqrt(2).然后我将L除以N以找到所需的弧长.最后,我再次迭代边界,将所有两个连续边界像素的距离相加.当和大于或等于期望的弧长时,选择当前边界像素作为将构成采样边界的N之一.
这是一个好的解决方案吗?有更高效/简单的解决方案吗?
小智 5
多年来,我看到这个问题似乎很多次.所以我写了一个小工具,就是这样做的.以一般数量的尺寸对分段线性或甚至曲线(样条)弧进行采样,使得连续点沿着该弧处于均匀或指定的距离处.
在仅使用分段线性弧的情况下,这是相当容易的.您总结了曲线的总弧长,然后以弧长进行插值,但由于已知它是分段线性的,因此它只需要沿着该长度的线性插值作为累积弧长的函数.
在弧形弧的情况下,它最容易作为常微分方程组的解决方案,观察沿途的事件.ODE45做得很好.
您可以使用MATLAB中央文件交换中的interparc来为您执行此操作,或者如果您希望自己学习简单的分段线性情况,请阅读代码的第一部分,我将使用分段线性弧长插值.一个好处是线性情况是以完全矢量化的形式完成的,因此不需要显式循环.