Как визуализировать 3D-сцену с помощью серфинга - PullRequest
3 голосов
/ 03 ноября 2010

У меня есть изображение, загруженное с диска в качестве текстуры, и матрица d того же размера, которая имеет соответствующую глубину.

Как я могу использовать surf, чтобы показать мне изображение в качестве 3d-модели?Простое взятие

surf(depthMatrix, img);

не дает хорошего результата, поскольку

  1. камера смотрит не с плоскости xy в направлении z
  2. Она выглядит довольно черной
  3. Это не выглядит так гладко, хотя моя матрица глубины фактически сглаживается, когда я показываю ее, используя imshow(depthMatrix, []);

image how it looks like

1 Ответ

4 голосов
/ 03 ноября 2010

Вы можете использовать наложение текстуры для отображения вашего изображения на поверхности следующим образом:

surf(depthMatrix,img,...           %# depthMatrix is z data, img is an image
     'FaceColor','texturemap',...  %# Use texture mapping
     'EdgeColor','none');          %# Turn off edge coloring

И для решения ваших 3 точек:

  1. Вы можете настроитьугол камеры с помощью мыши, нажав кнопку alt text на рисунке, который включает интерактивное 3-D вращение.Вы также можете включить интерактивное вращение с помощью функции ROTATE3D или изменить вид камеры без мыши с помощью функции VIEW .

  2. Ваш график выглядел черным, потому что по умолчанию края нарисованы как черные линии, и их, вероятно, было много.

  3. Вы можете настроить масштабирование оси и ограничения чтобы ваша поверхность выглядела более гладкой.Например, axis equal сделает единицы данных одинаковыми для всех 3 осей, поэтому ваша ось z (которая находится в диапазоне от 0 до 25) будет значительно сглажена, так как остальные две оси охватывают сотни.В качестве альтернативы, при вызове SURF вы можете указать данные x и y, которые будут использоваться для значений по этим осям, что в конечном итоге поможет вам лучше настроить относительное масштабирование между этими осями и осью z.

...