Holoviews RGB坐标

时间:2018-10-30 23:37:52

标签: python python-xarray holoviews

我正在尝试将多波段tif文件(4波段-[蓝色,绿色,红色,红外线])读入xarray,然后在Jupyter笔记本中使用HoloViews显示为RGB。作为参考,我在这里宽松地关注RGB png示例:http://holoviews.org/reference/elements/matplotlib/RGB.html

最终的RGB图像确实显示,但是,我通过使用np.dstack组合DataArrays丢失了x / y坐标尺寸。最终图像中的x / y坐标默认为〜-0.5-+0.5。

我不知如何处理整个过程中的坐标尺寸,或者潜在地如何将原始坐标尺寸应用于最终图像。

{this.state.fields.map((field) => {
return (
    <IssueInputRow
        labelText={field.name}
        key={i}   //want this to increment by 1 for each field, starting a 0                 
        handler={this.handler}
    />
    );
})}

使用从以上# 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] r_dsg_ds创建的HoloViews图像显示所需坐标的示例: desired coords

示例使用上面名为b_ds的HoloViews RGB显示不需要的坐标: undesired coords

1 个答案:

答案 0 :(得分:1)

注释中提到的Landsat示例使用data形式的(xdim, ydim, R, G, B, A)参数,该参数将所需的x / y坐标应用于图像。

陆地卫星示例: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