Landsat-8 이미지 처리 및 분석을 위해 Scala 및 Geotrellis 라이브러리를 사용하고 있지만 밴드 2, 3 및 4 (빨간색landsat에서 RGB 채널을 결합하고 png로 변환하면 끔찍한 결과가 발생합니다
singleband tiffs을 결합하는 코드이다 : 또한
class Tiler (outputPath : String, bandIds : Array[String]){
def bandPath(b: String) = s"data/landsat/LC81750342016185LGN00_B${b}.TIF"
def obtainBands() : (ArrayMultibandTile, SinglebandGeoTiff) = {
var tileArrayBuffer = ArrayBuffer[Tile]()
var geoTiff : SinglebandGeoTiff = null
bandIds.foreach((bandId) => {
geoTiff = SinglebandGeoTiff(bandPath(bandId))
tileArrayBuffer += geoTiff.tile
})
(ArrayMultibandTile(tileArrayBuffer), geoTiff)
}
def writeResultToFS(multiBand : MultibandTile, extent : Extent, crs : CRS) : Unit = {
MultibandGeoTiff(multiBand, extent, crs).write(outputPath)
}
def parseTiles() : Unit = {
val (multiBandTileArray, geotiff) = obtainBands()
writeResultToFS(multiBandTileArray, geotiff.extent, geotiff.crs)
}
}
여기서, 녹색, 청색)과 왼쪽 (그것으로부터 생성 된 결과적인 다중 대역 TIFF (오른쪽) 및 PNG) 인 , 이것은 내 PNG 변환기 코드입니다 :
class PngTest() {
val tiffPath = "data/output/output.tif"
val bwPath = "data/output/bw.png"
def makepng(): Unit = {
println("Rendering PNG and saving to disk...")
val conversionMap = {
val multibandTile = MultibandGeoTiff(tiffPath).tile.convert(IntConstantNoDataCellType)
multibandTile.combine(0, 1, 2) { (rBand, gBand, bBand) =>
val r = if (isData(rBand)) { rBand } else 0
val g = if (isData(gBand)) { gBand } else 0
val b = if (isData(bBand)) { bBand } else 0
if(r + g + b == 0) 0
else {
val color = (r + g + b)/3
((color & 0xFF) << 24) | ((color & 0xFF) << 16) | ((color & 0xFF) << 8) | 0xFF
}
}
}
conversionMap.renderPng().write(bwPath)
}
}
나는 변환 맵을 제거하고 단지 할 MultibandGeoTiff (tiffPath) .tile.convert (IntConstantNoDataCellType) .renderPng()합니다. (bwPath를) 쓰기, 내가 얻을 모두 왼쪽 그림의 다채로운 버전입니다.
죄송합니다. 멍청한 질문 일 뿐이며 사전에 도움을 주셔서 감사합니다.