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

Saturday, December 15, 2012

ปัญหาที่พบระหว่างการทำงานกับไฟล์ข้อมูลภาพจำนวนมาก

ชีวิตช่วงนี้ยุ่งๆกับการทำงานวิจัยของตัวเอง บังเอิญมีปัญหาที่หลากหลายในการทำงานจึงอยากเอามาแบ่งปัน เผื่อว่าบางท่านอาจจะเจอปัญหาในลักษณะเดียวกัน ดังนี้ครับ

  1. โปรแกรม xxx ไม่สามารถโมเสคไฟล์ถาพจำนวนมากได้ (แค่ 3,000 กว่าไฟล์เอง ทำเป็นใจเสาะ ตายเอาดื้อๆซะงั้น) วิธีการแก้ไขของผม คือ แยกไฟล์ที่มีเลขระวางหมวดเดียวกันไว้ด้วยกันก่อน  (ในกรณีของข้อมูลที่อาศัยระบบเลขระวาง อาจใช้เลขระวางสามหรือสี่ตัวแรกของชื่อไฟล์ในการจัดหมวดหมู่) แล้วทำการโมเสค ที่ละหมวดๆ แล้วค่อยนำมาโมเสคกันภายหลัง เช่น ไฟล์ทั้งหมด สามพันกว่าไฟล์เมื่อทำการจัดหมวดหมู่แล้ว อาจจะเหลือเพียงแค่ สิบหมวดหลัก (ที่มีตัวเลขสี่ตัวแรกเหมือนกัน) ซึ่งวิธีการทำงานนั้นสามารถใช้การเขียน Batch ช่วยในการคัดแยกไฟล์ หรือการใช้เครื่องหมาย * ต่อท้ายชือไฟล์สามหรือสี่ตัวแรก เพื่อทำการจัดกลุ่มข้อมูล หลังจากทำการจัดหมวดหมู่ (จัดกลุ่ม) แล้วก็ให้ทำการโมเสคต่อกันในแต่ละหมวดเข้าด้วยกัน แล้วค่อยนำผลที่ได้มาโสเสคกันอีกครั้งเพื่อให้ได้ไฟล์ภาพที่โมเสคทั้งหมดทั้ง  3,000 กว่าไฟล์
  2. การโมเสคอาจเกิดช่องว่างระหว่างแถวหรือคอลัมน์ อันเนื่องมากจากการโมเสคของแต่ละหมวดข้อมูลภาพ (ถ้าโมเสคพร้อมกันทั้งหมดจะไม่เกิดปัญหานี้) วิธีการแก้ไข ผมใช้วิธีการสุ่มโมเสคที่ละหมวดก่อน หากหมวดไหนที่มีปัญหาการเกิดแถวช่องว่าง ผมจะโมเสค หมวดนั้นรวมกันกับหมวดอื่นๆพร้อมกันในคราวเดียว (อาจมีปัญหาขนาดไฟล์มากเกินไปจะโปรแกรมไม่สามารถทำงานได้)
  3. โปรแกรม xxx และ gdal_merge ไม่สามารถโมเสคไฟล์ที่มีชนิดข้อมูลที่ต่างกันได้ วิธีการแก้ไขก็ตรงไปตรงมาคือ ทำการแปลงชนิดข้อมูลก่อนแล้วจึงทำการโมเสคภาพ
  4. มีข้อมูลผิดพลาดในไฟล์ เช่น ค่าจุดภาพที่มากหรือน้อยเกินจริง เพียงไม่กี่จุดภาพ ซึ่งไม่มีการแสดงผลในส่วนของ Image information วิธีการแก้ไขคือ ทำการแปลงให้อยู่ในรูปของไฟล์ CSV แล้วเรียกดูด้วยโปรแกรมพวก Spreadsheet แล้วทำการเรียง (Sorting) เพื่อดูค่าดังกล่าว โดยผู้ใช้งานโปรแกรมอาจแก้ไขได้ โดยการเปลี่ยนค่าในไฟล์ CSV ก่อนแล้วจึงนำไฟล์ CSV นี้ไปทำการแปลงกลับให้เป็นข้อมูลภาพ
  5. ค่าของจุดภาพคลาดเคลื่อนไปจากจุดภาพข้างเคียงไม่มากนัก (กรณีของข้อมูลแบบจำลองภูมิประเทศเชิงเลข) วิธีการสังเกตให้ใช้เครื่องมือจำพวก Image Enhancement เพื่อทำให้เห็นจุดภาพเหล่านั้น เด่นชัดมากขึ้น

Thursday, September 20, 2012

QGIS: วิธีแก้ปัญหา Labels ซ้อนทับกัน

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

ภาพที่ 1 การกำหนดค่าของ  Labels  แบบปกติ
หลังจากนั้นจะได้ตัวอย่างผลลัพธ์ดังภาพที่ 2 ดังนี้



ภาพที่ 2 ตัวอย่าง Labels ที่ซ้อนทับกัน
จะสังเกตได้ว่าทุกๆ Polygons นั้นมีค่าของ Labels เหมือนกัน แต่เนื่องจาก Polygons ต่างๆนั้นอยู่ชิดติดกันเกินไป (เมื่อเทียบกับมาตราส่วนการแสดงผล) ทำให้เกิดการซ้อนทับกัน (Overlap) ของ Labels 
วันนี้ผมขอเสนอหนึ่งในวิธีการแก้ปัญหานี้ครับ
อันดับแรกให้ทุกท่านยกเลิก Labels ที่ได้ทำไว้เสียก่อน โดยการ "ไม่เลือก" ที่ Display labels แล้ว กด Apply/OK หรือ "เอาชั้นชั้นข้อมูลที่ต้องการทำ Labels ออกแล้วเปิดชั้นข้อมูลใหม่ (เหมือนคอมพ์ เวลามีปัญหาทำอะไรไม่ถูกก็ปิดแล้วเปิดใหม่ ฮ่าๆๆ)"
เพื่อความเข้าใจอย่างง่าย (แล้วก่อนหน้านี้จะอธิบายให้ งง ทำไม) คือให้เปิดชั้นข้อมูลปกติโดยยังไม่ต้องทำอะไร (ยังไม่ต้อง Labels ใดๆทั้งสิ้น) ดังภาพที่ 3 

ภาพที่ 3 การเปิดชั้นข้อมูลก่อนสร้าง Labels (ควรให้เป็นแบบนี้ก่อนเสมอนะครับ)
หลังจากนั้นให้เลือกที่เมนู Layer --> Labeling หลังจากนั้นจะปรากฏหน้าต่างให้กำหนดค่าและทำการกำหนดค่าของ  Labels ที่ต้องการดังตัวอย่างภาพที่ 4

ภาพที่ 4 ภาพตัวอย่างหน้าต่างสำหรับกำหนดค่า Labels และการกำหนดค่าของ  Labels
เมื่อกำหนดค่าของ Labels ด้วยวิธีการนี้เรียบร้อยแล้ว จะพบว่าไม่ปรากฏการซ้อนทับกันของ Labels อีกตัวอย่างดังภาพที่ 5

ภาพที่ 5 ตัวอย่างการทำ Labels แบบไม่มีการซ้อนทับกัน

หมายเหตุ
  • ตัวอย่างนี้ใช้โปรแกรม QGIS version 1.7.4
  • หากท่่านใดทำตามตัวอย่างแล้วยังเกิดปัญหาโปรดแจ้งให้ทราบด้วยครับ

Monday, June 4, 2012

ภูมิสารสนเทศในยุค Spatio-temporal information system

วันนี้ตื่นขึ้นมาไม่รู้มีอะไรดลใจให้คิดถึงเกี่ยวกับ วิชาชีพและสิ่งที่ผมกำลังเรียนรู้อยู่ในปัจจุบัน คิดไปคิดมา ทำให้ผมได้ข้อสรุปดังนี้ครับ งานด้านภูมิสารสนเทศในยุคปัจจุบัน (5-10 ปีมานี้)ได้มีการเปลี่ยนแปลงไปจากเดิม กล่าวคือ ยุคก่อนหน้านี้เราจะเน้นศึกษาสิ่งต่างๆเพียง 2 ด้าน กล่าวคือ สิ่งที่เราสนใจนั้นมีคุณลักษณะหรือคุณสมบัติ (Attribute) อย่างไร เมื่อมีตำแหน่ง (Space) ที่แตกต่างกัน แต่ในปัจจุบัน งานวิจัยต่างๆที่เกียวข้องกับภูมิสารสนเทศนั้นได้ให้ความสนใจเกี่ยวกับเชิงเวลา (Temporal) ดังจะเห็นได้จากบทความงานวิจัย มาตรฐานการทำงานของโปรแกรมด้านภูมิสารสนเทศ หรือมาตรฐานการจัดเก็บข้อมูลในระบบฐานข้อมูล สิ่งต่างๆเหล่านี้ล้วนแต่ให้ความสนใจเกี่ยวกับเวลาซึ่งนอกเหนือไปกว่า "ตำแหน่งและคุณลักษณะ" ถ้าจะอธิบายให้เข้าใจอย่าง่าย ผมขออนุญาตยกตัวอย่างภาพประกอบดังนี้ครับ

ภาพที่ 1 สิ่งที่งานด้านภูมิสารสนเทศให้ความสนใจ(เทียบได้กับแกนต่างๆ)
จากภาพตัวอย่างจะเห็นว่า ปัจจุบันนี้ เรามีประเด็นใหม่ที่ต้องให้ความสนใจ (ตระหนัก) ประกอบการวิเคราะห์ข้อมูลเชิงตำแหน่ง (Spatial data analysis) นั่นคือเจ้า "เชิงเวลา (Temporal)" นั่นเอง
คำถามที่หลายๆท่านสงสัย เมื่อได้ยินคำว่า Spatio-temporal analysis คือ มีความแตกต่างจากรูปแบบเดิมอย่างไรและวิธีการวิเคราะห์ข้อมูลแตกต่างจากที่ทำๆกันอยู่ในปัจจุบันอย่างไร รวมถึงมันสำคัญและช่วยเราวิเคราะห์อะไรได้บ้าง???
 ครั้งหนึ่งผมเคยเข้ารับฟังการบรรยายเมื่อปี 2551 (2008) ระหว่างการประชุม ISPRS congress 2008 เกี่ยวกับการศึกษาด้าน Spatio-Temporal analysis ตอนนั้นต้องยอมรับว่า ผมเองก็ยังมองไม่เห็นภาพว่าเราจะนำความรู้เหล่านี้มาประยุกต์ใช้ได้อย่างไร..........


คราวหน้าผมจะมาแนะนำถึงความสามารถของเจ้า Spatio-Temporal analysis ครับ
ปล. ขนาด Facebook ยังมีทั้ง Location และ Timeline หรือว่าเจ้า Spatio-Temporal information system อยู่ใกล้ๆตัวเรานี่แหละ!!!

Thursday, May 31, 2012

กำหนดช่วงชั้นข้อมูลด้วยฟังก์ชัน IF

วันนี้ขอทดลองเขียนคำสั่งการคำนวณหาระดับชั้น (Class) แบบกำหนดค่าช่วงเอง (Interval) บนโปรแกรม Spreadsheet ด้วยตัวอย่าดังนี้ครับ
สมมุติผมมีค่าของข้อมูลที่อยู่ในช่วงต่างๆดังนี้

A 0.81
B 0.75
C 0.67
D 0.58
E 0.88
F 0.43
G 0.74
H 0.77
I 0.95

โดยโจทย์ของผมคือ ผมต้องการแยกข้อมูลดังกล่าวให้อยู่ในช่วงที่ผมต้องการโดยทำการให้ค่าใหม่ (คล้ายกับการทำ Label ข้อมูล) ดังนี้
โดยค่า 1 (ที่กำหนดใหม่) จะมีค่าของข้อมูลตั้งแต่ 0.0 - 0.4 (x <0.4) ค่า 2 มีค่าของข้อมูลตั้งแต่ 0.4 - 0.6 (x >= 0.4 and x < 0.6) ค่า 3 มีค่าของข้อมูลตั้งแต่ 0.6 - 0.7 (x >= 0.6 and x < 0.7) ค่า 4 มีค่าของข้อมูลตั้งแต่ 0.7 - 0.8 (x >= 0.7 and x < 0.8) และค่า 5 มีค่าของข้อมูลตั้งแต่ 0.8 - 1.0 (x >= 0.8)
เมื่อเราทำการกำหนดค่าของแต่ละช่วงข้อมูลเรียบร้อยแล้วขั้นตอนต่อมาคือการสร้างสูตรในโปรแกรม Spreadsheet จากตัวอย่างผมสามารถเขียนโดยใช้ฟังก์ชัน IF ดังนี้ครับ

IF(CELL>=0.8,5,IF(CELL>=0.7,4,IF(CELL>=0.6,3,IF(CELL>=0.4,2,1))))
เมื่อ CELL คือ ตำแหน่งของเซลล์ที่ต้องการคำนวณ
จากตัวอย่างจะได้ผลลัพธ์ดังนี้
กลุ่มที่ 1 ไม่มีสมาชิก
กลุ่มที่ 2 มีสมาชิกคือ D, F
กลุ่มที่ 3 มีสมาชิกคือ C
กลุ่มที่ 4 มีสมาชิกคือ B, G, H
กลุ่มที่ 5 มีสมาชิกคือ A, E, I
ลองเอาไปประยุกต์กันดูนะครับ อย่างเช่นการ reclass ของข้อมูลที่ผ่านการจำแนกข้อมูลแล้ว (Classification) เป้นต้น

Thursday, March 15, 2012

การบีบอัดข้อมูลภาพ (Image compression) ด้วย GDAL

การบีบอัดข้อมูลภาพ (Image compression)
โดยทั่วไปแล้วจะแบ่งออกเป็น 2 ประเภทคือ
1. การบีบอัดแบบไม่มีการสูญเสียรายละเอียดข้อมูล (Lossless compression) ซึ่งค่าความสว่างของแต่ละจุดภาพจะยังคงอยู่เหมือนเดิมทุกประการ หรือไม่มีการเปลี่ยนแปลงค่าของแต่ละจุดภาพ ซึ่งการบีบอัดวิธีนี้จะอาศัยเทคนิคการจัดเก็บข้อมูลเชิงเลขในการลดขนาดของข้อมูล ตัวอย่างเช่น Lempel–Ziv–Welch (LZW), Run-Length Encoding (RLE) หรือ PackBits เป็นต้น
2. การบีบอัดแบบสูญเสียรายละเอียดข้อมูล (Lossy compression) วิธีการนี้จะมีการเปลี่ยนแปลงค่าความสว่างของจุดภาพนั่นหมายความว่า วิธีการนี้ไม่เหมาะสมสำหรับข้อมูลภาพที่ต้องมีการจำแนกข้อมูล (Classification) ตัวอย่างของการบีบอัดประเภทนี้ได้แก่ JPEG, MrSID หรือ ECW เป็นต้น
เปรียบเทียบจุดเด่นและจุดด้อยของแต่ละประเภท
การบีบอัดแบบไม่มีการสูญเสียรายละเอียดข้อมูล: รายละเอียดข้อมูล(ค่าความสว่างจุดภาพ)ไม่มีการสูญเสีย เหมาะสำหรับใช้กับข้อมูลภาพที่ต้องการนำไปจำแนกข้อมูล แต่ขนาดของภาพที่บีบอัดแล้วมีขนาดลดลงไม่มากนัก (ขนาดไฟล์ไม่ค่อยแตกต่าง)
การบีบอัดแบบสูญเสียรายละเอียดข้อมูล: ข้อมูลภาพมีขนาดเล็กลงอย่างมาก (ขึ้นอยู่กับวิธีการ/อัลกอริทึมและคุณภาพของภาพที่ต้องการ) แต่ข้อมูลภาพมีการสูญเสียรายละเอียดซึ่งจะไม่เหมาะสมสำหรับการจำแนกข้อมูล
ในส่วนของวิธีการทำงานนั้นมีรายละเอียดและตัวอย่างการทำงานดังนี้
รายละเอียดการทำงานด้วย GDAL (FWTOOLS 2.4.7)
>>>gdal_translate -of (รูปแบบที่ต้องการ) -co (ทางเลือกเพิ่มเติม-ถ้ามี) inputimage outputimage

ตัวอย่างการใช้งานที่ 1: การบีบอัดแบบไม่มีการสูญเสียรายละเอียดข้อมูล

>>>gdal_translate -of GTiff -co COMPRESS=LZW image.tif image_lzw.tif

>>>gdal_translate -of GTiff -co COMPRESS=PACKBITS image.tif image_packbits.tif

ตัวอย่างการใช้งานที่ 2: การบีบอัดแบบสูญเสียรายละเอียดข้อมูล

>>>gdal_translate -of GTiff -co COMPRESS=JPEG image.tif image_jpeg.tif

ประสิทธิภาพของการบีบอัดแบบไม่มีการสูญเสียรายละเอียดข้อมูล ได้แก่
- ข้อมูลที่ไม่มีการบันทึกข้อมูลในข้อมูลภาพ เช่น ขอบข้อมูลภาพที่ไม่มีการบันทึกข้อมูลของภาพดาวเทียมต่างๆ เป็นต้น
- เนื้อหาหรือลักษณะของภาพ (Content)
- ความซ้ำซ้อนของค่าความสว่างจุดภาพ
ส่วนประสิทธิภาพของการบีบอัดแบบสูญเสียรายละเอียดข้อมูล ได้แก่
- อัลกอริทึมที่ใช้
- คุณภาพข้อมูลภาพผลลัพธ์ที่ต้องการ (คุณภาพสูงขนาดจะลดลงน้อย คุณภาพต่ำขนาดภาพจะลดลงได้มาก)

ตัวอย่างผลการทดลองการบีบอัดข้อมูลภาพ โดยข้อมูลต้นฉบับที่ใช้นั้นเป็นภาพดาวเทียมขนาด 22289x48160 จุดภาพ จำนวน 4 ช่วงคลื่น ดังภาพตัวอย่าง



ส่วนขนาดการจัดเก็บสรุปได้ดังนี้ครับ
ต้นฉบับ 3.99 GB
LZW 1.72 GB
PACKBITS 2.30 GB
JPEG 0.38 GB