霍夫变换的累加器填充

2024-04-28

我写了一段需要优化的代码。只是想与社区核实一下该代码是否确实是最佳的。它填充霍夫变换的累加器。实际上,我只是复制粘贴了 OpenCV 库中的大部分代码。谢谢!


int i,j,n,index;
for (i = 0;i<numrows;i++)
{
    for (j = 0;j<numcols;j++)
    {
            if (img[i*numcols + j] == 100)
        {
            for (n = 300;n<600;n++)
            {   
                index = cvRound(j*tabCos[n] + i * tabSin[n]) + (numrho-1)/2;
                accum[(n+1) * (numrho+2) + index+1]++;
            }
        }
    }
}

我也模糊地附加了一段代码,其中有一个大型且重复的霍夫变换。这部分代码的维护者一直在尝试稀疏数组(实际上是一个 C++std::map如果我理解他的演示正确的话,请键入单元格索引),累加器取得了一些成功。

我认为加速与缓存局部性问题有关,并且它当然取决于数据being sparse.


Update:上面引用的软件旨在服务于许多粒子物理实验,但最初用于试验台项目(即小规模)。当我们开始认真做更大的项目并开始为它们做蒙特卡罗时,即使对于稀疏矩阵,霍夫变换也再次成为了一个瓶颈。

到目前为止我们还没有解决方案,但一位同事发现Gandalf http://gandalf-library.sourceforge.net/包括“快速霍夫变换” http://gandalf-library.sourceforge.net/tutorial/report/node134.html,它似乎以类似四叉树的方式评估变换(在 2D 中,大概您在 3D 中使用八叉树)以减少工作顺序。我们可能会对此进行实验。

进一步更新:一位同事最终在我们的代码中实现了渐进式概率霍夫变换,这似乎是我们目前最快的版本。如果您不需要将每个点分配给一条线,则效果最好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

霍夫变换的累加器填充 的相关文章

随机推荐