Преобразование данных высоты из файла CSV в IMG - PullRequest
0 голосов
/ 12 января 2020

У меня есть некоторые данные о высоте с микроскопа. Мой вопрос: как я могу преобразовать файлы CSV в вывод IMG и правильно масштабировать цвет? У меня есть данные в формате CSV, такие как:

90,40,50,30,20
11, 2, 7,30,20
90,40,50,30,50
16,40,50, 4, 6
90, 4,50,30,20
...

Где столбцы - координаты x, строки - координаты y, а записи - координаты z.

Также должно быть по фиксированной шкале. Это означает, что сгенерированное изображение не должно генерироваться по максимальному и минимальному значению, чтобы несколько файлов были сопоставимы.

То, что я сделал до сих пор:

IMG = genfromtxt('RohCSV/{}.csv'.format(filename), delimiter=',')

Такого рода работы , но у меня есть проблема масштаба. Результаты несопоставимы.

Надеюсь, это понятно.

1 Ответ

1 голос
/ 13 января 2020

Это зависит от того, как вы сравниваете результаты. Например, при использовании Matplotlib вы должны получить нормированный минимум / максимум по умолчанию. Давайте рассмотрим следующий пример:

from matplotlib import pyplot as plt
import numpy as np

plt.figure(1, figsize=(12, 5))

# Original data/image
IMG = np.genfromtxt('test.csv', delimiter=',')
plt.subplot(1, 2, 1), plt.imshow(IMG), plt.colorbar()

# Min/max normalized data/image
IMG = IMG - np.min(IMG)
IMG = IMG / np.max(IMG)
plt.subplot(1, 2, 2), plt.imshow(IMG), plt.colorbar()

plt.tight_layout()
plt.show()

Это будет вывод:

Output

Как видите, по умолчанию выход Matplotlib (слева), а также вывод явно / минимально нормированных данных / изображений (справа) равны.

Кроме того, представленная нормализация мин / макс должна быть такой, какая вы есть ищу.

Надеюсь, что поможет!

-----------------------
System information
-----------------------
Python:      3.8.1
Matplotlib:  3.2.0rc1
NumPy:       1.18.1
-----------------------

РЕДАКТИРОВАТЬ: После уточнения в комментарии, я думаю, используя vmin и vmax параметры в Matplotlib imshow могут быть простейшим способом go:

from matplotlib import pyplot as plt
import numpy as np


def plot_scaled(data, min_scale, max_scale):
    plt.imshow(data, vmin=min_scale, vmax=max_scale), plt.colorbar()


# Original data/image
IMG = np.genfromtxt('test.csv', delimiter=',')

# Artificial data
IMG_large = IMG + 10
IMG_even_larger = IMG + 100

plt.figure(1, figsize=(15, 4))
for i, img in enumerate([IMG, IMG_large, IMG_even_larger]):
    plt.subplot(1, 3, i+1), plot_scaled(img, 0, 200)
plt.tight_layout()
plt.show()

New output

Значение 100 имеет одинаковый цвет на всех трех графиках .

...