Преобразование данных 3D-поверхности в изображение 2D-диапазона

У меня есть 3D-поверхность, представленная с помощью файла wrl. Я прочитал необходимую информацию. из файла и иметь следующие данные: вершины, грани, нормали, координаты текстуры.

Как использовать эти данные, чтобы преобразовать это в изображение диапазона 2D (которое такое же, как изображение с нормальной интенсивностью, но за исключением того, что каждый пиксель содержит значение глубины подстилающей поверхности)? Я предпочитаю решение проблемы с помощью Matlab, хотя общие идеи более чем приветствуются.


person Swami    schedule 04.11.2014    source источник


Ответы (1)


Используйте 1_

Если я правильно понял, у вас есть данные x, y, z, и вы хотите преобразовать их в изображение, где интенсивность изображения равна Z.

[ximg,yimg]=meshgrid(1:szX,1:szY);
img = griddata(x,y,z,ximg,yimg); 
% normalize image, or set it at range you want

Я думаю, это должно сработать.

person Ander Biguri    schedule 04.11.2014
comment
Спасибо за ответ, Андер. Я попробовал это первым (извините, я забыл упомянуть об этом в посте). Но важным ограничением в griddata является то, что точки сетки (из meshgrid) должны быть частью 3D-поверхности, из которой мы интерполируем. В моем случае имеющиеся у меня 3D-данные сосредоточены в другом месте (большинство точек x-y отрицательны). Для этого я пытаюсь центрировать имеющееся у меня 3D-облако точек (просто переводя) примерно в центр сетки, полученной из meshgrid. Что ты думаешь об этом ? - person Swami; 04.11.2014
comment
@ Свами Определенно. Вы должны 1: заполнить все ваши данные X-Y, чтобы они были центрированы в szX/2 szY/2, а затем 2: масштабировать данные так, чтобы все вершины находились в диапазоне 1: szX 1: szY (включительно). Думаю, это будет слишком сложно ;) - person Ander Biguri; 04.11.2014