2016-08-31 2 views
0

У меня есть матрица 25x10, которая показывает довольно грубую поверхность, когда я рисую ее. Я хотел бы отфильтровать его, чтобы создать гладкую поверхность с более точными точками для более тонкой сетки (но не с линеарной интерполировкой), и мне нужны отфильтрованные данные, которые создают сглаженную поверхность в качестве основы для открытого контура. Может ли кто-нибудь порекомендовать мне хороший подход? Результат прямо сейчас выглядит следующим образом:сглаживание/данные матрицы фильтра

surface Приветствия

EDIT: GridData методом «кубический» больше похож на желаемый результат, но он по-прежнему держит на данных слишком много. Изображение ниже визуализирует результат с кубическим и желаемым результатом. Цель состоит в том, чтобы не видеть более ясных пиков на поверхности.

Desired result

+1

Почему бы не использовать нелинейную интерполяцию? Вы можете использовать 'interpn' с методом' spline' или 'cub' – obchardon

ответ

1

Используйте griddata интерполировать данные по тонкой сетке. Если x, y и z - ваши данные, вы можете определить тонкую сетку (xq, yq) и интерполировать/экстраполировать ваши данные в этой области. Поскольку метод по умолчанию «линейный», и поскольку вы хотите сделать свой профиль поверхности более плавным, вы должны указать другой метод, например «естественный».

[xq, yq] = meshgrid(0:20:6000, 0.2:0.01:1); 
zq = griddata(x(:), y(:), z(:), xq, yq, 'natural'); 
surf(xq, yq, zq, 'EdgeColor', 'none') 
+0

Спасибо за ваш ответ, но как я могу использовать griddata с матрицей? У меня нет значений x, y и z. – Bart

+0

Ваш сюжет не похож на произвольные значения для x и y. Как у вас есть ваши данные и как вы его построили? В любом случае, если у вас нет x и y где угодно, вы можете сделать их также с помощью 'meshgrid', но так, чтобы размер x и y был как ваш z (25x10). Например, '[x, y] = meshgrid (240: 240: 6000, 0.1: 0.1: 1)'. Тогда у вас будет 3 матрицы с одинаковыми размерами, и тогда код будет хорош. – erfan

+0

Я планировал указать значения x и y позже, так как форма и данные матрицы имеют главный приоритет, поэтому я могу использовать любые значения x и y, которые я хочу сейчас. Я использовал meshgrid для создания двух значений для использования, как вы посоветовали, но теперь вся матрица заполнена NaNs, я полагаю, что причина кроется в значениях zq и yq, что бы я сделал с ними? – Bart