2015-05-04 14 views
0

BestКак показать и работать с 3D-изображением из базы данных Босфора (или аналогичной базы данных) - Начиная от Nx (3 + 2) матрицы от датчика диапазона

Я эта проблема, что я дон Не знаю, как использовать данные Босфора (или аналогичный, который использует такую ​​же структуру). Прежде всего, моя конечная цель - создать 3D-систему распознавания лиц из базы данных Bosphorus. Но, к сожалению, я не знаю, как это сделать. Я не спрашиваю вас, как решить распознавание лица, но мне очень нравится знать, как обрабатывать эти данные, чтобы я мог создать это приложение. Я много пробовал, но не работал. И почти все бумаги начинаются с данного трехмерного лица.

Эта база данных Bosphorus предоставляет мне следующие данные

  • образы человеческих лиц (.png)
  • ориентиров человеческого лица [Person X - Внешняя левая бровь: -91.623 7,905 -83,9 .. .]
  • NX5 матрица

И что его поясню все.

Но прежде чем идти дальше, вот описание NX5 Matrix:

% 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 - Image from the range data

Во-вторых, данные Босфорский нормализуется. Но ориентиров нет. Как я могу построить, использовать, анкер, указать ориентиры на этом трехмерном изображении?

В-третьих, как я могу рассчитать геодезическое расстояние между 2 точками от трехмерного изображения? . геодезическое расстояние между двумя ориентирами (кратчайший путь, Дейкстра). Таким образом, как я прыгаю от одного к другому.

И это в основном это. Я пробовал много бумаг, но все они начинаются с данного 3D-изображения, даже если они используют базу данных Bosphorus или аналогичную.

Я надеюсь, что кто-то может мне помочь, все приветствуется

Сердечные приветы

Dieter

- Для этого проекта я использую Matlab. Но я думаю, что если у вас есть общая идея, что среда была бы независимой, чтобы ее решить -

ответ

0

Лучший сам

как сказано ранее, данные Bosphorus содержит нормализованные данные. Здесь важны только первые 3 вектора столбца, поскольку они относятся к 3D-данным.

Таким образом, если АБВ, наша матрица с нашими нормированных данных

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

Вопрос 1 связан с тем, как вы используете Matlab для обработки структурированных данных. Таким образом, вам необходимо знать структуру и операции с матрицей, необходимые для их устранения.

Структура документирована в верхней части вашего файла данных: он, как представляется, NX5 разделенных пробелами матрица, так что вы можете использовать команду load здесь (тип doc load, чтобы увидеть, как это работает, или увидеть this вопрос для простого примера).

facedata = load('yourfile'); 

Затем вам нужно выбрать координаты трехмерных данных и построить их. Читайте о matlab's indexing methods здесь, и имейте в виду, что в столбцах Matlab сначала указана колонка, которая бросает много людей.

faceX = facedata(:,1); 
faceY = facedata(:,2); 
faceZ = facedata(:,3); 

Чтобы нарисовать фактический сюжет вы можете использовать scatter3 хотя он будет рисовать только облако точек. Возможно, вам придется немного перетасовать данные в зависимости от того, какая координата будет первой в данных о босфоре (они, вероятно, говорят в документах, которые поставляются вместе с ним), но безопасным предположением будет XYZ с X справа и Z вертикально, чтобы вы могли запишите его как точку клоуда, используя catter3 (http://uk.mathworks.com/help/matlab/ref/scatter3.html).

scatter3(faceX,faceY,faceZ); 

(EDIT: Я изначально предложил surf но требует матрицы входов, как было отмечено ОП в комментариях, я заменил его scatter3, потому что он принимает входные данные столбца, хотя решение Ор о использовании триангуляции Делоне и trimesh дает. желаемый каркас).

Вопрос 2: ответ в тексте вы публикуемый:

данные: матрица NX5, где столбцы являются 3D координаты, 2D нормализуются координаты изображения соответственно.

Так что просто используйте первые три столбца, чтобы получить ненормализованные данные.

Вопрос 3: снова у вас уже есть ответ: получите алгоритм кратчайшего пути Дейкстры и реализуйте его. Имейте в виду, что он может быть не самым точным - есть хорошее описание некоторых вопросов here.

Если вы застряли с этим, я бы рекомендовал опубликовать новый вопрос об этом. Включите сведения о том, что вы пробовали, о том, как это не удается, и о том, что вы ожидали увидеть.

В целом я бы также посоветовал, чтобы исследовательские документы собирались повсеместно предполагать, что вы знаете основы любой среды, в которой они используют, - они не имеют места в журнале, и это все равно будет повторяться. Иногда для базовой информации вы должны думать латерально: вместо того, чтобы «использовать данные bosphorus в matlab», вы можете разбить его на части, а затем обобщить, чтобы вы могли вместо этого спросить «как загрузить текстовые данные в matlab», «как для построения 3D-данных в MATLAB»,„как реализовать алгоритм кратчайшего пути Дейкстры в MATLAB“и т.д.

+1

Эй спасибо за информацию, а через 6 дней я, наконец, сделал небольшой шаг вперед. - Команда серфера не будет работать, потому что Z должна быть матрицей, а не скаляром или вектором. Но я узнал, что я должен сделать треугольники из данных с помощью: tri = delaunay (xyz (:, 1), xyz (:, 2)); trimesh (tri, xyz (:, 1), xyz (:, 2), xyz (:, 3)); – Dieter

+0

Ничего, я не знал этого трюка с 'trimesh'! Спасибо за это. Извинения за информацию о dud на 'surf', я думал о' scatter3'. Я обновил ответ для всех, кто читает его позже. Удачи! – xenoclast