Group Blog
 
All Blogs
 
MATLAB:Digital Image Processing : Image acquisition

เอาหล่ะครับBlogนี้เราจะเริ่มเข้าสู่การใช้งานโปรแกรมMATLABในการประมวลผลภาพดิจิตอลแล้วนะครับ เจ้าโปรแกรมนี้เรียกได้ว่าเป้นโปรแกรมคำนวณขั้นเทพ เพราะนอกจากคำนวณในเชิงวิศวกรรมได้หลายอย่างแล้ว
ผู้ผลิตยังมีToolbox หรือกล่องเครื่องมือมาให้ใช้ในสายงานต่าง ซึ่งในโปรเจ็คผมก็จะใช้Image processing Toolbox เนื่องจากใช้งานง่ายไม่ต้องนั่งเขียนอัลกอรึทึ่มใหม่ให้ปวดกบาล

ผมจะกล่าวถึงในการใช้งานนะครับ ส่วนทฤษฏีไปหาอ่านเองนะครับ

เอาหล่ะเรามาเริ่มการดึงภาพจากกล้องกันเลยดีกว่า...

กล้องที่ผมใช้จะเป็นเจ้าOKER ตัวละ4ร้อยกว่าบาท แต่แนะนำให้หาDriverที่Supportตัวกล้องนะครับเพราะไม่งั้นจะไม่สามารถึงภาพในระบบสีRGBได้ จะไปดึงได้แต่เจ้าระบบYUY2 ซึ่งมันคืออะไรก็ไม่รู้ น่าจะเป็นระบบสี CMYK มั้งไม่แน่ใจ

จริงๆแล้วขั้นตอนเหล่านี้จะมีให้อ่านในHelp ของโปรแกรมMATLAB และเจ้าHelp นี่แหละที่ดีที่สุดในบรรดาหนังสือMATLAB แต่ถ้าใครไม่แข็งภาษาก็อย่าไปอ่านมันเลยครับ

ขั้นตอนแรกของการดึงภาพนั้นก่อนอื่นเลยต้องเสียบกล้องเข้ากับคอมพิวเตอร์(ต้องเสียบก่อนเปิดโปรแกรมMATLABนะครับ)

ขั้นตอนต่อมาคือการ Determining the Device Adaptor Name
หรือชื่อของกล้องนั่นแหละครับ โดยการพิมพ์คำสั่ง

imaqhwinfo ลงไปในหน้าต่าง จากนั้นมันจะขึ้นว่า

ans =

InstalledAdaptors: {'coreco' 'winvideo'}
MATLABVersion: '7.5 (R2007b)'
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '3.0 (R2007b)'


Device Adaptor Nameของเราก็ คือ'winvideo' ส่วนเจ้า 'coreco' มันคือชื่ออะไรก็ไม่รู้ แถมไม่สามารถดึงมาใช้ได้อีกต่างหาก

จากนั้นเราก็จะมาหาว่ากล้องนี่มันมีIDหมายเลขอะไรโดยการพิมพ์คำสั่งเดิมแต่จะกำหนดตัวแปรและวงเล็บชื่อของกล้องไปด้วยดังนี้

IDinfo = imaqhwinfo('winvideo')

เราก็จะได้คำตอบออกมาคือ

IDinfo =

AdaptorDllName: [1x81 char]
AdaptorDllVersion: '3.0 (R2007b)'
AdaptorName: 'winvideo'
DeviceIDs: {[1]}
DeviceInfo: [1x1 struct]

หมายถึงว่าIDของกล้องเราคือเลข 1 ซึ่งหมายความว่ากล้องเราเป็นตัวแรกที่โปรแกรมมันค้นหาเจอครับ ส่วนตัวที่2,3,4 ลองเอากล้องหลายๆตัวมาเสียบดูแล้วกันเพราะผมมีตัวเดียว

ส่วนถ้าต้องการรายละเอียดเพิ่มเติมของกล้องเราก็ใส่คำสั่งเดิมลงไปเพราะกับหมายเลขIDดังนี้

IDinfo = imaqhwinfo('winvideo',1)


IDinfo =

DefaultFormat: 'RGB24_640x480'
DeviceFileSupported: 0
DeviceName: 'USB Video Device'
DeviceID: 1
ObjectConstructor: 'videoinput('winvideo', 1)'
SupportedFormats: {1x10 cell}

จากคำสั่งนี้ทำให้เราเห็นรายละเอียดต่างๆของกล้องที่เรานำมาเชื่อมต่อ

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

celldisp(IDinfo.SupportedFormats) // IDinfo คือตัวแปรนะครับไว้เก็บรายละเอียดที่เราหามาข้างต้น

จากการพิมพ์คำสั่งดังกล่าวโปรแกรมจะแสดงถึงระบบสีและความละเอียดของภาพที่กล้องเราสามารถทำได้

ans{1} =

I420_160x120


ans{2} =

I420_176x144


ans{3} =

I420_320x240


ans{4} =

I420_352x288


ans{5} =

I420_640x480


ans{6} =

RGB24_160x120


ans{7} =

RGB24_176x144


ans{8} =

RGB24_320x240


ans{9} =

RGB24_352x288


ans{10} =

RGB24_640x480

จากขั้นตอนบนๆจะเห็นว่าค่าเริ่มต้นหรือ DefaultFormat: 'RGB24_640x480'
อยู่แล้วนะครับเราจึงไม่จำเป็นต้องไปเปลี่ยนแปลงอะไร
ก็คือเราจะดึงภาพในระบบสีRGB 24 bit ที่ความละเอียด 640x480

ต่อมาจะถึงขั้นตอนการดึงภาพแล้วนะครับ ก่อนอื่นเราจะต้องเอารายละเอียดเช่น Device name,Device ID,Format ไว้ในตัวแปรโดยใช้คำสั่ง videoinput ซึ่งจะเขียนได้ดังนี้

vid = videoinput('winvideo',1,'RGb24_640x480');

จะเห็นได้ว่าตัวแปร vidจะถูกเก็บ Device name,Device ID,Format ไว้ทั้งหมด
จากนั้นก็ต้องเริ่มการเก็บเฟรมของภาพไว้ในหน่วยความจำของกล้อง
โดยใช้คำสั่ง
start(vid)
จากนั้นก็เริ่มกระบวนการดึงภาพมาสู่ตัวแปรโดยคำสั่ง
im_rgb = getdata(vid,1);
และจะต้องหยุดการดึงเฟรมภาพด้วยคำสั่ง
stop(vid)

รูปที่เราถ่ายไว้จะอยู่ในตัวแปรที่ชื่อว่า im_rgb แล้วนะครับ การstart(vid) และ stop(vid) จะต้องทำทุกครั้งในการดึงภาพ และบางทีเราจะต้องเคลียร์เฟรมที่ถูกเก็บไว้ในหน่วยความจำของกล้องด้วยคำสั่ง clear (vid)

และถ้าใครอยากดูภาพแบบreal time ก็สามารถใช้คำสั่ง preview(vid)ก็ได้นะครับ แต่เปิดหน้าต่างpreviewไว้แล้วการประมวลผลต่างๆจะช้าลงกระจายเลยครับ

ต่อมาเราลองมาดูภาพที่เราถ่ายไว้ดีกว่าโดยการใช้คำสั่งในการแสดงภาพคือ

imshow(im_rgb)

จะได้ภาพที่ถ่ายดังนี้



สรุปแล้วขั้นตอนต่างๆที่ทำไว้เป็นแค่ขั้นตอนการดึงภาพนะครับ
อาจจะเห็นว่ายาวเฟื้อยแต่พอใช้งานจริงใช้แต่ไม่กี่บรรทัดเพราะเราไม่จำเป็นต้องค้นหาชื่อ,ID,Format ของกล้องทุกครั้งหรอกครับ แค่กำหนดไว้ในตัวแปรแล้วstart-->getdata-->stop ก็พอแล้ว

อาจจะเขียนแบบงงๆนะครับเพราะผมพิมพ์เองก็เริ่ม งงเอง เอาเป็นว่าใครอยากถามเกี่ยวกับพวกนี้ก็หลังไมค์มาได้ครับ จะช่วยเท่าที่จะช่วยได้

ไว้Blogหน้าจะปรับปรุงสำนวนการนำเสนอนะครับ Blogนี้ทำใจอ่านไปก่อน


Create Date : 28 เมษายน 2553
Last Update : 28 เมษายน 2553 0:42:53 น. 1 comments
Counter : 4384 Pageviews.

 
คลิกๆๆ รูปสวยๆน่ารักๆไว้ส่งต่อเพียบ...




โดย: นนนี่มาแล้ว วันที่: 28 เมษายน 2553 เวลา:2:06:24 น.  

ชื่อ : * blog นี้ comment ได้เฉพาะสมาชิก
Comment :
  *ส่วน comment ไม่สามารถใช้ javascript และ style sheet
 

jubchay
Location :


[Profile ทั้งหมด]

ให้ทิปเจ้าของ Blog [?]
ฝากข้อความหลังไมค์
Rss Feed
Smember
ผู้ติดตามบล็อก : 7 คน [?]




Friends' blogs
[Add jubchay's blog to your web]
Links
 

 Pantip.com | PantipMarket.com | Pantown.com | © 2004 BlogGang.com allrights reserved.