Голововские координаты RGB - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь прочитать многоканальный TIF-файл (4 полосы - [синий, зеленый, красный, инфракрасный]) в xarray , а затем отобразить как RGB, используя HoloViews в пределах Блокнот Jupyter. Для справки, я свободно следую примеру RGB png здесь: http://holoviews.org/reference/elements/matplotlib/RGB.html

Окончательное изображение RGB отображается, однако я теряю координаты x / y, комбинируя DataArrays с использованием np.dstack. Координаты x / y в конечном изображении по умолчанию составляют ~ -0.5 - + 0.5.

Я в недоумении, как провести через процесс измерения координат или, возможно, как применить исходные измерения координат к окончательному изображению.

# read .tif
ximg = xarray.open_rasterio('path/to/tif')
print('1.', type(ximg), ximg.coords['x'].values)

# convert to hv.Dataset
r_ds = hv.Dataset(ximg[2,:,:], kdims=['x','y'], vdims='Value')
g_ds = hv.Dataset(ximg[1,:,:], kdims=['x','y'], vdims='Value')
b_ds = hv.Dataset(ximg[0,:,:], kdims=['x','y'], vdims='Value')
print('2.', type(r_ds), r_ds.dimension_values('x'))

# scale to uint8
r = np.squeeze((r_ds.data.to_array().astype(np.float64)/8190)*255).astype('uint8')
g = np.squeeze((g_ds.data.to_array().astype(np.float64)/8190)*255).astype('uint8')
b = np.squeeze((b_ds.data.to_array().astype(np.float64)/8190)*255).astype('uint8')
print('3.', type(r), r.coords['x'].values)

# combine to RGB
dstack = np.dstack([r, g, b]) # lose coordinate dimensions here
print('4.', type(dstack), 'NO COORDS')
rgb = hv.RGB(dstack, kdims=['x','y'])
print('5.', type(rgb), rgb.dimension_values('x'))

1. <class 'xarray.core.dataarray.DataArray'> [557989.5 557992.5 557995.5 ... 563194.5 563197.5 563200.5]
2. <class 'holoviews.core.data.Dataset'> [557989.5 557989.5 557989.5 ... 563200.5 563200.5 563200.5]
3. <class 'xarray.core.dataarray.DataArray'> [557989.5 557992.5 557995.5 ... 563194.5 563197.5 563200.5]
4. <class 'numpy.ndarray'> NO COORDS
5. <class 'holoviews.element.raster.RGB'> [-0.49971231 -0.49971231 -0.49971231 ...  0.49971231  0.49971231
  0.49971231]

Пример, показывающий желаемые координаты с использованием изображений HoloViews, созданных из r_ds, g_ds и b_ds выше: desired coords

Пример, показывающий нежелательные координаты с использованием HoloViews RGB с именем rgb выше: undesired coords

1 Ответ

0 голосов
/ 31 октября 2018

В приведенном в комментариях примере Landsat используется параметр data в форме (xdim, ydim, R, G, B, A), который применяет к изображению желаемые координаты x / y.

Пример Landsat: http://datashader.org/topics/landsat.html

rgb = hv.RGB(
    (
        ximg['x'],
        ximg['y'],
        r.data[::-1],
        g.data[::-1],
        b.data[::-1]
    ),
    vdims=list('RGB')
)

enter image description here

...