Как отобразить изображение TIFF в Bokeh? - PullRequest
0 голосов
/ 25 июня 2018

Я могу загрузить изображение TIFF в память в виде массива NumPy, где каждый пиксель представлен 3-элементным вектором RGB:

from PIL import Image
import numpy as np
arr=np.array(Image.open(imgfn))

Например, указанная выше arr может иметь форму (2469,2858,3).

Следуйте документам Bokeh , в Bokeh пиксели являются 1D числами, которые интерпретируются относительно цветовой карты.

Как мне сопоставить массив 3D RGB TIFF с массивом индексов цветовой карты 1D Bokeh, и какую цветовую карту мне следует использовать?

Этот пост предлагает мне написать что-нибудь под названием RGBAColorMapper. Как мне это сделать?

Существует также нечто, называемое image_rgba , которое является 4D-пикселем, как бы я перевел 3D-пиксели в 4D, чтобы использовать это?

По сути, я ищу ту же функциональность, что и iShow MatPlotLib.

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете преобразовать изображение TIFF в RGBA, используя пакет PIL. Тогда легко построить это с помощью image_rgba. Файл TIFF был загружен с http://www -eng-x.llnl.gov / documents / tests / tiff.html , после того как SO-ответ опубликован здесь .

import numpy

from PIL import Image
from bokeh.plotting import figure, show

im = Image.open('a_image.tif')
im = im.convert("RGBA")
# uncomment to compare
#im.show()
imarray = numpy.array(im)

p = figure(x_range=(0,10), y_range=(0,1), width=1000, height=200)

p.image_rgba(image=[imarray], x=0, y=0, dw=10, dh=1)

show(p)

enter image description here

...