- MultiSpec ตัวเล็ก ทำได้หลายอย่าง เสียอย่างเดียวไม่เป็น open source และไม่มีระบบ plug-in น่าจะเหมาะกับการเรียนรู้มากกว่าเอาไปใช้งานจริง
- Opticks น่าสนใจครับ เป็น open source ด้วย สนับสนุน plug-in (แต่มีน้อยเหลือเกิน) ดูจะขาดเครื่องมือทางด้าน clustering อยู่ :(
- GRASS GIS อันนี้ตัวใหญ่เลยครับ ทำได้ทั้งทางด้าน GIS+remote sensing แต่ว่าคู่มือ รายละเอียดต่างๆยังไม่ค่อยชัดเจนเท่าไหร่ เป็นความหวังอันหนึ่งเลยครับ
Thursday, April 8, 2010
Remote Sensing Software
ปีนี้ผมมีงานวิจัยที่เกี่ยวข้องกับ Remote Sensing Image Processing ครับ เลยต้องหาซอฟต์แวร์ทางด้านนี้มาทดลองใช้งาน ตัวดังๆก็ได้แก่ ARCGIS ERDAS แต่ไม่มีตังค์ซื้อครับ เลยต้องทดลองหาของฟรีมาใช้ ที่สนใจอยู่ตอนนี้ก็มี 3 ตัวครับ คือ
Wednesday, April 7, 2010
OpenCV 2.1 มาแล้วครับ
OpenCV 2.1 มีให้ดาวน์โหลดไปใช้งานแล้วครับ ตั้งแต่วันที่ 6 เมษายน 2553 ตามเอกสารระบุว่ามีการแก้ไข bug มากกว่า 200 รายการ สนับสนุนระบบปฏิบัติการแบบ 64 บิต และแบบอื่นๆ อีกมากมาย
ลองไปดาวน์โหลดได้ที่ http://sourceforge.net/projects/opencvlibrary/files/ ครับ
สำหรับ Windows ควรเลือกไฟล์ OpenCV-2.1.0-win32-vs2008.exe นะครับ
ขั้นตอนการติดตั้งและใช้งานกับ Dev-CPP
สำหรับเวอร์ชันนี้ผมคิดว่าสนับสนุนการใช้งานกับ Visual Studio 2008 อยู่แล้วตามชื่อไฟล์ เราลองมาติดตั้งและใช้งานกับ Dev-CPP กันดูครับ
1. uninstall OpenCV เวอร์ชันเดิมออกก่อน
2. ติดตั้งเวอร์ชันใหม่ สมมติว่าติดตั้งที่ C:\OpenCV2.1
3. เปิดโปรแกรม Dev-CPP เลือกหัวข้อ Tools/ Compiler Options
4. แก้ไขคำสั่งเพิ่มเติมในส่วนของ Linker ให้เป็น -lcv210 -lcvaux210 -lcxcore210 -lhighgui210 -lml210 ตามรูป
5. แก้ไขส่วนของแทบ Directories
5.1 หัวข้อ Binaries เพิ่ม C:\OpenCV2.1\bin
5.2 หัวข้อ libraries เพิ่ม C:\OpenCV2.1\lib
5.3 หัวข้อ C-Includes และ C++-Includes ให้เพิ่ม C:\OpenCV2.1\include\opencv
จากนั้นทดสอบโปรแกรมโหลดและแสดงผลรูปตามนี้ครับ สมมติว่ามีไฟล์รูป lena.jpg อยู่ในไดเรกทอรีเดียวกับตัวรหัสโปรแกรมนะครับ
ข้อดีในการติดตั้ง
ไม่ต้องแก้ไขไฟล์ cxoperations.hpp เหมือนในเวอร์ชัน 2.0 อีก
ปัญหาที่พบ
ผมไม่สามารถใช้คำสั่งภายใต้ namespace cv ได้เลย เช่นคำสั่ง imread, imshow, namedWindow, waitKey ตัวคอมไพเลอร์แจ้งว่ามีข้อผิดพลาดที่ linker ไม่เจอคำสั่งเหล่านี้ ทั้งๆที่ในเวอร์ชัน 2.0 กลับทำได้ ต้องลองหาทางแก้ต่อไปครับ
ลองไปดาวน์โหลดได้ที่ http://sourceforge.net/projects/opencvlibrary/files/ ครับ
สำหรับ Windows ควรเลือกไฟล์ OpenCV-2.1.0-win32-vs2008.exe นะครับ
ขั้นตอนการติดตั้งและใช้งานกับ Dev-CPP
สำหรับเวอร์ชันนี้ผมคิดว่าสนับสนุนการใช้งานกับ Visual Studio 2008 อยู่แล้วตามชื่อไฟล์ เราลองมาติดตั้งและใช้งานกับ Dev-CPP กันดูครับ
1. uninstall OpenCV เวอร์ชันเดิมออกก่อน
2. ติดตั้งเวอร์ชันใหม่ สมมติว่าติดตั้งที่ C:\OpenCV2.1
3. เปิดโปรแกรม Dev-CPP เลือกหัวข้อ Tools/ Compiler Options
4. แก้ไขคำสั่งเพิ่มเติมในส่วนของ Linker ให้เป็น -lcv210 -lcvaux210 -lcxcore210 -lhighgui210 -lml210 ตามรูป
5. แก้ไขส่วนของแทบ Directories
5.1 หัวข้อ Binaries เพิ่ม C:\OpenCV2.1\bin
5.2 หัวข้อ libraries เพิ่ม C:\OpenCV2.1\lib
5.3 หัวข้อ C-Includes และ C++-Includes ให้เพิ่ม C:\OpenCV2.1\include\opencv
จากนั้นทดสอบโปรแกรมโหลดและแสดงผลรูปตามนี้ครับ สมมติว่ามีไฟล์รูป lena.jpg อยู่ในไดเรกทอรีเดียวกับตัวรหัสโปรแกรมนะครับ
ข้อดีในการติดตั้ง
ไม่ต้องแก้ไขไฟล์ cxoperations.hpp เหมือนในเวอร์ชัน 2.0 อีก
ปัญหาที่พบ
ผมไม่สามารถใช้คำสั่งภายใต้ namespace cv ได้เลย เช่นคำสั่ง imread, imshow, namedWindow, waitKey ตัวคอมไพเลอร์แจ้งว่ามีข้อผิดพลาดที่ linker ไม่เจอคำสั่งเหล่านี้ ทั้งๆที่ในเวอร์ชัน 2.0 กลับทำได้ ต้องลองหาทางแก้ต่อไปครับ
Tuesday, April 6, 2010
การเปลี่ยนขนาดรูป (Resize)
เมื่อต้องการเปลี่ยนขนาดของรูป เช่น ย่อ หรือ ขยาย เราสามารถใช้คำสั่ง cvResize() ได้ ตามรูปแบบดังนี้
cvResize(imgin, imgout, type)
เมื่อ imgin imgout และ type คือรูปต้นฉบับ รูปผลลัพธ์ และ ชนิดของการทำ interpolation ตามลำดับ
สังเกตว่า คำสั่งนี้ไม่มีการระบุว่าให้เปลี่ยนขนาดของรูปเป็นเท่าใด ทั้งนี้เพราะ รูปจะถูกเปลี่ยนให้มีขนาดเท่ากับรูปผลลัพธ์นั่นเอง ดังนั้น เราจำเป็นต้องกำหนดขนาดใหม่ที่ต้องการให้กับรูปผลลัพธ์ไว้ล่วงหน้า
ชนิดของการทำ interpolation มีสี่รูปแบบคือ CV_INTER_NN (Nearest neighbor), CV_INTER_LINEAR (Bilinear), CV_INTER_AREA (Pixel area resampling) และ CV_INTER_CUBIC (Bicubic)
ลองพิจารณาัตัวอย่างต่อไปนี้
ผลลัพธ์
cvResize(imgin, imgout, type)
เมื่อ imgin imgout และ type คือรูปต้นฉบับ รูปผลลัพธ์ และ ชนิดของการทำ interpolation ตามลำดับ
สังเกตว่า คำสั่งนี้ไม่มีการระบุว่าให้เปลี่ยนขนาดของรูปเป็นเท่าใด ทั้งนี้เพราะ รูปจะถูกเปลี่ยนให้มีขนาดเท่ากับรูปผลลัพธ์นั่นเอง ดังนั้น เราจำเป็นต้องกำหนดขนาดใหม่ที่ต้องการให้กับรูปผลลัพธ์ไว้ล่วงหน้า
ชนิดของการทำ interpolation มีสี่รูปแบบคือ CV_INTER_NN (Nearest neighbor), CV_INTER_LINEAR (Bilinear), CV_INTER_AREA (Pixel area resampling) และ CV_INTER_CUBIC (Bicubic)
ลองพิจารณาัตัวอย่างต่อไปนี้
ผลลัพธ์
แปลงภาพสีเป็นภาพขาวดำ 2 (Color to grayscale image)
บทความก่อนหน้านี้แสดงการแปลงภาพสีให้เป็นภาพขาวดำ โดยหาค่าเฉลี่ยของพิกเซลสีในแต่ละ channel
OpenCV ได้เตรียมคำสั่งสำหรับการเปลี่ยนแปลง channel ของสีไว้ให้ใช้งานได้ง่ายยิ่งขึ้น ด้วยคำสั่ง cvCvtColor เช่น
cvCvtColor(img, out, CV_BGR2GRAY);
คือการเปลี่ยนรูป img ให้เป็น out โดยมีการเปลี่ยนจากรูปสี (BGR) เป็น grayscale (CV_BGR2GRAY)
คำสั่งนี้ยังสามารถใช้เปลี่ยนรูปแบบ channel ของสี เช่น จาก RGB เป็น HLS, HSV, YCrCb หรืออื่นๆได้ด้วย
พิจารณารหัสโปรแกรมดังต่อไปนี้
ผลลัพธ์
OpenCV ได้เตรียมคำสั่งสำหรับการเปลี่ยนแปลง channel ของสีไว้ให้ใช้งานได้ง่ายยิ่งขึ้น ด้วยคำสั่ง cvCvtColor เช่น
cvCvtColor(img, out, CV_BGR2GRAY);
คือการเปลี่ยนรูป img ให้เป็น out โดยมีการเปลี่ยนจากรูปสี (BGR) เป็น grayscale (CV_BGR2GRAY)
คำสั่งนี้ยังสามารถใช้เปลี่ยนรูปแบบ channel ของสี เช่น จาก RGB เป็น HLS, HSV, YCrCb หรืออื่นๆได้ด้วย
พิจารณารหัสโปรแกรมดังต่อไปนี้
ผลลัพธ์
Monday, April 5, 2010
แปลงภาพสีเป็นภาพขาวดำ (Color to grayscale image)
หากเรามีภาพสี และต้องการเปลี่ยนให้เป็นภาพขาวดำ จะทำได้อย่างไร
หลักการง่ายๆก็คือ หาค่าเฉลี่ยของแม่สีสามสี คือ น้ำเงิน เขียวและแดง นั่นคือ
G = (B+G+R)/3
อย่างไรก็ตาม เราพบว่าตาของเราตอบสนองต่อแม่สีทั้งสามต่างกัน จึงมีผู้เสนอให้ใช้สมการต่อไปนี้แทน
G = 0.114B + 0.587G + 0.299R
หากเราต้องการเขียนโปรแกรมใน OpenCV เพื่อตอบโจทย์นี้ เราต้อง
-สร้างรูปเปล่าที่เป็น grayscale ขึ้นเพื่อเก็บผลลัพธ์
-คำนวณผลรวมพิกเซลจากรูปสี แล้วบันทึกลงในพิกเซลของรูป grayscale ณ ตำแหน่งเดียวกัน
ตัวอย่างรหัสโปรแกรมจะเป็นดังนี้
ผลลัพธ์
จากโปรแกรมข้างต้น มีข้อสังเกตดังนี้
1. เราสร้างรูป grayscale เปล่าๆ ด้วยคำสั่ง
IplImage* out = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U,1);
จากพารามิเตอร์ของคำสั่ง cvCreateImage จะอธิบายได้ว่า เราต้องการสร้างรูปที่มีขนาดเท่ากับรูปต้นฉบับ (cvGetSize(img)) ให้เป็นแบบ unsigned 8 บิต (IPL_DEPTH_8U) และมีเพียง 1 channel
2. เราใช้พอยน์เตอร์สองตัว ตัวแรกชี้ที่รูปต้นฉบับ อีกตัวชี้ที่รูปผลลัพธ์
3. OpenCV มีการเรียง channel เป็นแบบ blue green red
4. เราหาผลรวมของแต่ละสี แล้วใช้พอยน์เตอร์เปลี่ยนค่าของรูป grayscale
5. หากบันทึกรูปผลลัพธ์นี้ จะได้รูปที่เป็น 8 บิต grayscale ด้วย
หลักการง่ายๆก็คือ หาค่าเฉลี่ยของแม่สีสามสี คือ น้ำเงิน เขียวและแดง นั่นคือ
G = (B+G+R)/3
อย่างไรก็ตาม เราพบว่าตาของเราตอบสนองต่อแม่สีทั้งสามต่างกัน จึงมีผู้เสนอให้ใช้สมการต่อไปนี้แทน
G = 0.114B + 0.587G + 0.299R
หากเราต้องการเขียนโปรแกรมใน OpenCV เพื่อตอบโจทย์นี้ เราต้อง
-สร้างรูปเปล่าที่เป็น grayscale ขึ้นเพื่อเก็บผลลัพธ์
-คำนวณผลรวมพิกเซลจากรูปสี แล้วบันทึกลงในพิกเซลของรูป grayscale ณ ตำแหน่งเดียวกัน
ตัวอย่างรหัสโปรแกรมจะเป็นดังนี้
ผลลัพธ์
จากโปรแกรมข้างต้น มีข้อสังเกตดังนี้
1. เราสร้างรูป grayscale เปล่าๆ ด้วยคำสั่ง
IplImage* out = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U,1);
จากพารามิเตอร์ของคำสั่ง cvCreateImage จะอธิบายได้ว่า เราต้องการสร้างรูปที่มีขนาดเท่ากับรูปต้นฉบับ (cvGetSize(img)) ให้เป็นแบบ unsigned 8 บิต (IPL_DEPTH_8U) และมีเพียง 1 channel
2. เราใช้พอยน์เตอร์สองตัว ตัวแรกชี้ที่รูปต้นฉบับ อีกตัวชี้ที่รูปผลลัพธ์
3. OpenCV มีการเรียง channel เป็นแบบ blue green red
4. เราหาผลรวมของแต่ละสี แล้วใช้พอยน์เตอร์เปลี่ยนค่าของรูป grayscale
5. หากบันทึกรูปผลลัพธ์นี้ จะได้รูปที่เป็น 8 บิต grayscale ด้วย
Subscribe to:
Posts (Atom)