首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用opencv和c++实现三维sift算法?

如何利用opencv和c++实现三维sift算法?
EN

Stack Overflow用户
提问于 2017-11-14 14:54:11
回答 1查看 750关注 0票数 0

对于如何使用opencv和c++在三维环境下实现sift算法,我感到困惑.我从一些论文中了解了3D sift算法的原理,但是对于实现我没有一个明确的想法。有一些开源代码是用matlab编写的,我想用c++和opencv来实现算法,但对数据结构不关心。

3D sift算法可以简单地描述为以下步骤:

(1)建立尺度空间,生成狗(高斯差)..

(2)检测极值点,滤除不合适的关键点。

(3)在三维环境下确定关键点的方向。

(4)在三维环境下生成keypoint描述符。

假设3D输入数据已经准备好,并且可以存储在3D数组中(例如,双*数据)。

我的第一次尝试是通过以下方式声明3D矩阵( 3D卷)(3D数组中的数据可以复制到Mat):

代码语言:javascript
复制
int sizes[] = {x ,y, z};
Mat *Img = new Mat(3, sizes, CV_8U, Scalar(0));// using namespace cv

然后,我在算法的step1中遇到了一些问题:

(1)是否有一种方法可以使用类似于typedef的东西来声明3D卷,因为缩放空间包含不同大小的3D卷。大小数组不应该是常量。

(2)无法找到调整三维体积大小的方法,也无法对三维体积进行高斯滤波。将3D体积分解成二维切片并在每个切片上进行调整大小或高斯滤波,这是一种合理的方法吗?或者有什么功能可以直接应用到3D卷上?

构建合适的数据结构应该是算法的关键,对于如何使用opencv,我没有一个清晰的想法。

谢谢你帮忙!

EN

回答 1

Stack Overflow用户

发布于 2017-11-14 15:15:40

(1)是否有一种方式来声明一个3D卷,因为尺度空间包含不同大小的3D卷,因此是否可以使用类似ty对联的东西来声明一个3D卷。大小数组不应该是常量。

不,OpenCV主要针对2D图像(例如.png、视频提要等标准图像格式)

(2)无法找到调整三维体积大小或对三维体积进行高斯滤波的方法。将3D体积分解成二维切片并在每个切片上进行调整大小或高斯滤波,这是一种合理的方法吗?或者有什么功能可以直接应用到3D卷上?

对于OpenCV,你唯一能做的就是拥有一个2D大小的堆栈,如果你愿意的话,所有的大小都是不同的。如果你有一个带有一组垫的向量或一些类型,那么你可以修改这些垫子以适应你的目的(你甚至可以改变特定垫子的大小)

尽管如此,这听起来确实像是你想要做的事情,很可能超出了OpenCV的范围。作为参考,您可以看到SIFT 这里的OpenCVs实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47288759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档