11

我一直在尝试实现名为Learning Based Digital Matting的研究论文中描述的 Digital Matting 算法。

它的 MATLAB 代码可在此处获得。我正在尝试使用 OpenCV 2.4.3 和 UMFPACK 将 MATLAB 代码转换为 C++。

问题是名为getLap_iccv09_overlapping(计算输入图像的拉普拉斯矩阵)的函数在 OpenCV 中没有现成的可用,我必须在 cpp 中编写自己的实现。我从我的实施中得到了不正确的结果。

是否有任何 C/C++ 库提供矩阵/图像的拉普拉斯矩阵计算?

4

3 回答 3

1

我最近不得不将几个 Matlab 函数“翻译”成 C++(使用 OpenCV),不幸的是你找不到完全相同的函数。有一些类似的函数,但结果并不完全相同,尤其是矩阵的边界。
我建议您阅读并理解您的 Matlab 函数使用的算法(对矩阵的运算)并用 C++ 编写(Opencv 非常适合矩阵运算)。
您可以使用一个小矩阵(例如 4 x 4)并逐步进行测试,首先使用矩阵内的元素,然后使用边缘和边界(我发现边界条件更难以理解)
祝你好运!

于 2012-11-23T14:29:03.233 回答
0

这个功能还不够吗?

于 2012-11-27T15:43:20.743 回答
0

您的 Matlab 和 C++ 版本的函数有多相似?听起来您可能只需要逐步检查各种中间结果是否相同,然后尝试以这种方式查找错误。

您可能会发现writeMat.cpp的用途,该函数可用于获取您的 OpenCV cv::Mat 矩阵并将其保存为 Matlab .m 文件,这将使比较更容易 - 在 cpp 代码的各个点写出 .m,将它们加载到 Matlab 中,运行 Matlab 脚本并在适当的点进行比较。

于 2012-11-29T13:44:52.710 回答