Как я могу сгенерировать воксельную сетку из набора точек с координатами x, y и z в matlab

#python #matlab #pixel #mesh #voxel

#python #matlab #пиксель #сетка #воксель

Вопрос:

У меня есть файл Excel, содержащий координаты узлов из моделирования в Abaqus. Теперь я хочу восстановить воксельную сетку или пиксельную сетку в 2D из этих точек в Matlab или в Python. Один из методов, который я прочитал, заключался в использовании нулевой матрицы с желаемым разрешением и ее заполнении, но я действительно не знаю, как это реализовать.

это ссылка, показывающая структуру моего файла Excel.

введите описание изображения здесь

Результат должен быть основан на пикселях, как на этом изображении:

введите описание изображения здесь

Комментарии:

1. Какие данные вы хотите сохранить в нем? Есть ли у вас какая-либо информация, присвоенная каждому узлу? И что именно вы подразумеваете под «2D воксельной сеткой»?

2. 2D-пиксельная сетка, поскольку мои данные — это просто координаты x и y и 3D-модель на основе вокселей, если также была координата z. Мне нужно воссоздать двоичную модель из этих координат, но для этого этапа, если бы я мог отобразить эти координаты в виде пиксельного изображения, этого было бы достаточно.

3. Итак, вы хотите сгенерировать 2D-сетку из 0, затем для каждой точки в списке и пометить ближайший узел в сетке как 1. Затем отобразите ее в виде изображения. Правильно?

4. Да. это то, что я надеюсь получить.

Ответ №1:

Вы можете использовать meshgrid для генерации координат узлов сетки. Также используется pdist2 для вычисления попарных расстояний между двумя наборами точек (например, узлов и точек сетки).

 % generate some random points
n = 20;
mind = -10;
maxd = 30;
P = rand(n, 2) * (maxd - mind)   mind;

% generate grid
d = 0.25; % distance between two pixels in your metric
X = mind:d:maxd;
Y = X;
[XX, YY] = meshgrid(X, Y);

% find closest grid cell to each point
[~, imind] = pdist2([XX(:), YY(:)], P, 'seuclidean' ,'Smallest',1);

% generate equivalent image
I = false(length(Y), length(X));
I(imind) = true;

% display results
subplot 121, scatter(P(:, 1), P(:, 2)); 
xlim([mind maxd]); ylim([mind maxd]); title('Points')
subplot 122, imagesc('XDATA', X, 'YDATA', Y, 'CDATA', I); 
xlim([mind maxd]); ylim([mind maxd]); title('Equivalent Pixels')
 

введите описание изображения здесь

Однако вам нужно определиться с несколькими константами, например minx , maxx , miny , maxy и d . Обновление этого для поддержки 3D тривиально. Оба meshgrid и pdist2 поддерживают 3D. За исключением того, что результатом также будет 3D-матрица. Вы можете использовать implay или slice для отображения таких изображений.