Сглаживание трехмерной матрицы евклидова пространства

У меня есть общий вопрос о том, какой метод использовать для сглаживания 3D (xyz) сетки.

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

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

Моя настоящая идея состоит в том, чтобы использовать метод Эрмита. Идея состоит в том, чтобы:

  1. Берем все XY и сглаживаем в двух направлениях ->XYnew и XnewY

  2. Преобразуйте линии Эрмита в линии Безье и найдите точку пересечения между XYnew и XnewY, имея новую точку. (Повторить со всеми точками, обычно 2000)

  3. Используйте сглаживание Hermite XYZ с XYZnew.

Прямо сейчас у меня есть сглаживание поверхности Эрмита и сглаживание линий Эрмита, реализованное на C++, но средняя часть не так проста, как предполагалось.

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

Конечно, идея состоит в том, чтобы устранить ошибку, вызванную методом стереозрения, это не проблема компьютерной графики, а проблема обработки данных.

Приложение:

Сначала я подумал, что сглаживания по оси Z будет достаточно, но оказалось, что это не так, также есть много ошибок XY. На изображениях ниже вы можете увидеть, как работает Z-образный фитинг, но он все же очень неровный, как это видно на изображении 2. (Цвета искажены и должны быть достаточно непрерывными) Изображение без сглаживания Zвведите здесь описание изображения


person Ander Biguri    schedule 04.10.2012    source источник
comment
Кривая Безье двумерна и использовать ее для сглаживания трехмерной поверхности как минимум неэффективно. Кроме того, ваши данные на самом деле не выглядят такими зашумленными, вы пытались просто применить скользящее среднее или локальную регрессию, используя взвешенный линейный метод наименьших квадратов для сглаживания?   -  person divanov    schedule 04.10.2012
comment
Я знаю, что у него не так много шума, но этого достаточно, чтобы не быть хорошим. Цвета (рассчитанные по деформациям квадратов) должны быть мягкими, все эти маленькие синие и красные случайные одиночные точки - это наверняка ошибки стереозрения. Я не пытался сделать локальную регрессию, но я думаю, что обработка строк по отдельности может в некоторых случаях привести к большему количеству ошибок. Тем не менее мне нужно больше читать о методах, но кажется, что вариант @Franco - хороший.   -  person Ander Biguri    schedule 05.10.2012


Ответы (1)


Если у вас нет лучших априорных оценок, вам будет трудно превзойти классический алгоритм Таубина: http://mesh.brown.edu/taubin/pdfs/taubin-iccv95a.pdf

person Francesco Callari    schedule 04.10.2012
comment
Это примерно то же самое, что и сглаживание по Гауссу. - person divanov; 05.10.2012
comment
Дело в том, что мне также нужно извлечь достоверную информацию из результата сглаживания, как вы думаете, алгоритм Таубина не будет слишком сильно фильтровать мои данные? Конечно, я вижу, что если я использую сглаживание по Гауссу, вместо устранения ошибки, генерируемой в стереозрении, я собираюсь создать больше ошибки, потому что величина фильтра изменяет результат, но действительно ли алгоритм Таубина работает как фильтр нижних частот и только собирается устранить де высокие частоты моих данных? Кажется, что все в порядке, читая статью, но я просто хочу быть уверен, прежде чем реализовать ее на С++... - person Ander Biguri; 05.10.2012
comment
Ну, я даю ваш ответ как действительный, хотя я, вероятно, не буду его использовать. Это действительно хороший алгоритм, и он будет неплохо работать на сглаживании поверхностей. - person Ander Biguri; 10.10.2012