#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
для отображения таких изображений.