ปรับค่า Raster ให้เป็นค่าจริงด้วย scale factor และ add offset

Satap_srm
MAPEDIA BLOG
Published in
1 min readMay 18, 2023

บางครั้งที่เราทำการดาวน์โหลดภาพดาวเทียมจากแหล่งต่างๆมา เราจะได้ไฟล์ที่เป็น .nc .hdf5 บ้าง เราจึงจำเป็นต้องแปลงให้เป็น geotiff ก่อนนำมาใช้งาน ก็จะพบปัญหาคือ เมื่อนำไฟล์ไปเปิดใน qgis ปรากฏว่าค่าของ raster กลายเป็น 0–255 ไปซะงั้น ปัญหานี้สามารถแก้ไขได้ด้วย Rasterio

Rasterio เป็นหนึ่งในไลบรารี Python ที่ใช้ในการอ่านและเขียนข้อมูลเราเตอร์ (raster data) ในรูปแบบที่เป็นไฟล์ภาพ รวมไปถึงการเข้าถึงข้อมูล Meta Data

ศึกษาเพิ่มเติมได้ที่

ขั้นตอนการเปิดภาพด้วย rasterio เริ่มต้นด้วยการติดตั้ง rasterio โดยสามารถติดตั้งผ่าน pip หรือ conda ได้ตามปกติ

pip install rasterio

เมื่อติดตั้งเรียบร้อยแล้วทำการ import มาใช้งานในไพธอนไฟล์

import rasterio

วิธีการเปิดไฟล์ด้วย rasterio

#input_path = ตำแหน่งที่เก็บไฟล์ราสเตอร์
with rasterio.open(input_path) as src:

เริ่มปรับแก้กันเลย

with rasterio.open(input_path) as src:
arr = src.read(1)
arr = arr.astype(rasterio.float32)

# ค้นหาข้อมูล scale_factor add_offset ใน metadata ของข้อมูล
scale_factor = src.tags()['scale_factor']
add_offset = src.tags()['add_offset']

# ปรับแก้ค่า
arr = arr * float(scale_factor) + float(add_offset)

# คัดลอกข้อมูลราสเตอร์เดิม
kwargs = src.meta.copy()

kwargs.update(
dtype=rasterio.float32,
count=1
)

# บันทึกเป็นไฟล์ใหม่
with rasterio.open(output_path, "w", **kwargs) as dst:
dst.write(arr_out, 1)
dst.nodata = 0

เป็นอันเสร็จสิ้น ก็จะได้ราสเตอร์ใหม่ที่แสดงค่าที่บันทึกมาแล้ว

scale_factor = src.tags()['scale_factor'] 
add_offset = src.tags()['add_offset']

หมายเหตุ บางครั้งข้อมูลใน meta data อาจจะไม่ได้ใช้ชื่อ scale_factor หรือ add_offset โดยตรง ทำให้ค้นหาไม่เจอ อาจต้องแสดงค่าออกมาดูทาง terminal ก่อน

--

--