首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示和处理来自博斯普鲁斯数据库(或类似数据库)的3D图像--从距离传感器的Nx(3+2)矩阵开始

如何显示和处理来自博斯普鲁斯数据库(或类似数据库)的3D图像--从距离传感器的Nx(3+2)矩阵开始
EN

Stack Overflow用户
提问于 2015-05-04 10:56:54
回答 2查看 766关注 0票数 0

最好的

我遇到的问题是,我不知道如何使用博斯普鲁斯数据(或者类似的,它使用相同的结构)。首先,我的最终目标是从博斯普鲁斯数据库创建一个三维人脸识别系统。但不幸的是我不知道该怎么做。我没有问你如何解决三维人脸识别,但我只想知道如何处理这些数据,以便我可以创建这个应用程序。我试过很多东西,但都没用。几乎所有的论文都是从给定的3D面孔开始的。

这个博斯普鲁斯数据库为我提供了以下数据

  • 人脸图像(.png)
  • 人类脸部的地标X-左外眉毛:-91.623 7.905 -83.9 .
  • a Nx5矩阵

最基本的一切。

但在我更进一步之前,下面是对Nx5矩阵的描述:

代码语言:javascript
复制
  % Date:   2008
  % Outputs:
  %   zmin      : minimum depth value denoting the background        | =  -1000000           
  %   nrows     : subsampled number of rows                          | =   229
  %   ncols     : subsampled number of columns                       | =   188
  %   imfile    : image file name
  %   data      : Nx5 matrix where columns are 3D coordinates and 2D |  N = 43052 
  %   normalized image coordinates respectively. 2D coordinates are
  %   normalized to the range [0,1]. N = nrows*ncols. In this matrix, values
  %   that are equal to zmin denotes the background.

  -1000000000  -1000000000  -1000000000  0,995567  0,003639
  -1000000000  -1000000000  -1000000000  0,990248  0,003639
  -1000000000  -1000000000  -1000000000  0,984929  0,003639
  ...          ...          ...          ...       ...

现在真正的问题是:如何处理这些数据

首先,如何通过这些数据创建如下图像中的3D图像?

其次,对博斯普鲁斯数据进行归一化处理。但地标不是。我如何绘制,使用,anker,参考那个3D图像上的地标点?

第三,如何计算离三维图像两点之间的测地线距离?例如,两个地标之间的测地线距离(最短路径,Dijkstra)。因此,我如何从一个跳到另一个。

这就是最基本的原因。我试过很多论文,但它们都是从给定的3D图像开始的,尽管它们使用的是博斯普鲁斯数据库或类似的数据库。

我希望有人能帮助我,一切都是受欢迎的

亲切的问候

迪特尔

--这个项目,我用的是Matlab.但我认为,如果你有一个普遍的想法,环境将是独立的解决它--

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-31 15:56:46

最好是我自己

如前所述,博斯普鲁斯数据包含规范化数据。只有前3列向量在这里很重要,因为它们引用了3D数据。

因此,如果是xyz,则是我们具有规范化数据的矩阵。

代码语言:javascript
复制
  xyz = 3normalizedColumnsXYZ;

  %% Then, you will get the mesh via the following piece of code

  x_plot = linspace(min( xyz(:,1)),max( xyz(:,1)),n);
  y_plot = linspace(min( xyz(:,2)),max( xyz(:,2)),n);
  [XI, YI] = meshgrid( x_plot, y_plot);
  ZI = griddata( xyz(:,1), xyz(:,2), xyz(:,3), XI, YI);


 %%plot the mesh - if you want to
     figure(1)
     mesh( XI, YI, ZI) 

向我自己问好

票数 0
EN

Stack Overflow用户

发布于 2015-05-04 12:14:34

问题1与使用matlab处理结构化数据的方式有关。因此,您需要知道结构和matlab操作所需的处理它们。

该结构记录在数据文件的顶部:它似乎是一个Nx5空间分隔的矩阵,因此您可以在这里使用load命令(输入doc load查看它是如何工作的,或者查看简单示例中的问题)。

代码语言:javascript
复制
facedata = load('yourfile');

然后,您需要选择三维数据坐标并绘制它们。在这里阅读有关matlab索引方法的文章,并记住matlab首先索引列,这会抛出很多人。

代码语言:javascript
复制
faceX = facedata(:,1);
faceY = facedata(:,2);
faceZ = facedata(:,3);

要绘制实际的绘图,您可以使用scatter3,尽管它只绘制点云。您可能需要根据博斯普鲁斯数据中的第一个坐标(他们可能会说是在随附的文档中)对数据进行稍微的调整,但是一个安全的猜测是将X放在右边,Z是垂直的,这样就可以使用catter3 (http://uk.mathworks.com/help/matlab/ref/scatter3.html)将其绘制为点云。

代码语言:javascript
复制
scatter3(faceX,faceY,faceZ);

(编辑:我最初建议使用surf,但正如OP在注释中所指出的那样,它需要矩阵输入。我用scatter3代替它,因为它接受列输入,尽管OP使用delaunay三角剖分和trimesh的解决方案给出了所需的线框)。

问题2:答案在你张贴的案文中:

数据: Nx5矩阵,其中列分别为三维坐标和二维归一化图像坐标。

所以,只需使用前三列得到未规范化的数据。

问题3:同样,您已经有了答案:获取Dijkstra的最短路径算法并实现它。请记住,它可能不是最准确的-有一个很好的描述的一些问题,这里

如果你对此一筹莫展,那么我建议你专门发布一个新的问题。一定要包括你尝试过的细节,它是如何失败的,以及你希望看到什么。

总的来说,我还会建议,研究论文将普遍假定你知道他们所使用的任何环境的基本知识--他们在期刊上没有太多的空间,而且无论如何也只会被重复。有时,对于基本的信息,你必须考虑横向:而不是‘如何在matlab中使用博斯普鲁斯数据’,你可以把它分成几个部分,然后概括,所以你可以问‘如何加载文本数据到matlab',’如何在matlab中绘制三维数据‘,’如何在matlab中实现dijkstra的最短路径算法‘等等。

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

https://stackoverflow.com/questions/30028376

复制
相关文章

相似问题

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