ความถูกต้องและส่งมอบ
UAT 361 เทคโนโลยีระบบอากาศยานไร้คนขับเพื่อการสำรวจ ทำแผนที่ และตรวจสอบ
บทเรียน
เมื่อเรียนจบโมดูลนี้ ผู้เรียนจะสามารถ
- คำนวณ bias, RMSE แนวราบและแนวดิ่งจากจุดตรวจอิสระ
- รายงานความถูกต้องตาม ASPRS Edition 2 Version 2 รวมความคลาดเคลื่อนของการรังวัดจุดตรวจ
- ไล่หาสาเหตุจากรูปแบบความคลาดเคลื่อน และตรวจความครบถ้วนของพื้นที่
- จัดแฟ้มส่งมอบพร้อม manifest SHA-256 และตัดสินตรวจรับสามสถานะ
ทำไมต้องรู้
ผู้ใช้แผนที่จะถามเสมอว่า “เชื่อได้แค่ไหน” คำตอบที่ดีไม่ใช่ “คมชัดมาก” หรือ “ใช้ RTK” แต่เป็นตัวเลขจากจุดตรวจอิสระที่คำนวณตามมาตรฐาน พร้อมบอกว่าครอบคลุมพื้นที่ใดและมีข้อจำกัดอะไร และแฟ้มงานที่ผู้รับเปิดแล้วตรวจต่อได้โดยไม่ต้องโทรถามผู้ทำ งานที่ไม่มีสองอย่างนี้ แม้ภาพจะสวยก็ยังไม่ใช่งานสำรวจที่ส่งมอบได้
Bias และ RMSE
สำหรับจุดตรวจแต่ละจุด ความคลาดเคลื่อน ค่าจากแผนที่ − ค่ารังวัด แยกแกน E, N และ Z
- Bias () ค่าเฉลี่ยของความคลาด บอกการเลื่อนอย่างเป็นระบบ
- RMSE (root mean square error) รากของค่าเฉลี่ยกำลังสอง บอกขนาดความคลาดรวม ทั้งส่วนที่เป็นระบบและส่วนที่กระจาย
Bias เป็นศูนย์ไม่ได้แปลว่าแม่น เพราะค่าบวกกับลบหักล้างกันได้ ส่วน RMSE ไม่ใช่ส่วนเบี่ยงเบนมาตรฐาน อย่าใช้ฟังก์ชันส่วนเบี่ยงเบนมาตรฐานในโปรแกรมตารางคำนวณแทน เพราะจะซ่อน bias ไว้
รายงานตาม ASPRS Edition 2
มาตรฐานความถูกต้องทางตำแหน่งของ ASPRS ฉบับที่ 2 รุ่นที่ 2 (2024) มีสาระสำคัญที่ผู้ทำงานโดรนต้องรู้ ตามที่ Abdullah (2025) สรุปไว้
- รายงานความถูกต้องเป็น RMSE แนวราบ (RMSE) และแนวดิ่ง (RMSE) ไม่รายงานที่ระดับความเชื่อมั่น 95% แล้ว
- ต้องมีจุดตรวจอย่างน้อย 30 จุด สำหรับโครงการไม่เกิน 1,000 km² ถ้าน้อยกว่านั้น เช่น งานโดรนขนาดเล็ก ต้องเขียนรายงานแบบระบุว่าทดสอบด้วยจุดตรวจเพียงกี่จุด
- จุดตรวจควรแม่นกว่าผลงานที่ทดสอบอย่างน้อย สองเท่า
- ต้อง รวมความคลาดเคลื่อนของการรังวัดจุดตรวจ เข้าไปด้วย: เมื่อ RMSE มาจากการเทียบผลงานกับจุดตรวจ และ RMSE คือความถูกต้องของการรังวัดจุดตรวจเอง
ตัวอย่างที่ 1 คำนวณความถูกต้องจากจุดตรวจสี่จุด
ข้อมูลสังเคราะห์สำหรับฝึก ความถูกต้องของการรังวัดจุดตรวจสมมติเป็น 2 cm แนวราบ และ 3 cm แนวดิ่ง
import math
errors = { # id: (eE, eN, eZ) m = แผนที่ − ค่ารังวัด
"A": (0.03, 0.04, 0.10), "B": (-0.03, 0.04, 0.00),
"C": (0.00, -0.05, -0.10), "D": (0.00, 0.05, 0.00),
}
SURVEY_H, SURVEY_V = 0.02, 0.03
n = len(errors)
rms = lambda values: math.sqrt(sum(v * v for v in values) / n)
e_e, e_n, e_z = zip(*errors.values())
rmse_h1 = math.hypot(rms(e_e), rms(e_n))
rmse_v1 = rms(e_z)
print(f"bias E {sum(e_e) / n:+.3f} N {sum(e_n) / n:+.3f} Z {sum(e_z) / n:+.3f} m")
print(f"product vs checkpoints: RMSE_H {rmse_h1:.3f} m, RMSE_V {rmse_v1:.3f} m")
print(f"including checkpoint survey: RMSE_H {math.hypot(rmse_h1, SURVEY_H):.3f} m, "
f"RMSE_V {math.hypot(rmse_v1, SURVEY_V):.3f} m")
if n < 30:
print(f"report as tested with ONLY {n} checkpoints (fewer than 30)")
bias E +0.000 N +0.020 Z +0.000 m
product vs checkpoints: RMSE_H 0.050 m, RMSE_V 0.071 m
including checkpoint survey: RMSE_H 0.054 m, RMSE_V 0.077 m
report as tested with ONLY 4 checkpoints (fewer than 30)
Bias แนวดิ่งเป็นศูนย์ แต่ RMSE แนวดิ่งราว 7 cm เพราะมีทั้งจุดที่สูงไปและต่ำไป 10 cm การรวมความคลาดของจุดตรวจทำให้ตัวเลขที่รายงานสูงขึ้นเล็กน้อย ซึ่งซื่อตรงกว่า และเพราะมีเพียง 4 จุด รายงานต้องบอกชัดว่าทดสอบด้วยจุดตรวจเพียง 4 จุด
ไล่หาสาเหตุจากรูปแบบความคลาด
| สิ่งที่พบ | สมมติฐานที่ควรตรวจ | วิธีแยกสาเหตุ |
|---|---|---|
| ทุกจุดเลื่อนทิศเดียวกัน | datum ระบบพิกัด หรือการแก้ตำแหน่งภาพ | เทียบ metadata และค่าพิกัดดิบก่อนแปลงระบบ |
| แนวราบดี แต่ Z เลื่อนเท่า ๆ กัน | ระบบความสูงหรือความสูงเสา | ตรวจความสูงเหนือทรงรีกับออร์โทเมตริก (โมดูล 2) |
| คลาดมากขึ้นเมื่อห่างจากกลาง | การกระจายของภาพหรือ GCP | ดูตำแหน่งกล้อง GCP และจุดตรวจพร้อมกัน |
| บางจุดคลาดโดดจากกลุ่ม | ทำเครื่องหมายผิด หรือเทียบคนละพื้นผิว | ตรวจภาพของจุดนั้นก่อนตัดสินใจ |
ห้ามลบจุดตรวจเพียงเพราะทำให้ RMSE ดูดีขึ้น ถ้าจุดผิดจริง ให้แสดงเหตุผลและรายงานผลทั้งก่อนและหลังตัดจุดนั้น
ความครบถ้วนและแฟ้มส่งมอบ
ความครบถ้วน เทียบพื้นที่ที่มีข้อมูลใช้ได้จริงกับพื้นที่ที่ต้องส่ง ไม่ใช่กรอบสี่เหลี่ยมของไฟล์ภาพ ถ้าลาน 240 × 160 m มีข้อมูลใช้ได้ 36,480 m² ความครบถ้วนคือ 95% แต่ 5% ที่หายไปอาจเป็นส่วนที่สำคัญที่สุด จึงต้องแสดงบนแผนที่ว่าหายตรงไหน
Manifest คือรายการไฟล์ทุกไฟล์พร้อมขนาดและค่า SHA-256 (ฟังก์ชันแฮชตามมาตรฐาน FIPS 180-4) ผู้รับคำนวณค่าซ้ำแล้วเทียบได้ว่าไฟล์ครบและไม่ถูกเปลี่ยน แต่ SHA-256 ยืนยันเพียงว่าไฟล์ไม่เปลี่ยน ไม่ได้ยืนยันว่าพิกัดถูก
ตัวอย่างที่ 2 สร้าง manifest และตรวจความครบถ้วน
import hashlib
files = { # ชื่อไฟล์: เนื้อหา (ตัวอย่างสั้น ๆ แทนไฟล์จริง)
"01-brief/brief.md": b"Yard survey 240 x 160 m, EPSG:32647, orthometric height",
"03-control/points.csv": b"id,role,E,N,H\nG1,control,500.00,1000.00,80.430\n",
"06-qa/qa_report.md": b"RMSE_H 0.054 m, RMSE_V 0.077 m, ONLY 4 checkpoints",
}
for name, data in files.items():
print(f"{name:<24} {len(data):>3} B {hashlib.sha256(data).hexdigest()[:16]}...")
required, valid = 240 * 160, 36_480
print(f"coverage {valid / required:.0%} of {required:,} m2")
01-brief/brief.md 55 B 15e94383f7b44355...
03-control/points.csv 47 B 98ffe3c8ec044706...
06-qa/qa_report.md 50 B 04b86c732b8a4bf4...
coverage 95% of 38,400 m2
ผลแฮชที่แสดงตัดเหลือ 16 ตัวอักษรเพื่อให้อ่านง่าย ใน manifest จริงต้องเก็บครบ 64 ตัว
ตรวจรับสามสถานะ
- ผ่าน มีหลักฐานครบตามเกณฑ์ที่ตกลงไว้ใน brief และผู้มีหน้าที่ตรวจยอมรับ
- ไม่ผ่าน มีผลตรวจชัดว่าข้อกำหนดใดไม่ผ่าน พร้อมวิธีแก้หรือเก็บข้อมูลใหม่
- หลักฐานไม่พอ ยังขาดจุดตรวจ ระบบอ้างอิง หรือข้อมูลอื่นที่จะใช้ตัดสิน ห้ามรายงานเป็นผ่าน
ปฏิบัติการประจำโมดูล
ปฏิบัติการ: รายงานคุณภาพและส่งมอบ
- อ่านพิกัดจุดตรวจจากผลงานของโมดูล 3 คำนวณ bias และ RMSE ด้วยโค้ดตัวอย่างที่ 1 และตรวจแถวหนึ่งด้วยมือ
- นำจุดตรวจเข้า QGIS แสดงลูกศรความคลาด ตรวจรูปแบบตามตาราง และเขียนสมมติฐานของสาเหตุ
- วาดขอบเขตพื้นที่ที่ใช้ได้ คำนวณความครบถ้วน และระบุบริเวณที่ขาด
- จัดแฟ้มตามภาพที่ 2 สร้าง manifest SHA-256 ของไฟล์จริงทุกไฟล์
- ส่งแฟ้มให้เพื่อนอีกทีมเปิดโดยไม่ถาม ให้คำนวณจุดตรวจซ้ำหนึ่งจุด แล้วตัดสินตรวจรับสามสถานะพร้อมเหตุผล
ข้อผิดพลาดที่พบบ่อย
ระวัง
- ใช้ส่วนเบี่ยงเบนมาตรฐานแทน RMSE จนซ่อน bias
- รายงานความคลาดที่ GCP แทนจุดตรวจ
- ไม่รวมความคลาดของการรังวัดจุดตรวจ หรือไม่บอกว่ามีจุดตรวจน้อยกว่า 30 จุด
- ลบจุดตรวจที่คลาดมากโดยไม่มีหลักฐาน
- เข้าใจว่า SHA-256 ยืนยันความถูกต้องของพิกัด
สรุป
- Bias บอกการเลื่อนอย่างเป็นระบบ RMSE บอกขนาดความคลาดรวม ต้องรายงานทั้งสองจากจุดตรวจอิสระ
- ASPRS Ed. 2 V2 ใช้ RMSE รวมความคลาดของจุดตรวจ และกำหนดจุดตรวจขั้นต่ำ 30 จุด ถ้าน้อยกว่าต้องระบุ
- รูปแบบความคลาดชี้สาเหตุ ความครบถ้วนต้องแสดงบนแผนที่
- แฟ้มส่งมอบมีโครงชัดและ manifest SHA-256 และตัดสินตรวจรับเป็นผ่าน ไม่ผ่าน หรือหลักฐานไม่พอ
แบบฝึกตรวจความเข้าใจ
- ความคลาดแกนเดียว +0.06 และ 0.00 m bias และ RMSE เท่าใด
- RMSE = 0.03 m และ RMSE = 0.04 m RMSE เท่าใด
- ผลเทียบกับจุดตรวจ RMSE = 0.06 m การรังวัดจุดตรวจแม่น 0.02 m ค่าที่รายงานเท่าใด
- มีข้อมูลใช้ได้ 9,120 m² จากที่ต้องส่ง 9,600 m² ความครบถ้วนเท่าใด
- งานที่ยังไม่เคยวัดจุดตรวจเลยควรตัดสินสถานะใด
เฉลย
- bias m, RMSE m
- m
- m
- หลักฐานไม่พอ
สรุปสูตรสำคัญ
| bias และ RMSE ต่อแกน | |
| RMSE แนวราบ | |
| รวมความคลาดเคลื่อนของจุดตรวจ (ASPRS Ed. 2) | |
| ความครบถ้วนของพื้นที่ |
แหล่งอ้างอิงหลัก
- American Society for Photogrammetry and Remote Sensing. (2024). ASPRS positional accuracy standards for digital geospatial data (Edition 2, Version 2). link
- Abdullah, Q. (2025). Overview of the ASPRS positional accuracy standards for digital geospatial data, Edition 2, Version 2 (2024). Photogrammetric Engineering & Remote Sensing, 91(5), 247–255. link
- OpenDroneMap Authors. Ground control points. OpenDroneMap documentation (Version 3.5). link
- NIST/SEMATECH. e-Handbook of statistical methods. National Institute of Standards and Technology. link
- National Institute of Standards and Technology. (2015). Secure hash standard (SHS) (FIPS 180-4). link
- Sampath, A., Shrestha, M., While, M., & Scholl, V. M. (2023). Guidelines for calibration of uncrewed aircraft systems imagery (Open-File Report 2023–1033). U.S. Geological Survey. link
อ่านเพิ่มเติม
ศึกษาหน่วยความรู้ที่กำหนดล่วงหน้า ดูสื่อประกอบ และทำ quiz ประจำโมดูล
ตรวจความถูกต้องและแก้ปัญหาแผนที่
ตรวจรับและจัดชุดข้อมูลส่งมอบ
สามภารกิจฝึกสำรวจให้ครบวงจร
คู่มือผู้สอน: งานสำรวจและทำแผนที่
ในชั้นเรียน / ภาคสนาม
ปฏิบัติการเข้มข้นในแล็บและภาคสนาม บันทึกผลลงสมุดปฏิบัติการ
หลักฐานการเรียนรู้: สมุดปฏิบัติการที่อาจารย์ลงนาม