Преобразовать облако точек XYZ в изображение в градациях серого - PullRequest
0 голосов
/ 10 декабря 2018

Каждый, кого я пытаюсь преобразовать облако точек (X, Y, Z) в изображение в градациях серого, используя python.Я узнал, что изображение в градациях серого может быть сгенерировано массивом Numpy.Но сейчас у меня есть набор точек, который содержит X, Y и высоту.Я хочу сгенерировать изображение в градациях серого, основываясь на значениях X, Y и градациях серого, то есть Высоте.

Может кто-нибудь дать мне представление об этом?Заранее спасибо.

Ровен

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Спасибо, ребята.Я только что закончил писать свои собственные коды для интерполяции.Но моя идея от вас.Спасибо @asaflotz и @Paul Panzer.

Дело в моем сценарии, точки в облаке точек расположены неправильно.Интервалы между двумя соседними точками неодинаковы.Невозможно использовать сетку напрямую.Поэтому я выбрал неструктурированный метод в Scipy.Interpolate , который имеет так много практических методов, которые могут использоваться в зависимости от различных вариантов использования.Мой код ниже является модифицированной версией примера из Scipy.Interpolate.griddata .

x_range=((df.X.max()-df.X.min()))
y_range=((df.Y.max()-df.Y.min()))
grid_x, grid_y = np.mgrid[df.X.min():df.X.max():(x_range*1j), df.Y.min():df.Y.max():(y_range*1j)]
points = df[['X','Y']].values
values = df['new'].values
grid_z0 = griddata(points, values, (grid_x, grid_y), method='linear').astype(np.uint8)
im=Image.fromarray(grid_z0,'L')
im.show()

Заметил, что в griddata такие методы, как 'linear', 'near','cubic' может применяться в зависимости от ваших сценариев.Вот сгенерированное изображение высоты серого.enter image description here

Наконец, мой вопрос в основном решен.Пожалуйста, прокомментируйте этот пост, если у вас есть хорошие идеи или путаница.Спасибо всем!

Роуэн

0 голосов
/ 10 декабря 2018

давайте предположим, что X, Y расположены так, что они образуют сетку (которая является обязательной для построения прямоугольного изображения).оттуда это легко:

import numpy as np
import matplotlib.pyplot as plt

# generate some data
ax = np.arange(-9, 10)
X, Y = np.meshgrid(ax, ax)
Z = X ** 2 + Y ** 2

# normalize the data and convert to uint8 (grayscale conventions)
zNorm = (Z - Z.min()) / (Z.max() - Z.min()) * 255
zNormUint8 = zNorm.astype(np.uint8)

# plot result
plt.figure()
plt.imshow(zNormUint8)
...