2014-11-04 1 views
0

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

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

ответ

0

Использование griddata

Если я правильно понял, у вас есть 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 

Я думаю, что он должен работать ,

+0

Спасибо за ваш ответ, Андер. Я попробовал это сначала (извините, что забыл упомянуть об этом в сообщении). Но важным ограничением в griddata является то, что точки сетки (из meshgrid) должны быть частью 3D-поверхности, из которой мы интерполируем. В моем случае 3D-данные, которые у меня есть, сосредоточены в другом месте (большинство точек x-y отрицательны). Чтобы выполнить это, я пытаюсь внедрить облако 3D-точек, которое у меня (просто переводя), примерно в центр сетки, полученный из meshgrid. Что ты думаешь об этом ? – Swami

+0

@Swami Definetly. Вы должны 1: поместить все ваши данные X-Y в центр с помощью szX/2 szY/2, а затем 2: масштабировать данные, чтобы все вершины находились в диапазоне 1: szX 1: szY (в комплекте). Это, наверное, слишком плохо, я думаю;) –