Scala, как преобразовать матрицу (Breeze) в изображение geoTiff?

У меня есть матрица, представляющая изображение в Breeze. Например, каждая ячейка (x, y) содержит значение RGB. Я могу сохранить его в различных графических форматах (GIF, Jpeg...), используя Scrimage.

Как создать изображение geoTiff? Я смотрю на GeoTrellis, но пока не нашел простого способа.


person ticofab    schedule 27.10.2016    source источник


Ответы (1)


Итак, вы говорите об изображении RGB, потенциально это означает int GeoTiff.

Код выглядит так (текущая версия снимка 1.0.0-SNAPSHOT):

val matrix: Array[Array[Int]] = ???
val cols = ??? // matrix dimensions
val rows = ???
val extent: Extent = ??? // you need extent for geotiff
val crs: CRS = ??? // you need to know crs
val tile = IntArrayTile.empty(cols, rows) // create an empty tile

for {
  c <- 0 until cols
  r <- 0 until rows
} tile.set(c, r, matrix(c)(r))

val geotiff = SinglebandGeoTiff(tile, extent, crs) // it's a geotiff

geotiff.write("dir where you plan to save your geotiff")

Однако это будет геотиф в оттенках серого, чтобы сохранить изображение RGB, вы можете создать три фрагмента и сохранить все как многоканальный GeoTiff.

val red: Tile = ???
val green: Tile = ???
val blue: Tile = ???

val mbtile = MultibandTile(red, green, bule)

val mbgeotiff = new MultibandGeoTiff(
  mbtile, 
  extent, 
  crs, 
  GeoTiffOptions(
    Striped, 
    NoCompression, 
    ColorSpace.RGB
  )
) // GeoTiff options setup is quite important, to set up `TIFFTAG_PHOTOMETRIC` tag
mbgeotiff.write("dir where you plan to save your geotiff")

Но я не знаком с Breeze API, мы можем обсудить ваш вариант использования в Gitter-канале GeoTrellis или / и предоставить там дополнительную информацию.

person DaunnC    schedule 03.11.2016