ค้นหาข้อมูลในบล็อก (Search in this blog)

Wednesday, December 2, 2009

แปลงไฟล์จำนวนมากด้วยคำสั่งบรรทัดเดียว (ของฟรีและดีก็มีในโลก)

ไม่ได้เพิ่มเติมเนื้อใน Blog ตั้งหลายสัปดาห์เนื่องจากติดภารกิจสำคัญ วันนี้เลยขอแนะนำ การใช้งาน GDAL ที่น่าสนใจอย่างยิ่งอีกสักตัวอย่างนึง ซึ่งก็คือ การแปลงรูปแบบข้อมูลจากรูปแบบนึงไปเป็นอีกรูปแบบนึง ฟังดูอาจ งง งง งั้นขอยกตัวอย่าง เช่น การแปลงข้อมูล GeoTIFF ให้เป็น JPEG เป็นต้น
ฟังดูก็ง่ายๆนิ ไม่น่ามีปัญหาอะไร แต่ถ้าหากเราต้องการแปลงไฟล์จำนวนมากๆ (มากกว่า 1,000 ไฟล์) ละจะทำยังไงดี ต้องมานั่งพิมพ์คำสั่งทีละบรรทัด คงไม่ไหวมั้ง !!!
วิธีการที่จะแนะนำนี้ บางครั้งเราสามารถเรียกว่าเป็น batch processing ก็ได้นะครับ เรามาเริ่มกันเลยดีกว่า
ตัวอย่างผมมีไฟล์ภาพจำนวนมากในโฟลเดอร์ C:\myImage โดยเป็นไฟล์นามสกุล TIFF ทั้งหมด ปกติแล้วหากต้องการแปลงนามสกุลเราก็จะใช้ gdal_translate เช่น

>>gdal_translate -of JPEG abc.tif abc.jpg

แต่หากต้องการแปลงไฟล์จำนวนมาก เราสามารถใช้ batch processing เข้ามาช่วยได้ดังนี้

>> for %i IN (C:\myImage\*.tif) DO gdal_translate -of JPEG %i %~ni.jpg

เพียงเท่านี้ไฟล์ทั้งหมดภายใด้ C:\myImage ที่มีนามสกุล TIFF ก็จะถูกแปลงให้เป็น JPEG ทั้งหมดแล้วครับ !!!

Sunday, November 15, 2009

การลบขอบข้อมูลภาพก่อนใช้งาน Gdal2tiles (ของฟรีและดีก็มีในโลก)

หากท่านเคยใช้งาน gdal2tiles กับข้อมูลภาพถ่ายดาวเทียมแบบเต็มระวาง มักจะพบว่าเมื่อเปิดข้อมูลภาพเหล่านั้นกับโปรแกรม Google Earth มักจะปรากฏขอบดำบริเวณภาพ สาเหตุก็เนื่องมาจากวงโคจรของดาวเทียมนั้นไม่ได้อยู่ในแนวเหนือใต้จริงๆแต่มีการเยื้องออกจากเส้นละติจูดต่างๆทำให้การบันทึกข้อมูลนั้นเป็นแนวเอียงวันนี้ขอนำเสนอเทคนิคการลบขอบดำออก (เมื่อต้องการนำภาพไปเปิดกับโปรแกรม Google Earth) ด้วยโปรแกรม gdalwarp โดยก่อนอื่นเราต้องทราบค่าบริเวณขอบดำเหล่านี้ก่อน (ปกติเป็นศูนย์) และเมื่อเราทราบแล้วเราก็จะบอกให้โปรแกรมทราบว่าค่าเหล่านี้เป็นค่าที่ไม่มีข้อมูล (No data) ให้จัดการทำให้เป็นชั้นข้อมูลเอลฟา (Alpha Layer) ซึ่งโปรแกรมด้านกาประมวลผลภาพส่วนใหญ่จะใช้เจ้าชั้นข้อมูลเอลฟานี้แทนค่าโปร่งใส (Transparent layer) นั่นเอง ตัวอย่างการใช้งานมีดังนี้ครับ

>>gdalwarp -srcnodata [value] -dstalpha [input_file] [output_file]

ตัวอย่างการมใช้งานมีดังนี้่ครับ

>>gdalwarp -srcnodata 0 -dstalpha abc.tif abc_alpha.tif

Monday, November 9, 2009

fwtools 2.4.6 ออกแล้วครับ !!!

วันนี้ได้ลองเข้าไปดูความเคลื่อนไหวของโปรแกรม fwtools เนื่องจากต้องไปช่วยอบรมเรื่อง Digital Image Processing ที่ สทอภ. ปรากฏว่ามีเวอร์ชันใหม่ออกมาแล้วคือ 2.4.6 สามารถดาวน์โหลดได้ ที่นี่ ครับ

Saturday, November 7, 2009

การลดรายละเอียดข้อมูลภาพและการเปลี่ยนภาพสีให้เป็นภาพขาวขดำ (เบื้องต้น) ด้วย GDAL

วันนี้ขอนำเสนอการลดรายละเอียดข้อมูลภาพ (Reduce resolution) และการแปลงภาพสีให้เป็นภาพขาว-ดำ (Color to Grey) อย่างง่ายด้วย gdalwarp (ลดรายละเอียด) และ gdal_translate (เปลี่ยนจากภาพสีให้เป็นภาพขาว-ดำ)

ตัวอย่างนี้สมมุติว่าผมมีภาพสีความละเอียด 1 เมตร ต้องการแปลงให้เป็นภาพขาว-ดำ ที่มีความละเอียดจุดภาพ 10 เมตร (จะเห็นว่าการทำงานนี้ประกอบด้วย 2 ขั้นตอนนะครับคือ ลดรายละเอียดและแปลงระบบสี)

ผมขอเริ่มด้วยการลดรายละเอียดข้อมูลภาพก่อนด้วย gdalwarp ซึ่งใช้คำสั่งดังนี้

>>gdalwarp -tr 10 10 -r cubic sample.tif resize.tif

โดย option "-tr" หมายถึง การกำหนดขนาดของจุดภาพ (GSD) ของไฟล์ผลลัพธ์ที่ต้องการ
และ option "-r" หมายถึง วิธีการ resampling จากตัวอย่างผมเลือกใช้วิธี Cubic Convolution

หลังจากได้ภาพที่ลดรายละเอียดจุดภาพลงแล้วเราจะทำการแปลงภาพสีให้เป็นภาพขาว-ดำด้วยโปรแกรม gdal_translate ดังนี้ครับ

>>gdal_translate -b 1 resize.tif resize_grey.tif

โดย option "-b" หมายถึง ให้เลือกให้เลือกเอาเฉพาะช่วงคลื่น (Band) ที่ต้องการเท่านั้น (จากตัวอย่างคือเอาเฉพาะช่วงคลื่นที่ 1 เท่านั้น)

ผลลัพธ์ที่ได้จากตัวอย่างนี้คือภาพต้นฉบับ (ภาพสี 3 ช่วงคลื่นขนาดจุดภาพ 1 เมตร) จะถูกแปลงให้เป็นภาพขาว-ดำ (1 ช่วงคลื่น) ที่มีความละเอียดจุดภาพ 10 เมตร และหากท่านใดต้องการทำกระบวนการนี้กับข้อมูลภาพจำนวนมากก็สามารถใช้การทำงานแบบ Batch processing ได้ครับ (ลองหาตัวอย่างการใช้งาน Batch processing ใน Blog นี้ดูนะครับ)

Friday, November 6, 2009

การแปลง Format ของข้อมูลเวคเตอร์ด้วย GDAL/OGR

วันนี้ขอนำเสนอการแปลงรูปแบบข้อมูลเวคเตอร์ เช่น การแปลงไฟล์ DGN ให้เป็น KML เป็นต้น
การทำงานให้ใช้คำสั่ง ogr2ogr ซึ่งมี syntax การใช้งานดังนี้ครับ

>>ogr2ogr -option output_file input_file

โดย option ที่สำคัญมีดังนี้
-f "format_name" ใช้สำหรับการระบุ format ของผลลัพธ์ที่ต้องการ เช่น -f "KML" หรือ -f "ESRI Shapefile" เป็นต้น
-s_srs ใช้สำหรับการระบุระบบอ้างอิงทางตำแหน่งของไฟล์ต้นฉบับ เช่น -s_srs epsg:4326 หรือ -s_srs epsg:32647 เป็นต้น
-t_srs ใช้สำหรับการระบุระบบอ้างอิงทางตำแหน่งของไฟล์ผลลัพธ์

ตัวอย่างการใช้งาน

>>ogr2ogr -f "KML" index.kml index.shp

นอกจากนี้เรายังสามารถแปลงระบบอ้างอิงทางตำแหน่ง (ระบบพิกัด) พร้อมกับการแปลง format ในคำสั่งเดียวดังนี้

>>ogr2ogr -s_srs epsg:32647 -t_srs epsg:4326 -f "KML" index.kml index.shp

Thursday, October 22, 2009

ขอเชิญรับฟังการบรรยายพิเศษหัวข้อ "Advances in Photogrammetry : Airborne, Trerrestrial and Mobile Laser Scanning"

เรียนเชิญทุกท่านเข้ารับฟังการบรรยายพิเศษในหัวข้อ "Advances in Photogrammetry : Airborne, Trerrestrial and Mobile Laser Scanning” โดย Professor Dr. George Vosselmann (Editor-in-Chief of the ISPRS Journal of Photogrammetry and Remote Sensing) จากสถาบัน ITC, Netherland.
กำหนดการมีดังนี้ครับ
วันที่ 29 ตุลาคม 2552
9:00-11:00 Special Lecture at the Faculty of Engineering , ( 200 Academician and Professionals)
“Advances in Photogrammetry : Airborne, Trerrestrial and Mobile Laser Scanning”

Thursday, October 15, 2009

การทำ Histogram Equalization ด้วย gdalenhance (ของฟรีและดีก็มีในโลก)

วันนี้ขอเสนอเทคนิคการทำ Histogram Equalization ของข้อมูลาพด้วย GDAL (gdalenhance) ตัวอย่างการใช้งานเช่น การแปลงข้อมูลภาพแบบ 16bit ให้เป็น 8bit เป็นต้น โดยโครงสร้างคำสั่งการใช้งาน gdalenhance มีดังนี้ครับ

>>gdalenhance -ot [dataType] -equlize input_file out_file

ส่วนตัวอย่างการทำงานมีดังนี้

>> gdalenhance -ot Byte -equlaize dem16b.tif dem8b.tif

Tuesday, October 13, 2009

การผสมสี (Color composition)

จากคราวที่แล้วได้แนะนำการสร้างแผนที่เฉดสี ครั้งนี้มีตัวช่วยสำหรับการกำหนดค่าของแม่สีต่างๆตามต้องการดังภาพครับ

File:AdditiveColor.svg
(อ้างอิงจาก http://en.wikipedia.org/wiki/File:AdditiveColor.svg)

จากภาพข้างต้นสามารถสรุปได้ดังนี้ครับ
สีแดง ค่าที่กำหนดคือ 255 0 0
สีเขียว ค่าที่กำหนดคือ 0 255 0
สีน้ำเงิน ค่าที่กำหนดคือ 0 0 255
สีเหลือง ค่าที่กำหนดคือ 255 255 0
สีฟ้า ค่าที่กำหนดคือ 0 255 255
สีม่วงแดง ค่าที่กำหนดคือ 255 0 255
สีขาว ค่าที่กำหนดคือ 255 255 255

หากต้องการสีมากกว่านี้อาจลดค่าของแม่สีหลักที่ผสมกัน เช่นต้องการสีเหลือง (แดง +เขียว) อ่อนให้ลดค่าของแม่สีแดงหรือเขียวลงจาก 255 เป็น 200 เป็นต้น

การสร้างแผนที่เฉดสีสำหรับข้อมูลแบบจำลองระดับสูงเชิงเลขด้วย GDAL (ของฟรีและดีก็มีในโลก)

วันนี้ขอนำเสนอวิธีการสร้าง Color relief สำหรับข้อมูลแบบจำลองระดับสูงเชิงเลข (Digital Elevation Model - DEM) ด้วย GDAL อย่างง่าย โดยหลักการที่สำคัญของการทำงานนี้คือ การแยกความแตกต่างด้านความสูงด้วยสีต่างๆ หรือการกำหนดค่าระดับความสูงและค่าของสีให้กับพื้นที่ต่างๆ เช่น พื้นที่ภูเขา (ความสูงมาก) แทนด้วยสีแดง ส่วนพื้นที่ราบ (ความสูงน้อย) แทนด้วยสีเขียว และพื้นที่ไม่สูงมากนักแทนด้วยสีเหลือง เป็นต้น
การทำงานก็สามารถทำได้โดยการใช้คำสั่งดังนี้ครับ

>>gdaldem color-relief input_file color_text_file output_color_relief_map

โดยที่

gdaldem คือ คำสั่งที่ใช้ทำงาน
color-relief คือ option สำหรับการสร้างแผนที่เฉดสี (แปลจากคำว่า color relief map)
input_file คือ ไฟล์แบบจำลองระดับสูงเชิงเลข (DEM)
color_text_file คือ ไฟล์ที่กำหนดค่าความสูงและค่าของแม่สีต่างๆ
output_color_relief_map คือ ไฟล์ผลลัพธ์ที่ได้ซึ่งก็คือ แผนที่เฉดสีนั่นเอง

วิธีการสร้าง color_text_file มีดังนี้ครับ
คอลัมน์แรกคือค่าความสูงที่กำหนด คอลัมน์ที่สองคือ ค่าของแม่สีแดง คอลัมน์ที่สามคือ ค่าของแม่สีเขียวและคอลัมน์ที่สี่คือ ค่าของแม่สีน้ำเงิน ดังนี้

Height Red Green Blue
... ... ... ...
... ... ... ...
... ... ... ...

ตัวอย่างการใช้งานจริงมีดังนี้
300.0 20 255 150
325.0 20 255 80
350.0 20 255 00
375.0 255 255 0
400.0 255 200 00
425.0 255 50 0
450.0 255 0 0
โดยข้อมูลเหล่านี้ต้องจัดเก็บในรูปไฟอักขระ (Text file) ธรรมดาทั่วไป (*.txt)
มาดูตัวอย่างการใช้งานจริงกันนะครับ
ผมมีไฟล์แบบจำลองระดับสูงเชิงเลขดังภาพนี้

และสร้าง color_text_file โดยผมได้กำหนดค่าความสูง (Height) ค่าของแต่ละแม่สี (Red Green Blue - RGB) และบันทึกในรูป Text file ชื่อ dem_legend.txt ดังนี้

หลังจากนั้นผมจึงใช้คำสั่ง gdaldem เพื่อสร้างแผนที่เฉดสีดังนี้

>>gdaldem color-relief dem.tif dem_legend.txt dem_relief.tif

ผลลัพธ์ที่ได้มีดังภาพตัวอย่างดังนี้

Wednesday, September 30, 2009

gdalwarp แบบกำหนดค่าพิกัดจุดควบคุม (ของฟรีและดีก็มีในโลก)

วันนี้ขอเสนอ การใช้งาน gdalwarp แบบใช้ค่าพิกัดจุดควบคุม ตัวอย่างของการทำงานนี้คือ วิธีการแปลงระบบพิกัดจากข้อมูลภาพที่ไม่มีระบบพิกัดให้มีระบบพิกัดตามต้องการ เช่น แปลงข้อมูลภาพแผนที่ภูมิประเทศที่ผ่านการสแกนให้มีระบบพิกัด หรือข้อมูลภาพถ่ายดาวเทียมที่ไม่มีค่าพิกัดให้มีค่าพิกัด เป็นต้น
ขั้นตอนการทำงานโดยย่อมีดังนี้ครับ

1. กำหนดค่าพิกัดของจุดควบคุม
ค่าพิกัดของจุดควบคุมนั้นเป็นค่าที่ได้จาก การรังวัดบนภาพและการรังวัดค่าพิกัดบนพื้นดิน (อาจจะใช้การวัดจากแหล่งข้อมูลอื่น เช่น วัดจากข้อมูลภาพถ่ายทางอากาศ) รูปแบบข้อมูลที่จัดเก็บมีดังนี้ครับ
Image Coordinate (x, y) และ Ground Coordinate (E, N) เช่น 1 1 98.85231 18.93516 ซึ่งหมายถึง ข้อมูลภาพที่มีพิกัด (1,1) นั้นจะมีพิกัดพื้นดิน (98.85231,18.93516 ) เป็นต้น สำหรับการทดลองครั้งนี้ผมได้ลองใช้จุดควบคุมทั้งสิ้น 4 จุดดังนี้
จุดที่ 1 มีค่าพิกัด 1 1 98.85231 18.93516
จุดที่ 2 มีค่าพิกัด 12000 1 99.10726 18.89724
จุดที่ 3 มีค่าพิกัด 12000 12000 99.05081 18.67978
จุดที่ 4 มีค่าพิกัด 1 12000 98.79618 18.71761
2. เพิ่มค่าพิกัดของจุดควบคุมใส่ข้อมูลภาพ
เป็นการเพิ่มข้อมูลเกี่ยวกับจุดควบคุมเข้าสู่ข้อมูลภาพ การทำงานขั้นตอนนี้สามารถทำได้โดยการใช้งานผ่าน gdal_translate ดังตัวอย่างดังนี้
gdal_translate -gcp [x y E N] ... input_file output_file
ตัวอย่งเช่น
>>gdal_translate -gcp 1 1 98.85231 18.93516 -gcp 12000 1 99.10726 18.89724 -gcp 12000 12000 99.05081 18.67978 -gcp 1 12000 98.79618 18.71761 sample.tif sample_gcp.tif
3. การแปลงระบบพิกัด
เป็นขั้นตอนที่ใช้ข้อมูล(ค่าพิกัด)ที่อยู่ในข้อมูลภาพมาทำการแปลงระบบพิกัดการใช้งานสามารถทำงานได้ผ่านโปรแกรม gdalwarp ดังตัวอย่างดังนี้
>>gdawarp -r cubic -t_srs epsg:4326 sample_gcp.tif sample4326.tif

ข้อพึงระวัง
  • โปรแกรมยังไม่สามารถแสดงเศษเหลือ (Residual) ของจุดควบคุมได้ทำให้เราไม่ทราบว่าจุดควบคุมเหล่านั้นมีความคลาดเคลื่อนมากน้อยเพียงใด

Friday, September 25, 2009

การแก้ปัญหาระบบสมการเชิงเส้นด้วย Octave และตัวอย่างสำหรับการแปลงแบบสัมพรรค (ของฟรีและดีก็มีในโลก)

วันนี้ขอแนะนำวิธีการแก้ปัญหาระบบสมการแบบใช้เมทริกซ์เข้ามาช่วย (ลืมเรื่องสมการเชิงเส้นและเมทริกซ์กันรึยังครับ แฮะๆ) ตัวอย่างผมมีระบบสมการเชิงเส้นแบบสองตัวแปร (ตัวไม่รู้ค่า 2 ตัว) ดังนี้
2x + y = 19 ----- (1)
x + y = 14 ----- (2)
ถ้าเป็นสมัยมัธยมต้นเราก็จะใช้วิธีย้ายข้างสมการ ดังนี้ครับ
เริ่มต้นจากย้ายข้าง สมการที่ (1) จะได้ y = 19 + 2x แล้วแทนค่า y ในสมการที่ (2) จะได้ค่า x เท่ากับ 5
หลังจากนั้นให้แทนค่า x ในสมการที่ (1) หรือ (2) ก็ได้แล้วจะได้ค่า y = 9
ดังนั้นจากระบบสมการดังกล่าวเราจะได้ค่า x และ y เท่ากับ 5 และ 9 ตามลำดับ

จากตัวอย่างดังกล่าวจะเห็นได้ว่าขั้นตอนไม่ค่อยซับซ้อนเท่าไหร่นะครับ คราวนี้เรามาดูตัวอย่างที่มีการใช้งานจริงในด้านภูมิสารสนเทศนะครับ
สมมุติผมต้องการแปลงระบบพิกัดของข้อมูลภาพ (Image Georeferencing) โดยอาศัยการแปลงแบบสัมพรรคแบบสองมิติ (2D Affine Transformation) ซึ่งก็คือสมการโพลีโนเมียลกำลังหนึ่ง (1st order polynomial) นั่นเอง ก่อนอื่นผมต้องคำนวณก่อนว่าหากใช้สมการโพลีโนเมียลกำลังหนึ่งนั้นต้องรังวัดจุดควบคุมภาคพื้นดินและรังวัดบนภาพทั้งหมดกี่จุด (วิธีการคำนวณดูได้จากกระทู้ก่อนหน้านี้ ที่่นี่ ) เพื่อความสะดวกและง่ายต่อการอธิบายผมขออนุญาตใช้จำนวนสมการเท่ากับจำนวนตัวไม่รู้ค่า (Unknown) หรือแค่ให้พอหาคำตอบได้เท่านั้นแต่ไม่เหมาะกับการทำงานจริง (การทำงานจริงควรรังวัดให้เกินพอนะครับ จำนวนจุดยิ่งเยอะและค่า residual น้อยๆยิ่งดีครับ)
สรุป นะครับ หากต้องการแปลงระบบพิกัดด้วยการแปลงสัมพรรคแบบสองมิติ นั้นต้องใช้ จุดควบคุม 3 จุด (ขั้นต่ำ)
สำหรับครั้งนี้ผมสมมุติว่าผมรังวัดค่าพิกัดภาพ (Image Coordinate) และพิกัดพื้นดิน (Ground Coornidate) ได้ดังนี้ครับ

โดย (ix,iy) คือพิกัดที่วัดได้บนภาพหรือพิกัดภาพนั่นเอง ส่วน (gX,gY) คือค่าพิกัดพื้นดิน (ระบบใดๆก็ได้ ตัวอย่างนี้ผมขอใช้ระบบพิกัดภาพเทียบกับระบบพิกัดกริด UTM 47N) และจากระบบสมการโพลีโนเมียลกำลังหนึ่งหรือสมการการแปลงแบบสัมพรรคซึ่งมีรูปสมการดังนี้

Xi = a (xi) + b (yi) + c
Yi = d (xi) + e (yi) + f

จากสมข้างต้นจะเห็นได้ว่าถ้าเราต้องการทราบพิกัดของจุดภาพใดๆ(จุดใดก็ได้บนภาพ) ว่ามีค่าพิกัดพื้นดิน (UTM 47N) เป็นเท่าไหร่ เราก็สามารถทำได้เพียงใส่ค่าพิกัดภาพ (xi,yi) แทนลงไปในสมการก็จะได้ค่าพิกัดพื้นดิน (Xi,Yi) ทันที
ง่ายไหมครับ ดูผ่านๆหมือนง่ายนะครับ แต่จากสมการข้างต้นสิ่งที่เรายังไม่รู้คือค่าของสัมประสิทธิ์ (Coeficient) ต่างๆ ซึ่งก็คือค่า a,b,c,d,e,f นั่นเอง แล้วเราจะหาได้อย่างไรละครับ (ค่าสัมประสิทธิ์เหล่านี้จะได้จากการหาความสัมพันธ์ระหว่างระบบพิกัดทั้งของโดยใช้ค่าพิกัดของจุดร่วมหรือ Common points ที่เรารังวัดได้จากทั้งระบบพิกัดภาพและระบบพิกัดพื้นดิน)

วิธีการก็คือเราสามารถหาได้โดยอาศัยความสัมพันธ์ของพิกัดจุดภาพและพิกัดพื้นดิน (จากรังวัดจุด) จากตารางตัวอย่างข้างบนครับ ขั้นตอนต่อไป ผมจะทำการแทนค่าพิกัดของจุดร่วมที่รังวัดระบบบนภาพและระบบพิกัพื้นดิน ซึ่งจะได้ระบบสมการใหม่ดังนี้ (วัด 3 จุดจะได้ 6 สมการ)
499271.67=a(8445.75)+b(6611.75)+c ----(1)
2074132.01=d(8445.75)+e(6611.75)+f ----(2)
487786.57=a(3436.19)+b(8011.69)+c ----(3)
2073436.38=d(3436.19)+e(8011.69)+f ----(4)
497860.20=a(8433.13)+b(9457.38)+c ----(5)
2068443.25=d(8433.13)+e(9457.38)+f ----(6)

ระบบสมการข้างต้นจะเห็นว่าจำนวนสมการ (6 สมการ) เท่ากับจำนวนตัวไม่รู้ค่า (6 ตัวคือ a,b,c,d,e,f)
ดังนั้นสามารถหาคำตอบ!!!
แต่............................. ถ้าจะให้มานั่งย้ายข้างสมการไปมาหรือใช้ความรู้ชั้นมัธยมต้นคงจะไม่ไหวแล้วละครับ เพราะว่าตัวเลขมากขึ้นจำนวนสมการก็มากขึ้นตามไปด้วย แล้วเราจะทำยังไงดี ???

วันนี้ผมมีตัวอย่างวิธีการแก้ปัญหาระบบสมการโดยอาศัยเมทริกซ์เข้ามาช่วยมานำเสนอครับ
จากระบบสมการก่อหน้านี้ผมขอจัดระบบสมการใหม่อีกทีและแทนในเมทริกซ์ต่างๆในรูป AX = B ดังนี้ครับ
เมทริกซ์ A บรรจุสัมประสิทธิ์ของตัวไม่รู้ค่า มีขนาด 6x6
เมทริกซ์ X บรรจุตัวไม่รู้ค่า มีขนาด 6x1
เมทริกซ์ B บรรจุค่าพิกัดพื้นดิน มีขนาด 6x1
หลังจากนั้นเราจะใช้คุณสมบัติของเมทริกซ์ ซึ่งไม่สามารถย้ายข้างสมการแบบสมการทั่วๆไปได้ เช่น ย้ายจากฝั่งซ้าย(การคูณ)ไปฝั่งขวา(กลายเป็นการหาร) เป็นต้น
คุณสมบัติของเมทริกซ์นั้นจะย้ายข้างสมการได้แต่เปลี่ยนจากคูณฝั่งซ้ายไปเป็นการคูณด้วยอินเวอร์สที่ฝั่งขวา เช่นจากตัวอย่างข้างต้น AX=B จะเป็น X= Inverse (A)*B ซึ่งความยากคือการหาอินเวอร์สนี่แหละครับ (ซึ่งมีหลายวิธี เช่น Gauss-Jordan เป็นต้น) ครั้งนี้ผมขออนุญาตให้ทุกท่านใช้เครื่องมือฟรี (โปรแกรม) ที่นิยมอย่างมากในแวดวง Open Source ซึ่งคือเจ้า Octave นั่นเอง ซึ่งก็โหลดได้จาก ที่นี่ ครับ (โหลดแล้วติดตั้งกันเลยนะครับ จะได้ทดลองทำตามกันเลย)
หลังจากติดตั้งแล้วให้ทำตามขั้นตอนดังนี้
1) ป้อนค่าเมทริกซ์ A ดังนี้

>>a=[8445.75 6611.75 1 0 0 0;0 0 0 8445.75 6611.75 1;3436.19 8011.69 1 0 0 0;0 0 0 3436.19 8011.69 1;8433.13 9457.38 1 0 0 0;0 0 0 8433.13 9457.38 1]

### สำหรับการป้อนค่าสมาชิกของเมทริกซ์ทนั้นให้ป้อนค่าตัวเลขที่ละแถวซึ่งจะแบ่งค่าของแต่ละคอลัมน์ด้วยการเว้นว่าง (Space) และเมื่อป้อนค่าสมาชิกในแต่ละแถวแล้วการขึ้บรรทัดใหม่นั้นให้ใช้เครื่องหมาย ;

2) ป้อนค่าของเมทริกซ์ B ดังนี้

>>b=[499271.67;2074132.01;487786.57;2073436.38;497860.20;2068443.25]

3) ทำการคำนวณค่าสัมประสิทธ์จากสมการ X=Inverse (A) * (B) โดยพิมพ์คำสั่งในโปรแกรมดังนี้
>>inv (a) * b

4)ผลลัพธ์ที่ได้หมายถึงค่าของสัมประสิทธิ์ของแต่ละตัว (a,b,c,d,e,f) ตามลำดับ

จากตัวอย่างการคำนวณทำให้เราได้ความสัมพันธ์ระหว่างพิกัดภาพและพิกัดพื้นดินดังนี้

Xi = 2.22330667 (xi) - 0.71668202 (yi) + 485888.70006051
Yi = -0.42032228 (xi) - 2.00098553 (yi) + 2090911.96301988

นั่นหมายความว่า จุดภาพที่ (1,1) นั้นค่าพิกัดพื้นดินเท่ากับ (485890.21,2090909.54) และจุดภาพที่ (1,2) มีค่าพิกัดพื้นดินเท่ากับ (485889.49,2090907.54) ... จนถึงจุดภาพสุดท้าย

Friday, September 18, 2009

gdaldem เครื่องมือสำหรับวิเคราะห์และการมองเห็นข้อมูล DEM (ของฟรีและดีก็มีในโลก)

วันนี้ขอแนะนำเครื่องมือสำหรับการวิเคราะห์ (Analyze) และการมองเห็น (Visualize) สำหรับข้อมูลแบบจำลองระดับสูง (DEM) ในตอนแรกนี้จะนำเสนอการคำนวณ ความลาดเอียง (Slope) อย่างง่ายโดยขั้นตอนมีดังนี้ครับ
ก่อนอื่นเราต้องเปลี่ยนที่อยู่ไปยังที่เก็บไฟล์แบบจำลองระดับสูง เช่น
>>cd c:\sample
และใช้คำสั่ง gdaldem ซึ่งมี syntax ดังนี้ครับ

gdaldem -option input_file out_file

ตัวอย่างการคำนวณความลาดเอียงมีดังนี้ครับ

>>gdaldem slope srtm32647.tif slope.tif

หากต้องการให้ผลการคำนวณอยู่ในแบบเปอร์เซนต์ก็ให้เพิ่ม option -p ดังนี้ครับ (ค่าเริ่มต้นหรือค่า default คือหน่วยองศาครับ)

>>gdaldem slope -p srtm32647.tif slope_p.tif

Wednesday, September 9, 2009

หากต้องการแปลงพิกัดด้วยโพลีโนเมียลแล้วต้องใช้จุดควบคุมจำนวนเท่าไหร่???

หลายท่านคงเคยทำการแปลงข้อมูลภาพที่ยังไม่มีระบบพิกัด(โลก)ให้มีระบบพิกัดที่ต้องการ เช่น ระบบพิกัดภูมิศาสตร์หรือระบบพิกัดกริดยูทีเอ็ม หรือที่เรียกกันว่า Image registration หรือ Image warping กระบวนการนี้มีวัตถุประสงค์หลักคือ การทำให้ข้อมูลภาพนั้นมีระบบพิกัดที่ต้องการ ขั้นตอนการทำงานนั้นสามารถทำได้หลากหลายวิธี ซึ่งแต่ละวิธีนั้นมีข้อมูลหรือสิ่งที่ต้องการแตกต่างกัน (ในที่นี้เราจะพูดถึงเฉพาะการแปลงแบบ 2 มิติเท่านั้นนะครับ)
จุดควบคุมภาคพื้นดิน (Ground Control Point - GCP) นั้นจำเป็นอย่างยิ่งสำหรับกระบวนการนี้ เนื่องจากใช้สำหรับอ้างอิงหรือเป็นตัวกำหนดความสัมพันธ์ระหว่างสองระบบพิกัดใดๆ วิธีการได้มาของจุดควบคุมภาคพื้นดินนั้นสามารถทำได้หลายทางเช่น อ่านค่าพิกัดจากแผนที่ภูมิประเทศ แผนที่ภาพหรือการสำรวจภาคสนาม เป็นต้น
หลังจากได้ข้อมูลจุดควบคุมภาคพื้นแล้วสิ่งที่ต้องทำในขั้นต่อไปคือ การเลือกวิธีการแปลงพิกัด ซึ่งมีให้เลือกมากมายเช่น การแปลงแบบ Helmert, Affine หรือ Polynomial เป็นต้น ในส่วนของวิธีการแปลงและการคำนวนค่าของสัมประสิทธิ์ขอข้ามไปก่อนนะครับเนื่องจากมีรายละเอียดค่อนข้างเยอะ (ขี้เกียจพิมพ์นะครับ แฮะๆๆ)
วิธีการที่นิยมใช้กันอย่างแพร่หลายคือการแปลงโดยอาศัยโพลีโนเมียลอันดับต่างๆ ซึ่งแต่ละวิธีนั้นจะให้ความถูกต้อง ความน่าเชื่อถือรวมถึงความยุ่งยากในการคำนวนที่แตกต่างกัน
วันนี้ขอนำเสนอการคำนวนจำนวนจุดควบคุมภาคพื้นดินที่ต้องการ(อย่างน้อย)สำหรับโพลีโนเมียลอันดับต่างๆ การคำนวนหาจำนวนจุดควบคุมที่ต้องการสำหรับโพลีโนเมียลอันดับต่างๆสามารถคำนวนหาได้จากสูตรดังนี้

[(n+1)*(n+2)]/2

โดย n คือ จำนวนอันดับของโพลีโนเมียลที่ต้องการ เช่น หากต้องการแปลงระบบพิกัดด้วยโพลีโนเมียลอับดับที่ 2 (2nd order) จะใช้จำนวนจุดควบคุมอย่างน้อย [(2+1)*(2+2)]/2 หรือเท่ากับ 6 จุด เป็นต้น

ในทางปฏิบัติเรามักจะรังวัดจำนวนจุดควบคุมให้เกินพอเพื่อให้เข้าสู่ระบบ Overdetermined System แล้วจึงเลือกเอาเฉพาะจุดที่มีความถูกต้องและน่าเชื่อถือ (หรือขจัดจุดที่มีความคลาดเคลื่อนสูงออกจากการคำนวน) โดยอาศัยการปรับแก้แบบกำลังสองน้อยที่สุด (Least Square Adjustment)
ข้อดีของการเพิ่มจำนวนจุดควบคุมให้มากกว่าจำนวนจุดที่ต้องการหรือทำให้เข้าสู่ระบบ Overdetermined System คือ เราสามารถขจัดความคลาดเคลื่อนที่แฝงอยู่ในข้อมูลได้ เช่น อาจมีการรังวัดหรือป้อนค่าพิกัดของจุดควบคุมผิดพลาด (Mistake) หรือจุดควบคุมที่เลือกใช้มีความคลาดเคลื่อนสูงเกินกว่าจะยอมรับได้ (ใช้เป็นการตรวจสอบคุณภาพของจุดควบคุมเบื้องต้นได้ด้วยนะ เฮ่อๆๆ) เป็นต้น
ส่วนบางท่านที่ไม่ต้องการจำสูตรก็สามารถดูจำนวนจุดที่ต้องการสำหรับการแปลงระบบพิกัดด้วยโพลีโนเมียลอันดับต่างๆได้ดังนี้ครับ
1st ต้องการจุดควบคุมอย่างน้อย 3 จุด แนะนำให้ใช้อย่างน้อย 4 จุดสำหรับการทำงานจริง (หรือการแปลงแบบ Affine)
2nd ต้องการจุดควบคุมอย่างน้อย 6 จุด แนะนำให้ใช้อย่างน้อย 7 จุดสำหรับการทำงานจริง
3rd ต้องการจุดควบคุมอย่างน้อย 10 จุด แนะนำให้ใช้อย่างน้อย 11 จุดสำหรับการทำงานจริง
4th ต้องการจุดควบคุมอย่างน้อย 15 จุด แนะนำให้ใช้อย่างน้อย 16 จุดสำหรับการทำงานจริง
5th ต้องการจุดควบคุมอย่างน้อย 21 จุด แนะนำให้ใช้อย่างน้อย 22 จุดสำหรับการทำงานจริง

Friday, August 21, 2009

การแปลงระบบอ้างอิงทางตำแหน่งสำหรับข้อมูลภาพและข้อมูลกริด (ของฟรีและดีก็มีในโลก)

วันนี้ขอนำเสนอการแปลงระบบอ้างอิงทางตำแหน่ง (ระบบพิกัด) สำหรับข้อมูลภาพและข้อมูลกริด (แรสเตอร์) ด้วย FWTools ดังนี้ครับ
ก่อนอื่นต้องทราบว่ารหัสของระบบอ้างอิงทางตำแหน่งหมายถึงอะไรก่อนนะครับ เช่น 32647 หรือ 4326 เป็นต้น โดยผมได้สรุปและสร้างเป็นตารางดังภาพตัวอย่างดังนี้ตัวอย่างการใช้งานมีดังนี้ครับจากภาพตัวอย่างเป็นการแปลงระบบอ้างอิงทางตำแหน่ง (Spatial reference System - SRS) จากระบบเดิม (จากตัวอย่างผมไม่ได้ระบุระบบอ้างอิงทางตำแหน่งของไฟล์ต้นฉบับเพราะทราบอยู่แล้วต้นฉบับนั้นมีระบบอ้างอิงทางตำแหน่งคือ 4326) ไปเป็นระบบใหม่คือ 32647 โดยใช้ option "-t_srs" โดยมีไฟล์ต้นฉบับคือ gdem4326.tif และไฟล์ผลลัพธ์คือ gdem32647.tif
ส่วน option ที่น่าสนใจสำหรับการแปลงระบบอ้างอิงทางตำแหน่งมีดังนี้ครับ
  • การกำหนดขนาดจุดภาพ [-tr Xsize Ysize] เช่น -tr 30 30 เป็นต้น โดยหน่วยของจุดภาพจะเป็นไปตามระบบอ้างอิงทางตำแหน่งครับ
  • วิธี Resampling เช่น -r bilinear หรือ -r cubic เป็นต้น
การระบุ option นั้นให้ทำการระบุก่อน(ข้างหน้า)ชื่อไฟล์เสมอ เช่น

>gdalwarp -t_srs epsg:32647 -tr 30 30 -r cubic gdem4326.tif gdem32647.tif

Thursday, August 13, 2009

เลือกเส้นทางการเดินทางด้วยรถสาธารณะผ่าน Google Maps

วันนี้ขอแนะนำ การค้นหาเส้นทางผ่าน Google Maps แบบการเดินทางด้วยรถสาธารณะ (Public Transit) ก่อนหน้านี้ บางท่านอาจจะเคยค้นหาเส้นทางการเดินทางผ่าน Google Maps ซึ่งเลือกวิธีเดินทางได้ 2 แบบคือ ด้วยรถยนต์ (Car) และการเดินทางด้วยการเดิน (Walking) ซึ่งบางครั้งคนที่ไม่มีรถยนต์ส่วนตัว (เช่น คนจนๆอย่างกระผม แฮะๆๆ) หรือไม่สะดวกที่จะใช้รถยนต์ แต่ต้องการทางเลือกอื่นๆสำหรับการเดินทาง เราสามารถใช้ Google Maps ช่วยได้ไหม ???? คำตอบคือ ณ วันนี้ได้แล้วครับ เนื่องจากพี่ใหญ่ใจดี อย่าง Google ได้มีการเพิ่มบริการที่เป็นทางเลือกสำหรับผู้ใช้งานอีกกลุ่มหนึ่ง (ไม่ใช้การเดินทางด้วยรถยนต์หรือการเดิน) ด้วยการเพิ่มทางเลือกสำหรับการเดินทางด้วยรถสาธารณะ เช่น รถโดยสารประจำทาง หรือรถเมล์นั่นแหละครับ การเดินทางแบบนี้ ในบางครั้งอาจต้องมีการเดินร่วมด้วย เนื่องจากบางสถานที่ไม่มีรถเมล์ผ่าน เรามาดูตัวอย่างกันนะครับ
สมมุติว่าผมต้องการเดินทางจากที่พักไปยังมหาวิทยาลัย หากเลือกการเดินทางด้วยรถสาธารณะจะได้ผลลัพธ์ดังภาพตัวอย่างจากผลการเลือกเส้นทางจะพบว่าข้อมูลการเดินทางที่ได้จาก Google Maps นั้นยังมีความคลาดเคลื่อนเกี่ยวกับจุดขึ้นรถเมล์ เนื่องจากรถเมล์สาย 16 (อู่ศรีณรงค์ - สุรวงศ์) นั้นไม่ผ่านช่วงถนนประชาราษฏร์สาย 1 บริเวณวัดบางโพโอมาวาส แต่จะผ่านช่วงโรงเรียนพณิชยาการบางโพ (ตรงสี่แยกไปท่าน้ำบางโพ) และหากผมเลื่อนจุดเริ่มต้นการเดินทาง (A) มาบริเวณต้นซอยประชานฤมิตรจะพบว่า Google Maps นั้นจะเปลี่ยนสายรถเมล์ให้จากสาย 16 เป็น 505 แล้วไปต่อรถเมล์สาย 93 ดังภาพตัวอย่าง ซึ่งทั้งสองวิธีการเดินทางนั้นถูกต้องทั้งคู่ (สามารถเดินทางได้ทั้งรถเมล์สาย 16 และ 505)จากตัวอย่างการใช้งานเบื้องต้น พบว่าแม้จะมีความเคลื่อนอยู่บ้างแต่ก็ยังดีกว่าไม่มีทางเลือกสำหรับการเดินทางโดยเฉพาะรถสาธารณะ ครับ!!!
โดยส่วนตัวผมคิดว่า หากทาง Google ได้ทำการปรับปรุงข้อมูลให้มีความถูกต้องมากกว่านี้จะทำให้ผลลัพธ์ที่ได้ออกมาตรงกับความเป็นจริงมากยิ่งขึ้น ซึ่งการปรับปรุงข้อมูลนั้นจำเป็นอย่างยิ่งที่ต้องอาศัย ระยะเวลา งบประมาณ บุคคลกร และเทคโนโลยีต่างๆที่เกี่ยวข้อง ดังนั้นผมจึงขอเอาใจช่วยให้พี่ใหญ่ใจดีอย่าง Google ได้มีการพัฒนาอย่างต่อเนื่อง เพื่อที่จะได้อยู่กับผู้นิยมใช้ของฟรีและดี อย่างกระผมไปอีกนานๆ ครับ

Tuesday, August 11, 2009

สร้างเส้นชั้นความสูงง่ายๆด้วย gdal_contour (ของฟรีและดีก็มีในโลก)

วันนี้ขอนำเสนอวิธีการสร้างเส้นชั้นความสูงจากข้อมูลแบบจำลองระดับสูงเชิงเลข (Digital Elevation Model - DEM) ด้วยโปรแกรม FWTOOLS การทำงานนั้นอาศัยการสั่งงานแบบ command line โดยทุกท่านเรัียนรู้ได้ดังตัวอย่างการใช้งานดังต่อไปนี้
ก่อนอื่นทุกท่านต้องมีโปรแกรม FWTOOLS (ที่เราจะใช้จริงๆคือ คลังโปรแกรม GDAL/OGR ที่ผนวกเข้ามาอยู่ในโปรแกรม FWTOOLS เรียบร้อยแล้ว) เสียก่อนหากยังไม่มีสามารถดาวน์โหลดได้ ที่นี่ ครับ
หลังจากติดตั้งโปรแกรมเรียบร้อยแล้วให้ทุกท่านเข้าสู่โปรแกรมในโหมด FWTOOLS Shell โดยการเลือกที่ไอคอนบนหน้าเดสทอป หรือเลือกที่ Start --> Programs --> FWTools 2.x.x--> FWTools Shell ต่อมาให้เปลี่ยนไดเรกทอรีไปยังที่จัดเก็บข้อมูลแบบจำลองระดับสูงเชิงเลข ดังภาพตัวอย่าง
ภาพตัวอย่างคำสั่งเปลี่ยนไดเรกทอรี

เมื่อเปลี่ยนไดเรกทอรีมายังที่จัดเก็บข้อมูลแบบจำลองระดับสูงเชิงเลขแล้วให้ทำการสั่งคำสั่งการสร้างเส้นชั้นความสูงอย่างง่ายดังไวยากรณ์ดังนี้
>>gdal_contour -i [interval] -a [attribute] input_file output_file
ตัวอย่างการสร้างเส้นชั้นความสูงมีดังนี้
>>C:\GDEM>gdal_contour -i 20 -a "height" GDEM.tif contour.shp
ตัวอย่างผลลัพธ์ที่ได้มีดังภาพต่อไปนี้
ภาพตัวอย่างเส้นชั้นความสูงที่ได้จากการใช้ gdal_contour

!!!!ข้อควรระวัง!!!!
  • หน่วยของระยะห่างเส้นชั้นความสูง (Interval) เป็นหน่วยเดียวกับระบบอ้างอิงเชิงตำแหน่ง เช่น ระบบพิกัดกริดจะมีหน่วยเป็นเมตร เป็นต้น
  • ชื่อของข้อมูลอรรถาธิบาย (Attribute) ควรมีเครื่องหมาย " " เพื่อความไม่กำกวมของคำสั่ง
  • หากไม่ีการกำหนดรูปแบบไฟล์ผลลัพธ์โปรแกรม gdal_contour จะใช้รูปแบบ ERSI Shapefile เป็นค่าเริ่มต้น
  • สำหรับการใช้งานในประเทศไทย เพื่อความสะดวกควรแปลงระบบอ้างอิงเชิงตำแหน่งให้อยู่ในระบบพิกัดกริด UTM ด้วยคำสั่ง gdalwarp เสียก่อน

Wednesday, August 5, 2009

Fwtools 2.4.3 ออกแล้วครับ...

ช่วงนี้ใกล้สอบ Numerical Analysis in Geomatics ทำให้ไม่ค่อยมีเวลามาเพิ่มเติมเนื้อหาสักเท่าไหร่ วันนี้ขอแนะนำแค่ซอฟต์แวร์ที่มีการออกรุ่นใหม่เท่านั้นนะครับ
Fwtools เวอร์ชันล่าสุด (2009/08/05) คือ 2.4.3 ดาวน์โหลดได้ ที่นี่ ครับ

Tuesday, July 28, 2009

การเปลี่ยนชื่อไฟล์ (เพิ่มคำนำหน้า)

ตัวอย่างการแก้ไขจาก abc001.tif, abc002.tif และ abc003.tif (ไฟล์เดิม) ไปเป็น myFiles_abc001.tif, myFiles_abc002.tif และ myFiles_abc003.tif โดย "myFiles_" คือคำนำหน้า (Prefix) ที่ต้องการเพิ่มเข้าไป ดังนี้

#FOR %i IN (*.tif) DO rename %i myFiles_%i

การรังวัดด้วยภาพเบื้องต้น (2) : พื้นฐานตรีโกณมิติ (Trigonometry)

ในงานการรังวัดด้วยภาพได้อาศัยทฤษฏีทางคณิตศาสตร์มากมายเพื่อช่วยในกระบวนการทำงาน ตรีโกณมิติถือว่าเป็นพื้นฐานอย่างหนึ่งที่มีส่วนสำคัญอย่างยิ่งสำหรับงานการรังวัดด้วยภาพ (ทั้งแบบดั้งเดิมและการรังวัดด้วยภาพเชิงเลข - Digital Photogrammetry) การนำเสนอครั้งนี้ขอทบทวนเนื้อหาที่เคยได้เรียนมาแล้ว(สำหรับผมลืมไปเกือบหมดแล้ว แฮะๆๆ) ดังนี้นอกจากนี้ยังมีทฤษฏี ตรีโกณทรงกลม (Spherical Trigonometry) สำหรับอธิบายความสัมพันธ์ระหว่างด้านและมุม บนทรงกลม ซึ่งมีการประยุกต์ใช้งานสำหรับการคำนวณระยะและมุมบนทรงกลม (เช่น โลก) ตัวอย่างของความสัมพันธ์มีดังนี้ครับ

Monday, July 27, 2009

gdal_merge อย่างง่าย... (ของฟรีและดีก็มีในโลก)

วันนี้ขอนำเสนอ การใช้งาน gdal_merge อย่างง่าย โดยจะขอทดลองกับข้อมูล GDEM โดยการใช้งาน gdal_merge นั้นจะแตกกต่างกับคำสั่ง gdal อื่นๆ คือ ต้องระบุผลลัพธ์ (Output file) ก่อนแล้วจึงระบุไฟล์ต้นฉบับ การใช้งานเบื้องต้นเป็นไปตาม syntax ดังนี้ครับ
#gdal_merge [option] [output file] [input files] ซึ่งตัวอย่างการใช้งานดังนี้ครับ
#gdal_merge -of GTiff -o output.tif abc1.tif abc2.tif abc3.tif abc4.tif
จากตัวอย่างดังกล่าว จะเห็นว่าการระบุไฟล์ต้นฉบับที่มากกว่า 1 ไฟล์นั้นค่อนข้างยุ่งยาก เราสามารถใช้เครื่องหมาย * เข้ามาช่วยในคำสั่งได้ดังนี้ครับ
#gdal_merge -of GTiff -o sample.tif *.tif

Friday, July 24, 2009

การรังวัดด้วยภาพเบื้องต้น (1)

วันนี้ผมขอนำเสนอความรู้เบื้องต้นเกี่ยวกับการรังวัดด้วยภาพเบื้องต้น โดยมีแหล่งอ้างอิงที่สำคัญคือ หนังสือ Elements of Photogrammetry (with Applications in GIS) ที่เขียนโดย Pual R. Wolf และ Bon A. Dewitt และหนังสือ Digital Photogrammetry ที่เขียนโดย Yves Egels และ Michel Kasser
ทั้งนี้อาจมีข้อมูลบางอย่างคลาดเคลื่อน (อันเนื่องจากความไม่รู้ของกระผมเอง)จึงไม่แนะนำให้อ้างอิง (ควรอ้างอิงจากแหล่งข้อมูลต้นฉบับโดยตรง) ซึ่งผมมีวัตถุประสงค์หลักของการสร้าง Blog นี้คือ เอาไว้เตือนความจำตัวเองขณะทำงานวิจัย (อายุมากขึ้นทำให้ความจำเริ่มสั้นลง แฮะๆๆ)
...มาเข้าเรื่องกันดีกว่าครับ...
การรังวัดด้วยภาพ (Photogrammetry) ได้มีการนิยามโดย American Society for Photogrammetry and Remote Sensing (ASPRS) คือ ศาสตร์ ศิลป์และเทคโนโลยีของการได้มาซึ่งข้อมูลอย่างน่าเชื่อถือเกี่ยวกับวัตุทางกายภาพและสิ่งแวดล้อมโดยผ่านกระบวนการบันทึก การรังวัดและการแปลตีความข้อมูลภาพและรูปแบบการบันทึกพลังงานคลื่นแม่เหล็กไฟฟ้ารวมถึงปรากฏการณ์อื่นๆ(ที่เกี่ยวข้อง)
โดยทั่วไปแล้วข้อมูลภาพที่ใช้ในงานสาขานี้จะแบ่งออกเป็น 2 ประเภทได้แก่
  1. ข้อมูลภาพจากอากาศ (Aerial photos) จากการบันทึกด้วยอากาศยาน (Airborne vehicle) เช่น เครื่องบิน อากาศยานไร้คนขับ (Unmanned Aerial Vehicle - UAV)หรือเฮลิคอปเตอร์ เป็นต้น ในปัจจุบันนั้นยังรวมไปถึงอวกาศยาน (Spaceborne vehicle) เช่น ดาวเทียมหรือกระสวยอวกาศ อีกด้วย
  2. ข้อมูลภาพที่บันทึกบนโลก (Terrestrial photos) ที่มีการบันทึกด้วยอุปกรณ์บนพื้นโลก (Earth based)
จากคำนิยามข้างต้น อาจสรุปได้ว่าการรังวัดด้วยภาพนั้นประกอบด้วย 2 ส่วนหลักคือ การวัดและการแปลตีความบนข้อมูลภาพ (Metric and Interpretive Photogrammetry)
การรังวัดด้วยภาพนั้นอาศัยเทคนิคและวิทยาศาสตร์ทางด้านแสงและการมองเห็น (Optic) โดยเราจะสนใจคุณสมบัติหลักของแสง 2 ประเภทหลักคือ คุณลักษณะทางกายภาพและคุณลักษณะทางเรขาคณิต ทางกายภาพแสงจะเดินทางผ่านตัวกลาง (เช่น อากาศ) ในรูปของคลื่นแม่เหล็กไฟฟ้าจากแหล่งกำเนิด ซึ่งในบางกรณีอาจเรียกว่า การแผ่รังสี (Radiation) ความเร็วของแสงนจากแหล่งกำเนิดจะเรียกว่า อัตราความเร็ว (Velocity) ซึ่งสัมพันธ์กับ ความถี่และความยาวคลื่น (Frequency and Wavelength) ดังสมการต่อไปนี้โดยอัตราความเร็วของแสงที่เคลื่อนที่ในสุญญากาศเท่ากับ 299,792,458 เมตรต่อวินาที ส่วนคุณลักษณะทางเรขาคณิตของแสงนั้นจะพิจารณาการเดินทางของแสงแบบ เส้นตรง จากแหล่งกำเนิดครับ

Tuesday, July 14, 2009

คัดลอกไฟล์ที่ต้องการในบรรทัดเดียว

ช่วงนี้ดาวน์โหลด ASTER GDEM มาลองใช้งาน แต่เจอปัญหาอย่างหนึ่งคือ เมื่อ extract ไฟล์ออกมาแล้ว ดันแยกออกเป็นโฟลเดอร์ต่างๆตามพื้นที่คลอบคลุม (ชื่อไฟล์) หากต้องการคัดลอกเอาเฉพาะไฟล์ DEM ที่ต้องการของแต่ละพื้นที่ออกมาเพื่อ Mosaic ให้เป็นผืนเดียว ซึ่งจะต้องมานั่งคลิกเลือกเข้าไปที่ละโฟลเดอร์แล้วคัดลอกออกมาทีละไฟล์ หรือ ขั้นสูงขึ้นมาหน่อย ก็ใช้คำสั่ง Search... บน Windows แล้วค่อยคัดลอกไฟล์

ด้วยความอยากใช้คำสั่งบน DOS (Batch processing) สำหรับการทำงานดังกล่าว จึงได้ค้นๆคุ้ยๆผ่านอินเตอร์เน็ต จนพบว่าวิธีการช่างแสนง่ายดายอะไรเพียงนี้ ทุกท่านสามารถทำตามได้ดังนี้ครับ
อ้อ...ก่อนอื่นต้องดาวน์โหลด ASTER GDEM มาก่อนนะครับ สำหรับตัวอย่างครั้งนี้ผมดาวน์โหลดมาแล้วจำนวนทั้งสิ้น 30 ระวาง ดังภาพ
หลังนั้นก็ให้ Extract ไฟล์ออกมาจะได้ดังตัวอย่างข้างล่าง ดังนี้หลังจากได้ข้อมูล ASTER GDEM จำนวน 30 โฟล์เดอร์แล้วลองคลิกเข้าไปดูจะพบว่ามีอยู่ 2 ไฟล์ในแต่ละโฟล์เดอร์คือ XXXXXX_dem.tif และ XXXXXX_num.tif โดย
XXXXXX_dem.tif คือ ไฟล์ DEM ที่เราต้องการ อ้อ อย่าลืมนะครับว่าความสูงของ DEM นี้คือความสูงแบบ Orthometric Height โดยคำนวนจาก WGS84/EGM96 รายละเอียดเพิ่มเติมศึกษาได้จาก ที่นี่ ครับ
ส่วน XXXXXX_num.tif คือ จำนวนภาพถ่ายดาวเทียม ASTER ที่ใช้ในการผลิต GDEM (ค่า DN บนภาพ)

ที่นี้มาถึงขั้นตอนสำคัญคือ การใช้คำสั่งบน DOS ตัวอย่างมีดังนี้ครับ
1. Change Directory ไปยัง โฟล์เดอร์ที่เก็บไฟล์ทั้งหมด (ของผมคือ C:\GDEM\ โดยมีข้อมูล ASTER GDEM ย่อยๆอยู่ข้างใน เช่น C:\GDEM\ASTGTM_N10E097\ หรือ C:\GDEM\ASTGTM_N18E098\ เป็นต้น)

2. พิมพ์คำสั่งดังนี้ครับ
C:\GDEM>FOR /r %i IN (.\*_dem.tif) DO copy %i C:\test\

ขออธิบายคำสั่งข้างต้นนะครับ
  • จากคำสั่งคือ ประกาศตัวแปรชื่่อ %i แทนไฟล์ใดๆ (ทุกไฟล์ที่มีชื่อต่อท้ายคือ "_dem.tif" ที่อยู่ในไดเรกทอรีปัจจุบันโดยรูปแบบข้อมูลคือ TIFF ) รวมถึงไดเรกทอรีย่อย (/r)
  • คัดลอกไฟล์ %i ทุกไฟล์ไปไว้ที่ C:\test\

นอกจากนี้เรายังสามารถประยุกต์ใช้การทำงานประเภทนี้กับงาน Geomatics ได้อีกด้วยครับ (ไว้มีเวลาว่างจะมานำเสนอในโอกาสต่อไปครับ)

Saturday, July 11, 2009

การใช้งาน Quiver Plot ด้วยโปรแกรม Octave

วันนี้มีวิธีการใช้งาน Quiver plot ด้วยโปรแกรม Octave มาแนะนำครับ!!!
ฟังก์ชัน Quiver นั้นสามารถช่วยแสดงความคลาดเคลื่อน(หรือการเปลี่ยนแปลง)ในงาน Geomatics ได้หลายแบบ เช่น ความคลาดเคลื่อนทางตำแหน่งหลังการดัดแก้ออร์โท การเปลี่ยนแปลงทางตำแหน่งของหมุดหลักฐานหลังการเกิดแผ่นดินไหว หรือความผิดเพี้ยนของเลนส์ (Lens Distortion) เป็นต้น โดยเราสามารถอธิบายการเปลี่ยนแปลงเหล่านี้ได้ด้วยค่า(ตัวเลขจำนวนจริง)หรือสมการทางคณิตศาสตร์
ในครั้งนี้เราจะมาลองการใช้งานอย่างง่าย โดยเราต้องเตรียมข้อมูลให้อยู่ในรูปแบบ ดังนี้ครับ [x, y, u, v] โดยที่ค่า x คือค่าพิกัดอ้างอิงทางแกน x และ y คือค่าพิกัดอ้างอิงทางแกน y ส่วน u คือค่าพิกัดที่เปลี่ยนแปลง(คลาดเคลื่อน)ทางแกน x และ v คือค่าพิกัดที่เปลี่ยนแปลงทางแกน y
ในตัวอย่างนี้ผมกำหนดชื่อไฟล์คือ C:\test.txt ตัวอย่างของข้อมูลมีดังนี้ครับ

487787.27 2071326.71 -0.36 4.33
486904.32 2068177.13 -1.06 -2.25
490220.08 2066478.38 1.70 -1.25
491029.95 2068104.50 -2.93 2.62

หลังจากสร้าง Text ไฟล์ตามรูปแบบข้างต้นแล้ว ต่อมาให้ทำการโหลดข้อมูลจาก Text ไฟล์และกำหนดค่าลงในเมทริกซ์ด้วยคำสั่งในโปรแกรม Octave ดังตัวอย่างดังนี้

>>load c:\test.txt
>>x=test(:,1);
>>y=test(:,2);
>>u=test(:,3);
>>v=test(:,4);

หลังจากนั้นจึงใช้คำสั่ง quiver ในการสร้างกราฟ ซึ่งอาจเพิ่มค่า Scale factor หรือค่าเกินจริง (Exaggeration) ได้โดยการกำหนดตัวคูณเพิ่มต่อท้าย ดังตัวอย่างดังนี้ครับ

>>quiver (x,y,u,v)
หรือ
>>quiver (x,y,u,v,10)

ตัวอย่างผลลัพธ์ดังภาพครับ

ลองใช้กันดูนะครับ หากมีข้อสงสัยสอบถามได้ครับ

ปล. ขอบคุณพี่ ภานุ สำหรับคำแนะนำการใช้งาน Octave เบื้องต้นครับ

Friday, July 3, 2009

ฟังก์ชันเจ๋งๆใน QGIS 1.0.2

วันนี้ได้ลองใช้งานเครื่องมือหลายๆอย่างใน QGIS แล้วประทับใจมากเลยอยากแนะนำทุกๆท่านลองใช้กันครับ โดยหลังจากติดตั้ง QGIS เรียบร้อยแล้ว (สำหรับท่านที่ยังไม่มีโปรแกรมก็ดาวน์โหลดได้จาก ที่นี่ ครับ) จะพบกับเมนูให้เลือกใช้งานที่หลากหลายและน่าสนใจมากๆ เช่น เมนู Tools --> Analysis Tools, Research Tools, Geoprocessing Tools, Geometry Tools และ Data Management Tools เป็นต้น
จากการทดสอบใช้งานเบื้องต้นพบว่าทำงานได้ดีไม่แพ้ซอฟต์แวร์ที่มีลิขสิทธิ์ หากท่านใดพบปัญหาหรือมีข้อสงสัยในการทำงาน สามารถเมล์มาสอบถามหรือแลกเปลี่ยนประสบการณ์ได้ครับ เพื่อช่วยสนับสนุนให้มีการใช้งาน Free/Open Source Software (FOSS) อย่างกว้างขวางในประเทศไทยของเรา ตัวอย่างของเครื่องมือที่น่าสนใจมีดังภาพข้างล่างครับ

Thursday, July 2, 2009

เมื่อ gdal2tiles ของ FWTOOLS (บางเวอร์ชัน) ใช้งานไม่ได้ (ของฟรีและดีก็มีในโลก)

วิธีแก้ไขเบื้องต้นมีดังนี้ครับ

1. ดาวน์โหลดไฟล์ gdal2tiles.py ที่นี่
2. บันทึกไฟล์ gdal2tiles.py แทนที่ของเดิม ที่ C:\Program Files\FWTools2.4.2\bin\ (default)
3. ใช้งาน gdal2tiles ตามปกติ

การแปลงค่าความสูงระหว่าง Ellipsoidal Height และ Orthometric Height

ท่านใดที่ต้องการแปลงค่าความสูง Ellipsoidal Height (h) ให้เป็น Orthometric Height (H) ด้วย EGM96 สามารถพิมพ์ค่าพิกัดที่ต้องการได้ ที่นี่ ในทำนองเดียวกันสามารถแปลงความสูง Orthometric Height กลับมาเป็น Ellipsoidal Height ก็สามารถทำได้ตามสมการข้างล่างครับ

h = H + N

เมื่่อ N คือค่าความสูงต่างระหว่าง Geoid และ Ellipsoid หรือที่เรียกกันว่าค่า Geoid Undulation (N)

งานประชุมเชิงปฏิบัติการ THEOS Image Quality Assessment

สำนักงานพัฒนาเทคโนโลยีวกาศและภูมิสารสนเทศ (สทอภ) ได้จัดการประชุมงานประชุมเชิงปฏิบัติการเรื่อง THEOS Image Quality Assessment ระหว่างวันที่ 15 - 17 กค. 2552 ขอเชิญทุกท่านที่สนใจเข้าร่วมงานครับ (ติดต่อ สทอภ กันเองนะครับ แฮะๆๆ) เนื้อหาคร่าวๆของการฝึกอบรมมีดังนี้ครับ
- Overview of Thai-French Cooperation in Space Technology, Application and Training.
- Introduction to Satellite Image Processing and Mathematical Fundamental for Image Processing.
- Mathematical Fundamental for Radiometric/Geometric Correction.
- การบรรยายเรื่อง Preliminary of THEOS Sensor Modeling.
- Local and Global DEMs Availabilities and their Contribution to THEOS Orthorectification.
- Mathematical Fundamental for Radiometric/Geometric Calibration.

Thursday, June 25, 2009

FWTOOLS 2.4.2

วันนี้ลองเข้าไปดาวน์โหลด FWTOOLS ปรากฏว่าแต่ละเวอร์ชันออกเร็วมากๆ ปัจจุบันถึง 2.4.2 แล้วครับ ส่วนการใช้งาน gdal2tiles ที่มักพบปัญหาในเวอร์ชันก่อน ผมได้ทดลองบน Vista (Home Premium) ก็ยังไม่สามารถใช้งานได้ครับ