C ++中的拉普拉斯矩阵计算[关闭]
Posted
技术标签:
【中文标题】C ++中的拉普拉斯矩阵计算[关闭]【英文标题】:Laplacian Matrix Calculation in C++ [closed] 【发布时间】:2012-11-23 13:15:15 【问题描述】:我一直在尝试实现名为Learning Based Digital Matting 的研究论文中描述的数字抠图算法。
它的 MATLAB 代码在here 可用。我正在尝试使用 OpenCV 2.4.3 和 UMFPACK 将 MATLAB 代码转换为 C++。
问题是名为getLap_iccv09_overlapping
(计算输入图像的拉普拉斯矩阵)的函数在 OpenCV 中没有现成的可用,我必须在 cpp 中编写自己的实现。我的实施结果不正确。
是否有任何 C/C++ 库提供矩阵/图像的Laplacian Matrix calculation?
【问题讨论】:
有趣的是,拉普拉斯矩阵是为图计算的。 CV 中图像如何表示为图形? 拉普拉斯算子是一个稀疏矩阵。该函数将图像和背景掩码作为输入,并给出稀疏拉普拉斯矩阵作为输出。 图的拉普拉斯矩阵计算并不是一件复杂的事情。这里真正的问题是 - 这两个图像如何表示为图形?必须有一些算法步骤来分析这些图像,提取一些特征并将它们表示为图形。从这里拉普拉斯矩阵计算是微不足道的。 (似乎有计算图像/特征图的中间关键步骤,但我可能错了。) 这方面有什么进展吗? 【参考方案1】:我最近不得不将几个 Matlab 函数“翻译”成 C++(使用 OpenCV),不幸的是你找不到完全相同的函数。有一些类似的函数,但结果并不完全相同,尤其是矩阵的边界。 我建议您阅读并理解您的 Matlab 函数使用的算法(对矩阵的运算)并用 C++ 编写(Opencv 非常适合矩阵运算)。 您可以使用一个小矩阵(例如 4 x 4)并逐步进行测试,首先使用矩阵内的元素,然后使用边缘和边框(我发现边框条件更难理解) 祝你好运!
【讨论】:
实际上我已经完成了你提到的所有事情,但我没有得到正确的输出。此外,该算法会跳过图像边界。 你能把原始的matlab algorithme和你用c++翻译的那个发上来吗? 可以发,但是C++代码很大。【参考方案2】:this function不够用吗?
【讨论】:
此函数将拉普拉斯算子应用于图像。 Applying Laplace Operator 和 Calculating Laplacian Matrix 是两个不同的东西。 啊好吧,我误会了。我在这里真的帮不上忙,但也许this question 毕竟可以帮助你找到这个函数的用途,因为拉普拉斯矩阵似乎是拉普拉斯算子的离散模拟。祝你好运!【参考方案3】:您的 Matlab 和 C++ 版本的函数有多相似?听起来您可能只需要逐步检查各个阶段,检查各种中间结果是否相同,然后尝试以这种方式找到错误。
您可能会发现writeMat.cpp 的用途,这是一个可用于获取您的 OpenCV cv::Mat 矩阵并将其保存为 Matlab .m 文件的函数,这应该使比较更容易 - 在您的各个点写出一个 .m cpp 代码,将它们加载到 Matlab 中,运行 Matlab 脚本并在适当的点进行比较。
【讨论】:
以上是关于C ++中的拉普拉斯矩阵计算[关闭]的主要内容,如果未能解决你的问题,请参考以下文章