最好的
我遇到的问题是,我不知道如何使用博斯普鲁斯数据(或者类似的,它使用相同的结构)。首先,我的最终目标是从博斯普鲁斯数据库创建一个三维人脸识别系统。但不幸的是我不知道该怎么做。我没有问你如何解决三维人脸识别,但我只想知道如何处理这些数据,以便我可以创建这个应用程序。我试过很多东西,但都没用。几乎所有的论文都是从给定的3D面孔开始的。
这个博斯普鲁斯数据库为我提供了以下数据
最基本的一切。
但在我更进一步之前,下面是对Nx5矩阵的描述:
% 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.但我认为,如果你有一个普遍的想法,环境将是独立的解决它--
发布于 2015-05-31 15:56:46
最好是我自己
如前所述,博斯普鲁斯数据包含规范化数据。只有前3列向量在这里很重要,因为它们引用了3D数据。
因此,如果是xyz,则是我们具有规范化数据的矩阵。
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) 向我自己问好
发布于 2015-05-04 12:14:34
问题1与使用matlab处理结构化数据的方式有关。因此,您需要知道结构和matlab操作所需的处理它们。
该结构记录在数据文件的顶部:它似乎是一个Nx5空间分隔的矩阵,因此您可以在这里使用load命令(输入doc load查看它是如何工作的,或者查看简单示例中的这问题)。
facedata = load('yourfile');然后,您需要选择三维数据坐标并绘制它们。在这里阅读有关matlab索引方法的文章,并记住matlab首先索引列,这会抛出很多人。
faceX = facedata(:,1);
faceY = facedata(:,2);
faceZ = facedata(:,3);要绘制实际的绘图,您可以使用scatter3,尽管它只绘制点云。您可能需要根据博斯普鲁斯数据中的第一个坐标(他们可能会说是在随附的文档中)对数据进行稍微的调整,但是一个安全的猜测是将X放在右边,Z是垂直的,这样就可以使用catter3 (http://uk.mathworks.com/help/matlab/ref/scatter3.html)将其绘制为点云。
scatter3(faceX,faceY,faceZ);(编辑:我最初建议使用surf,但正如OP在注释中所指出的那样,它需要矩阵输入。我用scatter3代替它,因为它接受列输入,尽管OP使用delaunay三角剖分和trimesh的解决方案给出了所需的线框)。
问题2:答案在你张贴的案文中:
数据: Nx5矩阵,其中列分别为三维坐标和二维归一化图像坐标。
所以,只需使用前三列得到未规范化的数据。
问题3:同样,您已经有了答案:获取Dijkstra的最短路径算法并实现它。请记住,它可能不是最准确的-有一个很好的描述的一些问题,这里。
如果你对此一筹莫展,那么我建议你专门发布一个新的问题。一定要包括你尝试过的细节,它是如何失败的,以及你希望看到什么。
总的来说,我还会建议,研究论文将普遍假定你知道他们所使用的任何环境的基本知识--他们在期刊上没有太多的空间,而且无论如何也只会被重复。有时,对于基本的信息,你必须考虑横向:而不是‘如何在matlab中使用博斯普鲁斯数据’,你可以把它分成几个部分,然后概括,所以你可以问‘如何加载文本数据到matlab',’如何在matlab中绘制三维数据‘,’如何在matlab中实现dijkstra的最短路径算法‘等等。
https://stackoverflow.com/questions/30028376
复制相似问题