我已经成功地在轮廓(cv :: findContours)上应用了方法cv :: approxPolyDP,以便用更简单的多边形表示轮廓并隐式地做一些去噪.
我想在从RGBD相机(通常非常嘈杂)获取的边缘地图上做同样的事情,但到目前为止还没有太大的成功,我在网上找不到相关的例子.我需要这个的原因是,通过边缘图,人们还可以使用手指之间的边缘,手指遮挡产生的边缘或手掌中创建的边缘.
此方法是否适用于轮廓以外的一般边缘贴图?
有人能指出我的例子吗?
附上一些图片:
轮廓的成功示例:

边缘图的问题案例:
很可能我以错误的方式绘制东西,但只绘制方法返回的像素表明最终结果中可能没有表示大的区域(根据epsilon参数,这并没有太大变化).

我还附上了一张深度图像,类似于我在上面描述的实验管道中使用的图像.这个深度图像不是由深度相机获取的,而是通过使用OpenGL读取gpu的深度缓冲区来合成生成的.

仅供参考,这也是直接从深度相机获取的深度图像的边缘图(使用原始图像,不应用平滑等)

(从深度相机看到的手,手掌朝上,手指"朝向手掌"关闭)
在乘以大量旋转矩阵之后,由于舍入问题(去正交化),最终结果可能不再是有效的旋转矩阵
重新正交化的一种方法是遵循以下步骤:
Eigen库中有什么东西可以通过隐藏所有细节来做同样的事情吗?或者有更好的食谱吗?
由于特殊的奇点情况,必须小心处理此过程,因此如果Eigen为此提供了更好的工具,那将是很好的.
我正在实现一个谱聚类算法,我必须确保矩阵(laplacian)是正半正定的.
检查矩阵是否为正定(PD)就足够了,因为可以在特征值中看到"半"部分.矩阵非常大(nxn,其中n约为数千),因此特征分析是昂贵的.
在Eigen中是否有任何检查可以在运行时产生bool结果?
chol()如果矩阵不是PD,Matlab可以通过抛出异常来给出结果.遵循这个想法,Eigen返回一个没有抱怨的结果LLL.llt().matrixL(),虽然我期待一些警告/错误.Eigen也有这种方法isPositive,但是由于一个bug,它对于具有旧Eigen版本的系统是不可用的.
我正在进行一个注册项目,我有一把椅子,一些物体在kinect前面旋转.
我可以成功配对注册,但正如预期的那样有一些漂移(导致图像).
我想使用LUM,以便对累积误差进行全局最小化(然后将其"扩展"到帧中),但我最终将帧悬浮在空中.(图片下方的代码)
LUM的使用有没有明显的错误?---我使用关键点+功能,而不是盲目地用全点云提供LUM
为什么所有示例都添加单向边而不是双向边?

PARAM_LUM_centroidDistTHRESH = 0.30;
PARAM_LUM_MaxIterations = 100;
PARAM_LUM_ConvergenceThreshold = 0.0f;
int NeighborhoodNUMB = 2;
int FrameDistLOOPCLOSURE = 5;
PARAM_CORR_REJ_InlierThreshold = 0.020;
pcl::registration::LUM<pcl::PointXYZRGBNormal> lum;
lum.setMaxIterations( PARAM_LUM_MaxIterations );
lum.setConvergenceThreshold( PARAM_LUM_ConvergenceThreshold );
QVector< pcl::PointCloud<pcl::PointXYZRGB>::Ptr > cloudVector_ORGan_P_;
for (int iii=0; iii<totalClouds; iii++)
{
// read - iii_cloud_ORGan_P_
// transform it with pairwise registration result
cloudVector_ORGan_P_.append( iii_cloud_ORGan_P_ );
}
for (size_t iii=0; iii<totalClouds; iii++)
{
pcl::compute3DCentroid( *cloudVector_ORGan_P_[iii], centrVector[iii] );
pcl::IntegralImageNormalEstimation<pcl::PointXYZRGB,pcl::Normal> ne;
//blah blah parameters
//compute normals with *ne*
//pcl::removeNaNFromPointCloud
//pcl::removeNaNNormalsFromPointCloud
pcl::ISSKeypoint3D< …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个跟踪器(手动跟踪个人项目),因此我需要使用Plucker坐标将2d点反投影到3d线.(如光线追踪)
作为输入,我有一个点的2d坐标和投影矩阵.
关于plucker坐标的网上信息概述了它们有用的原因,但是没有纸质分析地描述上述过程.(他们只是提到他们回到投影线,没有任何进一步的描述)
有人可以指出我正确的方向吗?
我想选择网格的一个区域并获取所选顶点的ID,以便我可以在我的自定义c ++处理管道中使用它们.
例如,如果有一个3d手形网格,可以选择属于每个指尖的顶点.获取这些顶点的ID对于多个应用程序非常有用,例如跟踪,制动等.
Meshlab显然在引擎盖下使用这些顶点的ID,但是这些信息可以暴露给用户吗?网上有很多关于如何选择(以各种方式)网格的某些区域并应用一些处理功能的教程,但我没有找到关于获取有关所选区域的原始信息的内容.
我使用tensorflow 1.2.0与一起安装pip install。
当我运行包含以下内容的示例时
import logging
tf.logging.set_verbosity(tf.logging.INFO)
Run Code Online (Sandbox Code Playgroud)
表单的日志消息
logging.info('TEST')
Run Code Online (Sandbox Code Playgroud)
即使带有标志,也不会出现在终端输出中--tostderr。
根据这个答案我也试过了
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '0'
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在。有任何想法吗?
作为我的管道的一部分,我需要按 6000x6000 的顺序执行大矩阵的特征分解。矩阵是密集的,所以除非我简化问题(如果可能的话),否则不能使用稀疏方法。
目前我玩玩具数据。使用 Eigen 库处理 513x513 矩阵我需要大约 6.5 秒,而对于 2049x2049 矩阵我需要大约 130 秒,这听起来令人望而却步,因为增长不是线性的。这是通过 实现的Eigen::SelfAdjointEigenSolver,而使用其他方法,例如Eigen::EigenSolveror Eigen::ComplexEigenSolverI 并没有得到显着的改进。当我尝试使用 Armadillo 时,arma::eig_sym即使使用选项“dc”` 也发生了同样的情况,该选项应该提供更快但近似的结果。Armadillo 有一些方法只返回前 X 个特征值以进行加速,但这仅适用于稀疏方法。目前我可能可以摆脱前 10-20 个特征值。
有没有办法或库/方法可以给我显着的加速?
c++ ×3
eigen ×3
eigen3 ×2
algorithm ×1
armadillo ×1
logging ×1
math ×1
meshlab ×1
opencv ×1
point-clouds ×1
projection ×1
python ×1
raytracing ×1
rotation ×1
tensorflow ×1