Как итеративно усреднить поэлементные смежные столбцы в матрице Matlab, чтобы создать постепенно увеличивающуюся матрицу средней точки? - PullRequest
0 голосов
/ 13 февраля 2020

При попытке использовать метод средней точки для создания геодезических на поверхности , но меня не устраивает синтаксис Matlab, необходимый для итеративного обновления матрицы, содержащей точки на поверхности, встроенной в R3, и, следовательно, состоит из 3 строк и n столбцов, причем первый элемент задан, скажем, как A [:, 1], а последний элемент - A [:, n].

Первоначально на Плоскость XY вдоль линии. Несколько точек вдоль отрезка на плоскости XY, проходящей через A [:, 1] и A [:, n], будут проецироваться на поверхность с использованием функции f (x, y), так что мы получим начальную матрица с первой строкой, содержащей количество координат по оси X; второй ряд - координаты по оси Y; и третий ряд - высота кривой в каждой точке f (x, y). Каждый столбец - это одна точка.

Так что, если первые два столбца - это A [:, 1] и A [:, 2], я хотел бы получить обновленную матрицу, в которой первый столбец будет неизменным, A [:, 1], а второй столбец будет средним значением A [:, 1] и A [:, 2]. Другими словами, первая запись столбца (x) будет средним значением первой записи первого и второго столбцов; то же самое для второй (y) и третьей (z) записей. На другом конце матрица будет заканчиваться средним значением A [:, n - 1] и A [:, n] в предпоследнем столбце и A [:, n] в самом последнем столбце.

Затем будет выполнен шаг минимизации для проецирования каждого столбца на поверхность f (x, y), и тот же процесс усреднения начнется снова.

Обратите внимание, что с каждым шагом матрица будет расти на один столбец .

Логически, этот процесс будет в пределах функции oop в функции.

Я хотел бы спросить, как итеративно выполнить шаг усреднения, который, например, будет на первом шаге go от

A =

   0   2   1   4
   1   3   3   2
   1   2   2   2

до

A =
     0   1     1.5   2.5    4    
     1   2     3     2.5    2    
     1   1.5   2     2      2

После принятого ответа это код:

A = [0, 2, 1, 4; 1, 3, 3, 2; 1, 2, 2, 2]
A = [A(:,1), (A(:,1:end-1) + A(:,2:end))/2, A(:,end)]

1 Ответ

2 голосов
/ 13 февраля 2020

Следующая строка обновляет A на основе вашего описания. Однако, поскольку количество столбцов в A увеличивается (как вы уже знаете), вам лучше предварительно выделить его и немного откорректировать следующее назначение (которое будет go в for l oop).

A = [A(:,1), (A(:,1:end-1) + A(:,2:end))/2, A(:,end)];

Однако вы можете проверить некоторые функции из Инструментов обработки изображений , например imfilter.

...