Vegetation Change Detection

chaipat ncm
Geo Data Science
Published in
3 min readSep 22, 2019

คำนวณหาการเปลี่ยนแปลงของพื้นการเกษตรจากค่าต่างของ NDVI รายช่วงเวลา

จากบทความก่อนหน้า การที่เราสามารถเข้าถึงข้อมูลภาพถ่ายจากดาวเทียม sentinel2 ได้ แบบหลายช่วงเวลา และเกือบจะทุกสัปดาห์นั้น ทำให้เกิด edge ในการวิเคราะห์ข้อมูล และนำไปต่อยอดการพัฒนาระบบ

ซึ่งสำหรับผมที่ทำด้าน smartfarm เราต้องติดตามและศึกษา แปลงเพาะปลูกข้าวหลายร้อยไร่ ดังนั้นการใช้ sentinel2 ระดับความละเอียดจุดภาพ 10 เมตร + รอบการสำรวจทุก 5 วันช่วยได้มาก

บทความตอนนี้ผมจะมาสาธิตการวิเคราะห์ NDVI Change Detection เพื่อดูการเปลี่ยนแปลงของ Landcover โดยจะโฟกัสไปที่ กลุ่มพืช เป็นหลัก

การวิเคราะห์ NDVI

Normalized Difference Vegetation Index(NDVI) เป็นโมเดลการคำนวณค่าดัชนีที่พัฒนาขึ้นเพื่อใช้จำแนกพืช และใช้ในการบ่งบอกถึงลักษณะการเปลี่ยนแปลงของใบพืช ซึ่งทำให้นอกจากการจำแนกพืช(vegetation monitoring) ยังนำมาใช้ในการติดตามประเมินคุณภาพความสมบูรณ์ของพืชพรรณอีกด้วย

โมเดลการคำนวณ NDVI เป็นการใช้ค่าการสะท้อนในแบรนด์ Red และ NIR โดยมีสมการการคำนวณดังนี้

NDVI = (NIR-Red)/(NIR+Red)

โดยค่าผลลัพธ์ที่ได้จะอยู่ในช่วง -1.0 to 1.0 ซึ่งใช้ในการจำแนกพืช ออกจากสิ่งปกคลุมดินประเภทอื่น ที่มีลักษณะการสะท้อนแตกต่าง เช่น น้ำ , ถนน, อาคาร ได้ค่อนข้างชัดเจน รวมไปถึง ถ้ามี khowledge ในพื้นที่ศึกษา แบบเชิงลึก ยังสามารถใช้ NDVI ติตตามและประเมิน ความสมบูรณ์ของพืช จากการค่าสะท้อนแสงที่เกิดบนใบพืช

การประมวลผลค่า NDVI

ข้อมูลภาพถ่ายดาวเทียม Sentinel2 มีย่านความถี่รองรับการประมวลผล NDVI โดยเราจะทำการสกัดแบนด์ Red และ NIR มาใช้งาน (กรณีต้องการความแม่นยำสูง ควรทำการปรับแก้เชิงรังสีก่อน) โดยใช้ Python Rasterio ตัว package ที่ประมวลผลภาพถ่ายดาวเทียมเป็นหลัก

การคำนวณตัวอย่างนี้ไม่ซับซ้อนโดยมีขั้นตอนดังต่อไปนี้

  1. เข้าถึงข้อมูลภาพถ่ายดาวเทียม sentinel2 แบนด์ NIR และ Red จากไฟล์ภาพที่ทำการ stack band {2,3,4,8} เอาไว้ โดยจะใช้ rasterio เข้าถึงข้อมูล band 4 และ 8 เก็บข้อมูล DN ลงใน array object
## ndviimport rasterio as rio
from rasterio.plot import show
R10 = './S2B_MSIL2A_20190621T033549_N0212_R061_T47PPS_20190621T074718.SAFE/GRANULE/L2A_T47PPS_A011956_20190621T034527/IMG_DATA/R10m/'imagename = 'T47PPS_20190621T033549'red = rio.open(R10+imagename + '_B04_10m.jp2').astype(float)
nir = rio.open(R10+imagename +'_B08_10m.jp2').astype(float)

ndvi_jan = (nir-red)/(nir+red)

2. ทดลอง plot ภาพผลลัพธ์ เพื่อตรวจสอบ

fig, ax = plt.subplots(1, figsize=(8, 8))
show(ndvi_jan)
plt.show

3. ทดสอบ profile ของค่า NDVI ที่ได้ในแต่ละพื้นที่

Spatio temporal NDVI

สิ่งปกคลุมดิน ประเภทพืช นั้นสามารถเปลี่ยนแปลงได้ตามช่วงเวลา จุดนี้เองที่มีการนำเอา NDVI แบบ หลายช่วงเวลา(Muti temporal) มาใช้ในการทำการวิเคราะห์การเปลี่ยนแปลง

นอกจากนี้กรณีพืชบางประเภท เช่น ข้าว อ้อย ข้าวโพด หรือไม้ยืนต้นที่พลัดใบตามฤดูกาลเรายังสามารถประยุกต์เทคนิคนี้ กับการทำ time series analysis ได้อีกด้วย

ตัวอย่าง ผมใช้ python ในการวิเคราะห์ข้อมูล sentinel2 แบบหลายช่วงเวลา โดยโฟกัสที่ นาข้าว เพื่อจะเทียบการเปลี่ยนแปลง NDVI ในพื้นที่ศึกษา ช่วงเดือน มค. มีค. มิย. กย.

นำข้อมูล NDVI ของสองช่วงเวลามาหาค่าต่าง(diff) เพื่อวิเคราะห์พฤติกรรมของข้อมูล ในพื้นที่ศึกษา ภาพด้านล่างเป็น นาข้าวในช่วงที่สมบูรณ์ ค่า NDVI อยู่ช่วงระดับสูง

ภาพด้านล่าง(2) ตัวอย่างนาข้าวหลังเก็บเกี่ยว ค่า NDVI ที่ได้แตกต่างจากไป โดยนาที่เก็บเกี่ยวแล้ว ค่า NDVI ต่ำ และมีค่าความชื้นในดินต่ำ

ภาพจากอินเตอร์เน็ต

ทำการ plot ค่า profile ของ ndvi data เทียบ 2 ช่วงเวลาในเฉพาะเขตแปลงพื้นที่ศึกษา เพื่อดูพฤติกรรมของข้อมูล ที่เกิด

วิเคราะห์ค่าต่างของ NDVI ในช่วงเดือน มค. และเดือน มีค เพื่อดูการเปลี่ยนแปลงที่เกิด กรณีค่า diff > 0 หลายถึงการเพิ่มของปริมาณค่าสะท้อนกลุ่มพืชพรรณในพื้นที่

กรณีที่เก็บข้อมูลย้อนจำนวนหลายปี เพื่อสังเกตพฤติกรรม การปลูกข้าว เราก็จะสามารถวิเคราะห์ seasonality จาก time series ได้

ส่วนการวิเคราะห์และประมวลผล ข้อมูลจากภาพถ่ายดาวเทียมด้วย python สามารถอ่านได้จาก บทความใน link ด้านล่างครับ

https://medium.com/geo-datascience/python-rs/home

อ้างอิง

https://www.sciencedirect.com/science/article/pii/S1877050915019444

https://www.sentinel-hub.com/eoproducts/ndvi-normalized-difference-vegetation-index

--

--

chaipat ncm
Geo Data Science

GIS Developer , Data Scientist (Machine Learning &Deep Learning) at Ayutthaya-GIS Co., Ltd. ,Contract Me >> chaipat.ayutthaya.gis@gmail.com