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

Tuesday, August 30, 2011

หัวข้อวิจัย อะไรดี???

มีเพื่อนๆหลายคนสอบถามว่า จะทำวิจัย(วิทยานิพนธ์)เรื่องอะไรดี?
ส่วนตัวผมแล้ว มักจะเริ่มจากเรื่องที่เราถนัด (พอจะทำได้หรือมีความสามารถที่จะทำได้) ก่อน แล้วค่อยขยายไปยังเรื่องอื่นๆ ปัญหาที่ตามมาคือ หลายๆคนมักถามต่อว่า แล้วเราถนัดอะไร? คำถามนี้ ผมคงตอบแทนไม่ได้ แต่ผมพอจะแนะนำได้ว่า งานวิจัยหรือการทำงานต่างๆนั้น ต้องประกอบด้วยความรู้ 2 ส่วนหลัก คือ 1) ความรู้และความชำนาญที่มีอยู่แล้ว และ 2) ความรู้และคำชำนาญที่จำเป็นต้องศึกษาเพิ่มเติมเพื่อให้งานบรรลุผลสำเร็จ ประเด็นหลักที่พบคือ หลายๆคน ไม่อยากจะหาความรู้และความชำนาญใหม่ๆ ที่เรายังไม่เคยเรียนรู้หรือไม่เคยทดลองทำมาก่อน ซึ่งเหตุผลที่มักได้ยินเสมอได้แก่ มันยาก ไม่เคยทำ หาคนสอนไม่ค่อยได้ ตนเองไม่น่าจะทำได้ ฯลฯ ซึ่งผมอยากจะบอกไว้เลยว่า "กำแพงเมืองจีนจะเสร็จได้ ก็ต่อเมื่อ การก่ออิฐก้อนแรกเริ่มต้นขึ้น" ดังนั้นไม่ว่าความรู้ใหม่หรือเครื่องมือใหม่ๆ ที่เราไม่รู้จักหรือไม่คุ้นเคย จำเป็นต้องอาศัยเวลาและความอดทนในการศึกษาและทดลองด้วยตนเอง ตรงนี้สำคัญมากๆครับ เพราะเพื่อนๆหลายคนจะพ่ายแพ้หรือล้มเลิกในขั้นนี้เสมอ ทำให้งานวิจัยไม่ประสบความสำเร็จ
ประเด็นถัดมาคือ "ความลึกซึ้งเท่าใดถึงจะเป็นหัวข้อวิทยานิพนธ์" ตรงนี้ ผมคงตอบไม่ได้ เพราะสถานศึกษาแต่ละแห่งก็มีปรัชญาที่แตกต่างกันออกไป (หลายมาตรฐานนั่นเอง ฮ่าๆๆๆ) แต่ผมอยากให้เพื่อนๆจำไว้ว่า งานของเราต้องมีคุณสมบัติที่สำคัญดังนี้ (อย่างน้อยต้องมีสักข้อ)
1. ความใหม่ของเนื้อหา (First) หรือ เป็นคนแรกที่ทำการศึกษาในประเด็นต่างๆ ซึ่งอาจรวมถึงความใหม่ในเรื่องของการประยุกต์ใช้เทคนิคหรือเครื่องมือใหม่ๆในการแก้ไขปัญหา (ไม่เคยมีใครทำมาก่อน)
2. ความดีที่สุด (Best) หรือ การปรับปรุงเทคนิคหรือวิธีการเดิมเพื่อให้ได้ผลลัพธ์ที่ดียิ่งขึ้น เช่น การปรับปรุงแบบจำลองต่างๆเพื่อให้เหมาะสมกับเงื่อนไขเฉพาะหรือพื้นที่เฉพาะ
3. ความแตกต่าง (Difference) กล่าวคือ ต้องไม่เหมือนหรือซ้ำกับงานของคนอื่นๆ เพราะถ้าเหมือนกัน ก็คือ การคัดลอก (ทั้งแบบตั้งใจและไม่ตั้งใจ) ในส่วนนี้อาจต้องอาศัย การอ่านบทความให้เยอะเข้าไว้ เพื่อจะได้เปรียบเทียบกับงานวิจัยของคนอื่นๆว่ามีความแตกต่างกันหรือไม่ แต่!!! งานของเพื่อนๆต้องไม่ใช่ การศึกษาด้วยวิธีการหรือเทคนิคเดียวกันแต่เปลี่ยนพื้นที่ศึกษานะครับ (ยกเว้นเราต้องการศึกษาเบื้องต้นก่อนแล้วค่อยปรับปรุงหรือพัฒนาวิธีการหรือแบบจำลองเพื่อให้เหมาะสมกับลักษณะเฉพาะของพื้นที่ศึกษา)
หวังว่า ความคิดเห็น จากคนที่ไม่ค่อยมีความรู้อย่างผมน่าจะช่วยเพื่อนๆในการหาหัวข้อวิจัยได้บ้างนะครับ

Monday, August 1, 2011

Resampling ภาพด้วย gdalwarp

วันนี้ขอเสนอวิธีการ resampling ข้อมูลภาพเพื่อให้มีขนาดหรือจำนวนจุดภาพเท่าที่ต้องการ ตัวอย่างเช่น ภาพเดิมมีขนาด 300x300 จุดภาพ แต่ต้องการเพิ่มให้เป็น 1200x1200 จุดภาพ เรามาดูวิธีการกันเลยนะครับ
คำสั่งหรือโปรแกรมประยุกต์ที่ใช้คือ gdalwarp ส่วน option หรือ ทางเลือกที่จะใช้คือ -ts width height ดังนี้ครับ

>>>gdalwarp -ts width height inputfile outputfile

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

>>>gdalwarp -ts 1200 1200 abc300.tif abc1200.tif

ปล. หากต้องการระบุวิธี resampling ให้เพิ่มทางเลือก -r xxxx นะครับ เช่น -r bilinear, cubic, cubicspline หรือ lanczos. แต่ถ้าไม่ระบุโปรแกรมจะใช้วิธี nearest เป็นค่าเริ่มต้นครับ

Saturday, July 30, 2011

แปลงระบบพิกัด แบบหลายจุด ด้วย cs2cs

วิธีการนี้ ผมได้รับการแนะนำจาก พี่ วิโรจน์ (เทพองค์หนึ่งในงาน GeoInformatics ที่ใช้ Free.Open Source Software - FOSS) เมื่อนานมาแล้ว วันนี้ขอบันทึกไว้กันลืม ดังนี้ครับ
CS2CS นั้นเป็นโปรแกรมประยุกต์ตัวหนึ่งสำหรับการแปลงระบบพิกัดของค่าพิกัดแบบจุด (มีเฉพาะค่าพิกัดของแต่ละจุดเท่านั้น) นั่นหมายความว่า ข้อมูลต้องอยู่ในรูป คู่ของค่าพิกัด เช่น 525000 1800000 เป็นต้น
*** โปรแกรมประยุกต์นี้จะมีอยู่แล้วใน GDAL หรือที่ถูกรวมไว้แล้วใน FWTOOLS ครับ ดังนั้นไม่จำเป็นต้องดาวน์โหลดเพิ่มเติมครับ***
เรามาดูตัวอย่างกันเลยนะครับ ตัวอย่างผมมีข้อมูลแบบอักขระ (Text file) ที่เมื่อเปิดด้วย Text Editor ทั่วไป เช่น Notepad หรือ Notepad++ แล้วจะมีหน้าตาดังนี้ ชื่อไฟล์ EN.txt












ตัวอย่างทางเลือก (Option) ที่น่าสนใจ
-E ใช้ในกรณีที่ต้องการนำค่าจากไฟล์นต้นฉบับหรือไฟล์นำเข้า (Input) ไปใส่ไว้ในไฟล์ผลลัพธ์ (Output) ด้วย
-f ใช้สำหรับกำหนดรูปแบบไฟล์ผลลัพธ์ เช่น ความละเอียด(ระดับจุดทศนิยม)ของผลลัพธ์ที่ต้องการ ตัวอย่างการใช้งานคือ -f "%.9f" จะได้ผลลัพธ์ทีี่มีจุดทศนิยมจำนวน 9 ตำแหน่ง เป็นต้น
-r ใช้สำหรับสลับค่าพิกัดขอไฟล์ต้นฉบับ จาก XY เป็น YX หรือ Lat, Long ให้เป็น Long, Lat
-s ใช้สำหรับสลับค่าพิกัดขอไฟล์ผลลัพธ์ จาก XY เป็น YX หรือ Lat, Long ให้เป็น Long, Lat
**** ตรงนี้น่าสนใจครับ เพื่อไม่ให้เกิดความสับสน ผมแนะนำทุกท่านเตรียมข้อมูลให้อยู่ในแบบ (Easting, Northing) สำหรับระบบพิกัดกริด UTM โดยไม่จำเป็นต้องระบุทางเลือก -r หรือ -s
ส่วนตัวอย่างการใช้งานมีดังนี้

>>>cs2cs -E -f "%.9f" +init=epsg:32647 +to +init=epsg:4326 EN.txt

ผลลัพธ์ที่ได้มีดังภาพ






หรือถ้าต้องการแปลงผลลัพธ์ให้เป็นไฟล์อักขระ (Text file) ใหม่อีกไฟล์หนึ่งสามารถทำได้ดังนี้ครับ

>>>cs2cs -E -f "%.9f" +init=epsg:32647 +to +init=epsg:4326 EN.txt > LongLat.txt

ส่วนการแปลงค่าระบบภูมิศาสตร์ให้เป็นระบบพิกัดกริด UTM นั้นแนะนำให้ใช้รูปแบบ (Long, Lat) ครับ

เพื่อไม่ให้สับสนและอาจมีการระบุรูปแบบผิด ผมขอสรุปและแนะนำอีกที ดังนี้
ในกรณีที่ไม่ใช้ทางเลือก -r หรือ -s นั้น
  • การแปลง UTM2Geog ถ้ารูปแบบไฟล์ต้นฉบับคือ (Easting, Northing) จะได้ผลลัพธ์คือรูปแบบ (Long, Lat)
  • ส่วนการแปลง Geog2UTM ถ้ารูปแบบไฟล์ต้นฉบับคือ (Long, Lat) จะได้ผลลัพธ์คือรูปแบบ (Easting, Northing)

Wednesday, July 27, 2011

ความแตกต่างระหว่าง Objective และ Subjective

ไปอ่านเจอคำศัพท์ที่น่าสนใจ 2 คำคือ Objective และ Subjective ในบทความวิชาการและตำราหลายๆเล่ม แต่ผมก็ยังแยกความแตกต่างไม่ได้อย่างชัดเจนว่า สองคำนี้มีความแตกต่างกันอย่างไร วันนี้เลยต้องขอบันทึกความหมาย (ไม่ใช่การแปล) ที่พอจะสรุปได้จากการค้นคว้าดังนี้

Objective แปลโดย ศัพท์บัญญัติ ราชบัณฑิตยสถาน นั้น มีหลายความหมายได้แก่ เชิงวัตถุวิสัย, วัตถุประสงค์ หรือ ปรนัย ส่วน
Subjective นั้นแปลว่า ความรู้สึกแห่งตน, เชิงจิตวิสัย หรือ อัตนัย

แค่เพียงความหมายก็น่าจะพอสรุปได้ว่า Subjective นั้นต้องเกี่ยวข้องกับความเป็นตัวตนหรือส่วนบุคคล (อัต-) นั่นหมายถึงบริบทของคำนี้ ไม่อาจสรุปหรือประเมินได้อย่างเที่ยงตรง (ไม่เสถียร) หรือได้คำตอบเหมือนเดิมทุกครั้งในทุกๆการวัด เนื่องจากขึ้นอยู่กับสถานการณ์ ความรู้ ความชำนาญหรือเกณฑ์ของแต่ละบุคคลที่ใช้ในการวัด ดังเช่น ตัวอย่างความหมายของ Objective data และ Subjective data ที่มักพบเสมอในเรื่อง การตัดสินใจแบบหลายเกณฑ์ (Multi-Criteria Decision)

ดังนั้น ผมอาจสรุปได้ว่า Objective นั้นมีความเป็นสากล จริงแท้ เที่ยงตรง มากกว่า Subjective ซึ่งเกี่ยวข้องกับความเป็นส่วนบุคคล ครับ

ปล. การแปลความหมายจำเป็นต้องคำนึงถึงบริบทของคำศัพท์ด้วยเสมอนะครับ

Tuesday, June 21, 2011

ความแตกต่างระหว่าง Numerical methods และ Numerical Analysis

เป็นคำถามคาใจมานานมาก แต่ยังไม่ได้ค้นหาคำตอบอย่างจริงๆจังสักที ว่า "ความแตกต่างระหว่าง Numerical methods และ Numerical Analysis" คืออะไร วันนี้นึกครึ้มอะไรไม่รู้เลยเข้าห้องสมุดหาตำรามาเฉลยคำถามที่สงสัยมานาน...
จากการอ่านหนังสือ An Introduction to Numerical Methods and Analysis โดย James F. Epperson ผู้เขียนให้คำอธิบาย ความแตกต่าง คือ วิธีการเชิงเลข (Numerical methods) จะให้ความสำคัญการนำอัลกอริทึมไปทำให้เกิดผล (Implementation of algorithms) ซึ่งบางทีก็อาศัยทฤษฏีทางคณิตศาสตร์ในการอธิบายวิธีการทำงาน ส่วน การวิเคราะห์เชิงเลข (Numerical analysis) นั้นจะให้ความสำคัญกับทฤษฏีทางคณิตศาสตร์ (Mathematical theory) ผู้เขียนคิดว่า น่าจะดีกว่า ถ้าเราศึกษาทั้งสองอย่างไปพร้อมๆกัน
ซึ่งผมก็เห็นด้วยอย่างยิ่ง เพราะ การนำวิธีการและการวิเคราะห์เชิงเลขไปทำให้เกิดผล (Implementation) ในงานภูมิสารสนเทศ นั้น นอกจากความต้องการ ความรู้ ที่ใช้ในการแก้ไขปัญหาแล้ว ยังต้องอาศัย ความเข้าใจ เกี่ยวกับเทคนิคหรือวิธีการที่นำมาใช้ด้วย เนื่องจากปัญหาบางอย่าง ความรู้ เพียงอย่างเดียวไม่สามารถแก้ไขได้ครับ ต้องอาศัย ความเข้าใจ ด้วย....
ตัวอย่าง นะครับ
ทำไมเราต้องรับสัญญาณดาวเทียม อย่างน้อย 3 ดวง เพื่อหาตำแหน่งของเรา (ด้วยเครื่องรับสัญญาณ GPS) หรือ ทำไมจุดควบคุมสำหรับการอ้างอิงตำแหน่งโลก ถึงไม่สามารถวางตัวอยู่บนแนวเส้นตรงเดียวกัน เป็นต้น

Monday, May 30, 2011

การกรองความถี่สูงและความถี่ต่ำ (Hi & Low pass filtering)

สงสัยอายุที่เพิ่มขึ้นจะมีส่วนทำให้ความจำลดลง เพราะลืมทุกทีเมื่อต้องมาทำงานกับตัวกรอง (Filter) ทั้งสองแบบนี้ วันนี้เลยขอบันทึกความเข้าใจไว้กันลืม!!!

การกรองความถี่สูง (Hi pass filter)
เป็นการกรองสัญญานที่ยอมให้ข้อมูลความถี่สูงผ่านได้ ตัวอย่างการใช้งานคือ การเพิ่มความคมชัด (Sharpening)

การกรองความถี่ต่ำ (Low pass filter)
เป็นการกรองสัญญานที่ยอมให้ข้อมูลความถี่ต่ำผ่านได้ ตัวอย่างการใช้งานคือ การทำเบลอ (Blurring)

ส่วนรายละเอียดของการใช้ตัวกรองในการทำ PanSharpening ไว้มีโอกาสจะเข้ามาเพิ่มภายหลัง

Wednesday, March 23, 2011

gdal_merge ใน FWtools 2.4.7 ใช้งานไม่ได้

ผมลองใช้ gdal_merge ใน FWtools เวอร์ชัน 2.4.7 แล้วปรากฏว่า ไม่สามารถทำงานได้อย่างถูกต้อง กล่าวคือ โปรแกรมจะต่อชนภาพให้ แต่ภาพนั้นไม่มีค่า Digital Number (DN) วิธีแก้ไขง่ายที่สุดที่คิดได้คือ กลับไปใช้งานเวอร์ชัน 2.4.6 ปรากฏว่า Work!!! ใช้งานได้
จังอยากแนะนำทุกท่านที่อาจเจอปัญหาเดียวกับผม...

Thursday, February 24, 2011

PostGIS: สร้าางตารางข้อมูลใหม่จาก ข้อมูลที่สืบค้น

บางครั้งเราต้องการสร้างตารางข้อมูลใหม่ (ชั้นข้อมูลเชิงตำแหน่งใหม่) ในฐานข้อมูลเชิงตำแหน่ง (Spatial Database) ตัวอย่างเช่น ชั้นข้อมูลเส้นทางคมนาคมถนน ซึ่งในฐานข้อมูลนั้นมีข้อมูลอรรถาธิบาย (Attribute) มากมายเกินความจำเป็น อาทิ ชื่อถนน ความกว้างช่องจราจร ความยาวของส่วนย่อย ประเภทพื้นผิว สภาพถนน โดยที่เราต้องการชั้นข้อมูลใหม่ที่มีเพียงแค่ชื่อถนน (road name: rdname) และพิกัดของแต่ละจุดเท่านั้น (geometry: the_geom) เราจะทำอย่างไร???
หลังจากศึกษาในคู่มือของ Postgis พบว่าโปรแกรมได้เตรียมฟังก์ชัน create table as สำหรับการตอบวัตถุประสงค์ในครั้งนี้ เรามาดูตัวอย่างการใช้งานกันเลยนะครับ

SQL syntax: create table table_name as select *** from *** where ***

ตัวอย่าง
create table road_name as
select rdname, the_geom from road

Wednesday, February 9, 2011

แก้สมการ Overdetermined เพียงกระพริบตา (ปี๊บๆ)

Ex: จากตัวอย่างหนังสือเรื่อง GIS & MCDA ของ จาเซ็ค หน้าที่ 211 เราต้องการหาค่าแลมดา (Lamda: L) โดยมีสมการเงื่อนไขดังนี้
L1 = 0.5(L2) + 0.3(L3)
L2 = 0.7(L1) + 0.7(L2)
L1 + L2 + L3 = 1
ปรากฏว่าในหนังสือได้คำตอบคือ L1 = 0.4, L2 = 0.3 และ L3 = 0.3 จะพบว่าค่าที่ได้นั้นใช้ได้ในบางเงื่อนไขเท่านั้น (คำตอบมีได้หลายคำตอบหรือคำตอบนั้นไม่ใช่ Unique solution) ทำให้ผลลัพธ์อาจผิดพลาดได้ ........... แล้วเราจะทำอย่างไีีร
ก่อนอื่นเรามาดูเงื่อนไขหรือข้อมูลที่เรามีก่อนดังนี้ครับ
1. เรามีตัวไม่ทราบค่า (Unknown) 3 ตัวคือค่าแลมดา L1, L2, L3
2. เรามีสมการอย่างน้่อย 3 สมการ (ตามตัวอย่างในหนังสือ)
3. จากการศึกษาพบว่า ในหนังสือนั้นขาดการนำเอาเงื่อนไขบางอย่างมาสร้างสมการคือ L3 = 0.3(L1) + 0.5(L2)
4. เมื่อเรามีสมการเพิ่มขึ้นจะพบว่า เงื่อนไขของระบบสมการนี้จะเข้าสู่เงื่อนไขของ Overdetermined system (จำนวนสมการมากกว่าจำนวนตัวไม่ทราบค่า)
คราวนี้เรามาดูวิธีแก้ระบบสมการเชิงเส้นที่ Overdetermined ด้วยเมทริกซ์ดังตัวอย่างดังนี้

Condition Equation:
L1 = 0.5(L2) + 0.3(L3)
L2 = 0.7(L1) + 0.7(L2)
L3 = 0.3(L1) + 0.5(L2)
L1 + L2 + L3 = 1
A = [-1 .5 .3; .7 -1 .7; .3 .5 -1; 1 1 1]
X = [a; b; c]
L = [0; 0; 0; 1]

V = AX+L
N = transpose (A)*A
U = transpose (A)*L
Normal Equation:
transpose (X)* transpose (N) + transpose (U) = 0
หรือ N*X + U = 0 หรือ N*X = -U
X = - inv(N) * U

ส่วนวิธีการคำนวณด้วย Matlab มีดังนี้
a = [-1 .5 .3; .7 -1 .7; .3 .5 -1; 1 1 1]
l = [0; 0; 0; 1]
x = a\l
คำตอบที่ได้คือ
x = [0.2941; 0.4118; 0.2941] หรือ
L1 = 0.2941
L2 = 0.4118
L3 = 0.2941

Saturday, January 29, 2011

ตัวอย่างการใช้ While ด้วย Python

อ่านประวัติของ Archimedes อยู่ดีๆ ดันโยงไปที่ โยฮันน์ คาร์ล ฟรีดริช เกาส์ ซะงั้น เลยอดไม่ได้ที่จะทึ่งถึงความอัจฉริยะของ เกาส์ เมื่อมีอายุได้เพียง 7 ขวบ เหตุการณ์เกิดขึ้นเมื่อคุณครูได้สั่งให้นักเรียนบวกเลขตั้งแต่ 1 ถึง 100 ชั่่วขณะเพียงแค่หันหลัง เด็กชายเกาส์ก็ตอบขึ้นมาว่า 5,050 เมื่อถูกถามว่าได้คำตอบนั้นมาได้อย่างไร เด็กชายเกาส์เขียนอธิบายดังนี้

100+99+98+...+1 = 101+101+101+...+101 = 101×50 = 5050 ดังนั้นคำตอบคือ 5050

เป็นไงละครับ....ไม่ใ่ช่อัจริยะคิดไม่ได้นะเนี่ย
อ้างอิงจาก http://th.wikipedia.org/wiki/คาร์ล_ฟรีดริช_เกาส์

เรามาทดลองดูว่าการบวกเลขตั้งแต่ 1-100 นั้นหากเขียนด้วยภาษา Python โดยใช้ While loop นั้นต้องเขียนอย่างไร
############################
i = 1
total = 0
while (i<=100):
total = total + i;
i = i + 1;
print total
############################