SlideShare a Scribd company logo
1 of 27
Download to read offline
รหัสโครงการ 11P14C586
Development of Chroma Key Technique on Graphics Processing Unit
โปรแกรมซ้อนภาพพื้นหลังโปร่งสีสําหรับทํางานบนการ์ดแสดงผล
โปรแกรมเพื่องานการพัฒนาด้านวิทยาศาสตร์และเทคโนโลยี (นักศึกษา)
รางงานฉบับสมบูรณ์
เสนอต่อ
ศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ
สํานักงานพัฒนาวิทยาศาสตร์และเทคโนโลยีแห่งชาติ
กระทรวงวิทยาศาสตร์และเทคโนโลยี
และ
สํานักงานส่งเสริมอุตสาหกรรมซอฟต์แวร์แห่งชาติ
ได้รับทุนอุดหนุนโครงการวิจัย พัฒนาและวิศวกรรม
โครงการการแข่งขันพัฒนาโปรแกรมคอมพิวเตอร์แห่งประเทศไทย ครั้งที่ 11
ประจําปีงบประมาณ 2551
โดย
ผู้พัฒนา นายเอกลักษณ์ ป้องแก้ว
อาจารย์ที่ปรึกษาโครงการ ผศ.ดร.อรรถวิทย์ สุดแสง
จุฬาลงกรณ์มหาวิทยาลัย
I
กิตติกรรมประกาศ
ทางผู้ดําเนินโครงการขอขอบคุณบุคคล, บริษัท และหน่วยงานต่างๆ ที่ให้การสนับสนุน
เพื่อให้โครงงานนี้สําเร็จแลลุล่วงไปได้ด้วยดี โดยมีรายนามดังต่อไปนี้
• ผศ.ดร.อรรถวิทย์ สุดแสง (อาจารย์ที่ปรึกษาโครงการ)
ขอขอบพระคุณอาจารย์เป็นอย่างมากสําหรับคําปรึกษาที่ดีและมีคุณค่า ตลอดการ
ดําเนินงาน
• โครงการการแข่งขันพัฒนาโปรแกรมคอมพิวเตอร์แห่งประเทศไทยครั้งที่ 11
จาก ศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ
สํานักงานพัฒนาวิทยาศาสตร์และเทคโนโลยีแห่งชาติ และ
สํานักงานส่งเสริมอุตสาหกรรมซอฟต์แวร์แห่งชาติ
ที่ได้สนับสนุนเงินทุนอุดหนุนโครงการการพัฒนาโปรแกรมซ้อนภาพพื้นหลัง
โปร่งสีสําหรับทํางานบนการ์ดแสดงผล
II
บทคัดย่อ
การซ้อนภาพพื้นหลัง (Matte) คือ การนําภาพๆหนึ่งมาทําให้พื้นที่บางส่วนโปร่งใส แล้วนํา
ภาพนั้นไปซ้อนกับภาพอีกภาพหนึ่ง พูดอีกอย่างหนึ่งคือการแทนที่ภาพบางส่วนของภาพนั้นด้วย
ภาพอื่น ซึ่งในปัจจุบันการซ้อนภาพได้รับความนิยมมากขึ้นเรื่อยๆ เนื่องจากการที่สามารถแทนส่วน
หนึ่งของภาพด้วยสิ่งที่ต้องการทําให้สะดวกต่อการทํางานและประหยัดค่าใช้จ่าย มีประโยชน์
มากมายในหลายๆด้าน ไม่ว่าจะเป็นการถ่ายทําวิดีโอในสตูดิโอ หรือถ่ายภาพยนตร์ การตกแต่ง
ภาพถ่าย ซึ่งสามารถตกแต่งรายละเอียดได้ตามต้องการ แต่ค่าใช้จ่ายในการทําค่อนข้างสูง เนื่องจาก
ซอฟต์แวร์เพื่อทําการซ้อนภาพนั้นมีราคาแพง หรือการใช้แรงงานคนและเวลาจํานวนมาก และต้อง
ใช้คอมพิวเตอร์ประสิทธิภาพสูงในการประมวลผลเพื่อให้ได้ผลลัพธ์ทันเวลา ดังนั้นผู้พัฒนาจึงมี
ความคิดที่จะพัฒนาซอฟต์แวร์นี้ขึ้นมาเพื่อทําให้การสร้างซ้อนภาพหรือวิดีโอทําได้โดยง่าย และ
สามารถทํางานได้รวดเร็วได้โดยไม่ต้องใช้คอมพิวเตอร์ประสิทธิภาพสูง
อีกทั้งในปัจจุบันนี้มีความตื่นตัวในเรื่องการใช้ซอฟต์แวร์ถูกลิขสิทธิ์มากยิ่งขึ้น การที่ต้อง
ใช้ซอฟต์แวร์ราคาแพงนั้น อาจทําให้เกิดการละเมิดลิขสิทธิ์ได้และประสิทธิภาพของการ์ดแสดงผล
ในปัจจุบันมีการพัฒนาไปอย่างรวดเร็ว ดังนั้นในการพัฒนาซอฟต์แวร์ซ้อนภาพพื้นหลังโปร่งใส
สําหรับทํางานบนการ์ดแสดงผลจึงมีแนวคิดที่จะพัฒนาขึ้นให้ทํางานได้ถูกต้อง ใช้งานง่าย และใช้
เวลาในการประมวลผลน้อย แม้ไม่ได้ทําการประมวลผลบนคอมพิวเตอร์ประสิทธิภาพสูงเพื่อลด
ค่าใช้จ่ายในการซื้อซอฟต์แวร์ และค่าใช้จ่ายในการซื้อเครื่องคอมพิวเตอร์ประสิทธิภาพสูง
Abstract
Mattes are used in photography and special effects filmmaking to combine two or more
image elements into a single, final image. Usually, mattes are used to combine a foreground
image with a background. We formulate the problem as one of solving Poisson equations with the
matte gradient field. Our approach, which we call Poisson matting, has the following advantages.
Experiments on many complex natural images demonstrate that Poisson matting can generate
good matting results that are not possible using existing matting techniques.
Therefore, the idea of low-cost matting’s system is then come up. The system is
composed of many general low-cost webcams and the software used for building matte image or
many videos from webcams.
Moreover, using right protected software is more important in present. And the gpu’s
performance is high. We have migrated to program on gpu. Hence, developing application on gpu
can also reduce the cost and time.
III
บทนํา
ในปัจจุบัน คอมพิวเตอร์ได้เข้ามามีบทบาทในการทํางานด้านเทคนิคการซ้อนภาพพื้นหลัง
ในภาพยนตร์มากขึ้น แต่การใช้คอมพิวเตอร์ส่วนใหญ่แล้วต้องพึ่งพาเทคโนโลยีจากต่างประเทศ
เพราะเทคโนโลยีในประเทศยังไม่มีประสิทธิภาพมากพอ ส่งผลให้ผู้ผลิตภาพยนตร์เสียค่าใช้จ่ายใน
การซื้อเทคโนโลยีมากขึ้นส่งผลให้ต้นทุนการผลิตสูง อีกทั้งเทคโนโลยีที่ใช้ยังมีประสิทธิภาพตํ่า
ประมวลผลได้ช้าและผลที่ได้ยังไม่ดีเท่าที่ควร ดังนั้นวิธีที่จะช่วยให้ผู้ผลิตภาพยนตร์เหล่านี้ให้
สามารถใช้งานเทคโนโลยีได้ก็คือการสร้างเทคโนโลยีที่มีประสิทธิภาพมาทดแทนการซื้อ
เทคโนโลยีจากต่างประเทศ
ปัจจุบันโปรแกรมซ้อนภาพพื้นหลังนั้นไม่สามารถประมวลผลได้อย่างถูกต้องเท่าที่ควร
โดยเมื่อได้รับภาพเข้าไปแล้ว โปรแกรมจะทําการระบุบริเวณที่ต้องทําการบังภาพแล้วส่งต่อไปให้
ส่วนที่ทําการซ้อนภาพพื้นหลังให้ทําการซ้อนภาพพื้นหลังต่อ แต่เนื่องจากตัวระบุบริเวณที่ต้องทํา
การบังภาพที่ใช้ในปัจจุบันยังไม่สามารถทํางานได้อย่างถูกต้อง เมื่อส่วนซ้อนภาพพื้นหลังได้ทําการ
ซ้อนภาพพื้นหลังไปจึงทําให้ไม่สามารถสร้างภาพพื้นหลังที่ดูเสมือนจริงได้
โปรแกรมซ้อนภาพพื้นหลังที่พัฒนาขึ้นมานี้ จะเริ่มต้นโดยพัฒนาโปรแกรมให้สามารถ
ทํางานบน CPU ได้ก่อน ซึ่งทํางานได้ช้าและสามารถพัฒนาต่อได้โดยจะนํามาพัฒนาให้สามารถ
ทํางานบน GPU และ สามารถทํางานได้อย่างถูกต้อง รวดเร็ว และ มีประสิทธิภาพ หรืออาจจะ
สามารถทํางานได้แบบ Real-time โดยโปรแกรมที่พัฒนาขึ้นมีแนวคิดในการทํางานโดยการแก้
สมการ Poisson โดยใช้ข้อมูลค่าขอบเขตจาก tri-map ที่กําหนดขึ้น และอาศัยความต่อเนื่องของสีใน
ภาพฉากหน้าและฉากหลัง จากนั้นจะทําการกรองค่าที่ผิดพลาดออก และสามารถทําการปรับปรุง
แก้ไขผลลัพธ์จนพอใจได้
ดังนั้นหากพัฒนาโปรแกรมโดยใช้วิธี Poisson matting และทําการพัฒนาให้ทํางานบน
GPU ได้ปรับปรุงโดยลดเวลาในการประมวลผลได้ก็จะช่วยให้โปรแกรมซ้อนภาพพื้นหลังสามารถ
ทํางานได้แบบ Real-time ถูกต้อง และมีประสิทธิภาพ
สารบัญ
หัวข้อ หน้า
กิตติกรรมประกาศ I
บทคัดย่อ II
บทนํา III
วัตถุประสงค์และเป้าหมาย 1
รายละเอียดของการพัฒนา 2
แนวคิดและขั้นตอนการทํางานของโปรแกรม 2
ทฤษฎีและเทคโนโลยีที่เกี่ยวข้อง 3
Poisson matting 3
Jacobi’s method 5
General Purpose Computing on Graphic Processing Unit 5
สีปฐมภูมิ ระบบสี RGB, HSV 6
เครื่องมือที่ใช้ในการพัฒนา 9
รายละเอียดโปรแกรม 12
รายละเอียดขั้นตอนการทํางานของโปรแกรม 12
ขอบเขต ข้อจํากัด 14
กลุ่มผู้ใช้โปรแกรม 14
ผลของการทดสอบโปรแกรม 14
ปัญหาและอุปสรรค 16
แนวทางในการพัฒนาและประยุกต์ 18
ข้อสรุปและข้อเสนอแนะ 18
เอกสารอ้างอิง 19
คู่มือการติดตั้งอย่างละเอียด 20
คู่มือการใช้งานอย่างละเอียด 20
1
วัตถุประสงค์และเป้าหมาย
โครงงานนี้มีจุดประสงค์หลักในการดําเนินการ ดังต่อไปนี้
• ศึกษาเทคนิคการซ้อนภาพพื้นหลังแบบต่างๆ
• พัฒนาโปรแกรมที่สามารถทําการซ้อนภาพพื้นหลังได้อย่างมีประสิทธิภาพ
• ศึกษาและพัฒนาโปรแกรมให้ทํางานแบบ parallelได้บน GPU
• เพื่อส่งเสริมการพัฒนาด้านความเร็วในการประมวลผลโดยการพัฒนาให้ทํางานแบบ
คู่ขนานบนการ์ดแสดงผล
• สนับสนุนการเขียนโปรแกรมเพื่อทํางานบนการ์ดแสดงผลให้เพิ่มมากขึ้น เพื่อเพิ่ม
ประสิทธิภาพของโปรแกรมโดยไม่ต้องพึ่งCPUประสิทธิภาพสูงเพียงอย่างเดียว
• เพื่อลดค่าใช้จ่ายการซื้อคอมพิวเตอร์ประสิทธิภาพสูง
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
รายละเอียดของการพัฒนา
• แนวคิดและขั้นตอนการทํางานของโปรแกรม
โปรแกรมที่พัฒนาขึ้นมานี้ถูกออกแบบให้สามารถทํางานได้กับภาพที่แม้ไม่ได้มี
การใช้เทคนิค Blue/green screen [1] แต่ก็ยังสามารถทํางานได้โดยที่ต้องเพิ่ม input เพิ่มอีก
คือ tri-map โดยที่ tri-map คือภาพที่แสดงว่าส่วนในภาพบริเวณใดเป็น Foreground บริเวณ
ใดเป็น Background และ บริเวณใดเป็น unknown ซึ่งเมื่อได้แล้วจะนําไปทําการหาค่า
ความโปร่งใสที่เหมาะสม เพื่อจะนําไปสร้าง Composite image [2] ที่ถูกต้องได้
โดยขั้นตอนการทํางานของโปรแกรมคือ เมื่อรับภาพ Input เข้ามาแล้ว จะทําการ
resize ภาพ เพื่อให้ได้ภาพที่มีขนาดเหมาะสมกับการทํางานของโปรแกรมแล้วจะนําภาพที่
ได้ไปสร้างสมการสําหรับคํานวนหาค่าความโปร่งใสที่เหมาะสมตามวิธีของ Poisson
Matting[3] จะได้เป็น Matrix A ซึ่ง มีขนาดเป็น n*n (n คือ จํานวนจุดของรูป) และ matrix
B หรือ right hand value ของ สมการเชิงเส้น AX = B จากนั้น ทําการสร้าง texture สําหรับ
เป็น input ให้กับ fragment program ของ Cg เพื่อทําการแก้สมการเชิงเส้นโดยอาศัยการ์ด
แสดงผลช่วยในการแก้สมการ โดยใช้วิธี Jacobi’s Method[4] โดยวิธีนี้อาจจะทําการ
ประมวลผลบน CPU เลยก็ได้ผลลัพธ์ที่ได้เหมือนกัน จากนั้น โปรแกรมจะนําค่าความ
โปรงใสที่ได้ไปสร้าง composite image ต่อไป แล้วทําการแสดงผลออกมา กรณีที่เป็น
วีดีโอก็จะมีการ ประมวลผลในเฟรมต่อๆไป
3
• ทฤษฎีและเทคโนโลยีที่เกี่ยวข้อง
Poisson matting[3]
เป็นวิธีหนึ่งที่ให้ผลลัพธ์ได้ถูกต้อง มีประสิทธิภาพวิธีหนึ่งโดยที่อาศัยค่า
ของ Gradient field ของภาพ Input เพื่อนําไปหาค่าความโปร่งใสที่เหมาะสมเพื่อ
สร้าง composite image โดยค่าสีของ composite image ในแต่ละจุดคํานวนได้
จากสมการด้านล่าง
จากสมการ
ทํา Partial derivative ได้เป็น
ในกรณีที่ Foreground และ Background มีค่า Gradient น้อยๆ จะได้เป็น
หรือ
4
และในกรณีที่ Foreground และ Background มีค่า Gradient มาก จะได้เป็น
หรือ
โดยสามารถแก้สมการเพื่อหาค่าที่เหมาะสมตามสมการด้านล่าง
-ในกรณีที่ Foreground และ Background มีค่า Gradient น้อยๆ
-ในกรณีที่ Foreground และ Background มีค่า Gradient มาก
โดยจากสมการข้างต้นสามารถแปลงจาก Continue ให้อยู่ในรูปแบบ
discrete ได้จากนั้นจะได้เป็นสมการ Linear algebra ขนาดใหญ่
(An*nXn*1=Bn*1) โดยที่ matrix A นั้นมีลักษณะเป็น band & sparse matrix ดังรูป
จากนั้นทําการแก้สมการก็จะได้ค่าความโปร่งใส ซึ่งนําไปสร้างภาพ Composite
Image ตามสมการ
5
การแก้Linear algebra โดยวิธี Jacobi’s method [4]
Jacobi method เป็นอัลกอริทึมในการแก้สมการเชิงเส้น โดยที่จะเป็นการทําวนซํ้า
เพื่อให้ได้ผลลัพธ์ที่มีความแม่นยําเพิ่มมากขึ้นเรื่อยๆโดยที่เมื่อเราแทนสมการเชิงเส้นด้วย
เมทริกซ์
จะได้
โดยที่
, เมื่อ D, L และ U แทนด้วยเมทริกซ์ เส้นทะแยงมุม
สามเหลี่ยมใต้เส้นทะแยงมุม และ สามเหลี่ยมเหนือเส้นทะแยงมุม ของเมทริกซ์ A
จะได้สมการใหม่เป็น
มากกว่านั้นคือ
ถ้า สําหรับ i. จากกฎการทําซํ้า จะได้ว่า
เมื่อ k คือ จํานวนรอบ
GPGPU [5]
GPGPU ย่อมาจาก General Purpose Computing on Graphic Processing Unit
หมายถึง การนําเอาการ์ดแสดงผล มาใช้เพื่อทําการประมวลผลงานอื่น ๆ เช่น การคํานวณ,
การสร้างและค้นหาฐานข้อมูล หรือทํางานอื่น ๆ เหมือนอย่างที่ทุกวันนี้ CPU (Central
Processing Unit) ทําอยู่ และมีนักวิทยาศาสตร์คอมพิวเตอร์หลายคนพยายามพัฒนาเพื่อให้
มาแทนที่ CPU เนื่องด้วย GPU นี่ราคาถูกกว่าและมีความสามารถในการทําการคํานวนได้
ดีกว่า ปัจจุบันเราสามารถเขียนโปรแกรมโดยใช้ภาษา C หรือ C++ บน GPGPU ได้แต่ต้อง
มี Library อย่าง ActiveX หรือ OpenGL
6
อย่างที่เราทราบกันดีว่า GPU นี่ถูกออกมาเพื่อใช้งานทางด้านภาพ อย่าง เช่นเกมส์
ช่วยทําให้เกมส์นี่ไหลลื่นคล่อง ภาพไปเบลอกระตุก การทํางานแบบนี้ต้องอาศัยการ
คํานวณและประมวลผลภาพที่รวดเร็วเป็นอย่างมาก ดังนั้นสถาปัตยกรรมของ GPU จึงเป็น
แบบ Parallel คือ จะประมวลผลข้อมูลได้หลาย ๆ ข้อมูลด้วยคําสั่งเดียว (Single Instruction
Multiple Data) มากกว่าการใช้2 Core เพราะปัจจุบัน NVDIA Series 8 นี่มีมากกว่า 32 core
Core คือ ส่วนที่ใช้สําหรับการประมวลผลจริง ๆใน CPU ที่เรียกว่า Multicore คือ
มีส่วนที่ใช้ประมาวลผลหลายตัวใน CPU ตัวเดียว
สําหรับ การพัฒนา GPGPU สามารถพัฒนาไปใช้งานได้เรียกว่า แทบจะเท่ากับงาน
ของ CPU เลยทีเดียว แต่ GPU ก็ยังมีปัญหาเรื่อง ความซับซ้อนในการทํางานและ
ประมวลผล ทําให้การพัฒนาลําบากกว่า แต่ผลลัพธ์คุ้มค่าเพราะการทํางานเร็วกว่า CPU
มาก สําหรับรุ่นที่นํามาเขียนโปรแกรมได้ก็เริ่มตั้งแต่ NVDIA GeForce5000 ขึ้นไป และใน
รุ่นที่เทียบเท่ากันสําหรับ ATi ไม่แน่ว่า อีกไม่นานนี้การ์ดจอ จะเข้ามาทําหน้าที่แทน CPU
ได้โดยสมบูรณืแต่มีราคาที่ถูกกว่ามากก็เป็นได้
สีปฐมภูมิ
ประสาทตาของมนุษย์ปกติจะตอบสนองต่อคลื่นที่ความถี่ 400 นาโนเมตรถึง
700 นาโนเมตร [11] โดยที่ในดวงตาของมนุษย์จะมีเซลประสาทที่ตอบสนองต่อคลื่น
ความถี่ต่างๆ กันอยู่ 3 ช่วงความถี่ คือที่ความถี่ของสีนํ้าเงิน สีเขียว และสีแดง ดังรูป ซึ่งเมื่อ
สมองนําไปแปลความหมายแล้วจะได้ออกมาเป็นภาพอย่างที่เราเห็นกัน
รูปแสดงการตอบสนองของประสาทตาของมนุษย์ที่ความยาวคลื่นต่างๆ
7
ระบบสี[10]
ในทางคอมพิวเตอร์ การอ้างอิงถึงสีใดสีหนึ่ง สามารถทําได้หลายวิธี โดยปกติจะ
กําหนดเป็นกลุ่มของตัวเลข 3 ถึง 4 ตัว เพื่อใช้แทนแต่ละส่วนประกอบในการอธิบายสีนั้นๆ
โดยระบบสีที่นิยมใช้กันก็เช่น RGB, CMY, HSV
ระบบสี RGB
ระบบสีแบบ RGB ประกอบขึ้นจากส่วนประกอบพื้นฐาน 3 ส่วนคือสีแดง (Red)
สีเขียวนี้จะระบุด้วยค่าทั้งสามค่านี้ (Green) และสีนํ้าเงิน (Blue) โดยการระบุสีในระบบสี
แบบ RGB ในสัดส่วนที่ต่างๆกันเพื่อสร้างเป็นสีที่ต้องการ เราสามารถจําลองภาพของ
ระบบสี RGB นี้ได้ด้วยการกําหนดขนาดลูกบาศก์ขนาด 1x1x1 และแทนแกนที่ x, y, z ด้วย
ค่าสี R,G,B จะได้ลูกบาศก์ของสีดังในรูป
ระบบสีแบบ RGB นี้จัดเป็นระบบสีแบบ additive เนื่องจากที่จุด (0, 0, 0) หมายถึง
สีดํา เมื่อแต่ละสีมีค่าเพิ่มขึ้นก็จะได้ค่าสีที่สว่างมากขึ้น จนกระทั่งที่จุด (1, 1, 1) ซึ่งหมายถึง
สีขาว
รูปแสดงระบบสี RGB บนแกนสามมิติ
ระบบสีแบบ CMY
ระบบสีแบบ CMY ประกอบด้วยส่วนประกอบย่อยของสามสี ได้แก่ สีฟ้า (Cyan)
สีม่วงแดง (Magenta) และสีเหลือง (Yellow) ซึ่งทั้งสามสีเป็นสีหลักของระบบงานพิมพ์
หมึกสีฟ้าจะดูดกลืนสีแดง หมึกสีม่วงแดงจะดูดกลืนสีเขียว และหมึกสีเหลืองจะดูดกลืนสี
นํ้าเงิน ดังนั้นสีที่มองเป็นจะเป็นผลจากการสะท้อนสีที่ไม่ถูกดูดกลืนออกมา ด้วยคุณสมบัติ
แบบนี้ เราจึงจัดระบบสีแบบ CMY ว่าเป็นระบบสีแบบ subtractive
โดยพื้นฐานแล้ว ที่ค่า CMY = (0, 0, 0) จะหมายความว่า ไม่มีการดูดกลืนสีใดๆเลย
ดังนั้นแสงที่ตกกระทบจะสะท้อนทุกช่วงความถี่ ทําให้เห็นเป็นสีขาว และที่ (1, 1, 1)
หมายถึงทุกสีจะถูกดูดกลืนทั้งหมดโดยไม่มีการสะท้อนสีใดออกไปเลย ทําให้มองเห็นเป็น
สีดํา
8
ระบบสีแบบ HSV[12]
โดยที่จริงแล้ว ระบบสีแบบ HSV นั้นเป็นการนําระบบสีแบบ RGB มาผ่าน
กระบวนการเปลี่ยนรูปอย่างไม่เป็นเชิงเส้น (nonlinear transformation) เพราะการระบุค่าสี
แบบแยก RGB นั้นทําความเข้าได้ยาก ในระบบสีแบบ HSV จึงใช้การระบุค่าแบบ Hue,
Saturation และ Value แทน
โดยจากในรูป ค่าของ Hue จะเป็นค่าที่กําหนดว่าเป็นสีอะไร ซึ่งค่าที่ 0 จะ
หมายถึงสีแดง และ วนไปแบบทวนเข็นนาฬิกา ค่าที่ พาย จะหมายถึงสีฟ้า และกลับมาจบที่
สีแดงอีกครั้งที่ค่า 2พาย ส่วนค่าของ saturation คือ ความอิ่มตัวของสี แทนด้วยระยะห่าง
จากจุดศูนย์กลางของวงกลมโดยสีที่มีความอิ่มตัวน้อยจะมีสีใกล้เคียงกับสีดําและสีเทา สีที่
มีความอิ่มตัวมากจะมีความสดและฉูดฉาด (vivid) สูง และสุดท้ายค่า value คือค่าความ
สว่างของสีนั้นๆ บางครั้งก็เรียกว่า Brightness ทําให้ย่อเป็น HSB
รูปแสดงกรวยแสดงสีแบบ HSV
9
• เครื่องมือที่ใช้ในการพัฒนา
1. ภาษา C++
เป็นภาษาซึ่งมีประสิทธิภาพสูง สามารถประมวลผลได้เร็ว ทําความเข้าใจได้ไม่อยากและมี
ไลบรารี่ให้เลือกใช้มากมาย บนอินเตอร์เน็ต สามารถใช้ได้ทั่วไป ทํางานได้บนเพลตฟอร์ม
วินโดว์ซึ่งเป็นที่แพร่หลาย
2. ภาษา Cg[6]
เป็นภาษาที่ nvidia ทําออกมาเพื่อให้ผู้ใช้ผลิตภัณฑ์สามารถนําไปเขียนโปรแกรม
เพื่อควบคุมการทํางานของ GPU ได้ทําให้เราสามารถ ใช้การ์ดแสดงผลทําการประมวลผล
ได้ตามที่เราต้องการและ สามารถนํามาใช้ทํา GPGPU หรือ General Purpose Graphic
Processing Unit ทําให้สามารถใช้งาน GPU ในการประมวลผล
3. IDE ที่ใช้ในการพัฒนา: Visual Studio C++2005 Express
Visual Studio C++ 2005 Express เป็นส่วนหนึ่งของ Visual Studio 2005 Express
Edition เป็นเครื่องมือที่เหมาะสําหรับผู้เริ่มต้นเรียนรู้การเขียนโปรแกรมบน Windows,
แอพพลิเคชัน หรือแม้แต่เกมคอมพิวเตอร์ เพื่อให้ง่ายต่อการใช้งาน Visual Studio Express
Edition แยกออกตามภาษาโปรแกรมคือ Visual Basic, Visual C#, Visual C++, Visual J#
และ Visual Web Developer
4. Library ที่ใช้ในการพัฒนา: OpenCV[7]
OpenCV คือ เป็น library สําหรับทํา image processing พัฒนาเริ่มโดยบริษัท อิน
เทล โดย OpenCV สามารถนําไปใช้ในการค้นคว้าวิจัย และการนําไปใช้ในเชิงพาณิชย์ได้
ภายใต้ใบอนุญาต BSD
OpenCV ทํางานได้บนระบบปฏิบัติการ Mac OS X, Windows และ Linux
OpenCV เน้นที่จะทํา image processing แบบทันเวลา และหาก OpenCV สามารถเพิ่ม
ประสิทธิภาพได้หากทํางานบนอินเทล
10
5. Personal Computer
คือเครื่องคอมพิวเตอร์ที่ใช้ในการเขียนและรันโปรแกรม โดยที่คอมพิวเตอร์เครื่อง
นี้ต้องมีการติดตั้งการ์ดแสดงผลของ nvidia ด้วย
6. Camera
คือ กล้องโดยใช้รับภาพเป็นอินพุท โดยอาจใช้กล้องเวบแคมทั่วๆไป
7. Graphics processing unit หรือ Graphic card [8]
(Graphic adaptor หรือ graphics card, video card, video board, video display
board, display adapter, video adapter) เป็นอุปกรณ์ที่รับข้อมูลเกี่ยวกับการแสดงผลจาก
หน่วยความจํา มาคํานวณและประมวลผล จากนั้นจึงส่งข้อมูลในรูปแบบสัญญาณเพื่อนําไป
แสดงผลยังอุปกรณ์แสดงผล
11
บริษัท NVIDIA เป็นผู้พัฒนา GPU ที่มีชื่อว่า GeForce 256 เป็นเจ้าแรก.
ประสิทธิภาพการทํางานของ GeForce 256 มีสูงมากมันสามารถทําการคํานวณเป็นพันล้าน
ต่อวินาที และสามารถทําการประมวลผลตํ่าสุดที่ 10 million polygons ต่อวินาที และ สูงสุด
22 million transistors เป็นการ์ดแสดงผลทั้งแบบ 2D/3D เป็น ชิบกราฟิกตัวแรกที่นํา
เทคโนโลยี transform, lighting, triangle setup/clipping, และ rendering ไว้ในชิฟกราฟิก
เพียงตัวเดียว เจ้า GeForce256 ตัวนี้มาพร้อมกับหน่วยความจําขนาด 32 MB แบบ DDR
พร้อมช่อง TV-out จากการที่ NVIDIA ใช้เทคโนโลยี 0.22 ไมครอนกับ GeForce 256 จึงทํา
ให้มันสามารถสร้างภาพได้เสมือนจริงมากขึ้น ซึ่งภาพเสมือนจริงส่วนหนึ่งได้มาจากการที่
นําเอา Polygon ที่ประมวลผลโดย CPU มาเท่านั้น และ GPU จะทําการประมวลผลในส่วน
T&L(Tranform & Lighting) และทําการ Renderเอง ซึ่งทําให้ CPU นําความสามารถไปใช้
ในการการประมวลผลด้านอื่น ๆ มากขึ้น
12
รายละเอียดโปรแกรม
รายละเอียดขั้นตอนการทํางานของโปรแกรม
Input ของโปรแกรม
โปรแกรมแบ่งออกเป็นสอง Mode คือทํากับภาพ และการทํากับไฟล์วิดิโอ
สําหรับการทํากับภาพนั้นต้องการไฟล์สามไฟล์คือ
1) ไฟล์ภาพฉากหน้า
2) ไฟล์ภาพฉากหลัง
3) ไฟล์ภาพ tri-map นั้นคือในภาพจะมีสามสีคือสีขาวแทนบริเวณฉากหน้า สีดําแทน
บริเวณฉากหลัง และ สีเทา แทนบริเวณที่ไม่แน่ใจ
ตัวอย่างภาพฉากหน้า
ตัวอย่างภาพ trimap
Output ของโปรแกรม
โปรแกรมจะให้ภาพที่แสดงค่าความ
โปร่งสีของฉากหน้าเพื่อนําไปทําการ
ซ้อนภาพต่อ
ตัวอย่างภาพที่ได้จากการแยกฉาก
หน้าออกมา
13
Function หลักของโปรแกรม
เป็นฟังก์ชันในภาษา Cg ที่ใช้ในการวนทําซํ้าเพื่อแก้linear algebra เพื่อหาค่าคําตอบ โดยจะ
มีการแก้สมการโดยใช้Jacobi’s method แต่ว่าเนื่องจาก สมการซึ่งแทนด้วยเมทริกซ์ AX=B แต่
ว่า เมทริกซ์ A นั้น เป็น band & sparse matrix ทําให้สามารลดรูปสมการได้และไม่จําเป็นต้อง
วนลูปทําทุกจุด เพราะในภาษา Cg นั้น ได้แยกการประมวลผลของแต่ละจุดแบบอิสระต่อกัน
float iterate(float2 p, sampler2D X, sampler2D iD, sampler2D nD,
sampler2D B)
// iD: 1/diagonal, a_{ii}^{-1}
// nD: non-diagonal
{
float4 a = tex2D(nD, p);
float4 x = float4( tex2D(X, p + float2(0, -2/H))[0], tex2D(X, p +
float2(-2/W, 0))[0], tex2D(X, p + float2(+2/W, 0))[0], tex2D(X, p +
float2(0, +2/H))[0] );
return tex2D(iD,p)[0]*(tex2D(B, p)[0] - dot(a, x));
}
เป็นฟังก์ชันในภาษา C++ ที่ใช้ในการแก้linear algebra เพื่อหาค่าคําตอบ โดยจะมีการแก้
สมการโดยใช้Jacobi’s method โดยที่สมการซึ่งแทนด้วยเมทริกซ์ AX=B แต่ว่า เมทริกซ์ A นั้น
เป็น band & sparse matrix ทําให้สามารลดรูปสมการได้และโดยจะทําการวนลูปทําทุกจุด
void jacobi(int round){
for(int k=0 ; k<round ; k++){
error = 0;
for(int i=0; i<307200 ; i++){
X[i](k) = iD[i]*(B[i] - (nD1[i]*X[i-w](k) + nD2[i]*X[i-1](k) +
nD3[i]*X[i+1](k) + nD4[i]*X[i+w](k)));
}
}
return;
}
14
ขอบเขต ข้อจํากัด
-ในการทํางานของโปรแกรมนั้นเหมาะสําหรับการทํางานกับภาพขนาด 640*480 หรือ ภาพ
ในอัตราส่วนเดียวกัน
-สําหรับโปรแกรมที่พัฒนาขึ้นมานั้นมีข้อจํากัดอยู่ที่ Input ของโปรแกรมนั้นต้องมีภาพ tri-
map ซึ่งแสดงส่วนที่เป็นฉากหน้า ฉากหลัง และบริเวณที่ไม่แน่ใจ ซึ่งหากภาพ tri-map ที่ใส่เป็น
input นั้นไม่ถูกต้องก็จะทําให้ได้ผลลัพธ์ที่ไม่ถูกต้องไปด้วย
-ในการทํางานกับไฟล์Video สามารถทํางานได้ลําบากหากภาพที่ได้ไม่สามารถนําไปทํา
เป็นภาพ tri-map ได้อย่างถูกต้อง ผลลัพธ์ที่ได้ก็จะมีความผิดพลาดมาก
-วัตถุมีการเคลื่อนที่ออกนอกเฟรมแล้วกลับเข้ามาใหม่ หรือมีการเคลื่อนที่เร็วเกินกว่าที่
โปรแกรมจะตรวจจับได้ แต่สามารถแก้ไขได้โดยกําหนดค่าพื้นหลังให้กับโปรแกรม
กลุ่มผู้ใช้โปรแกรม
เน้นผู้ใช้ในอุตสาหกรรมผลิตซอฟต์แวร์ วงการภาพยนตร์ หรือช่างภาพผู้สนใจถ่ายภาพ
สตูดิโอสําหรับการทําข่าว สตูดิโอสําหรับถ่ายรายการ รวมถึงผู้สนใจทั่วไป
ผลของการทดสอบโปรแกรม
ภาพตัวอย่างจากการทํางานของโปรแกรมโดยการเปลี่ยนฉากหลัง
15
ภาพแสดง Input และ output ได้จากการทํา matting
16
ปัญหาและอุปสรรค
จากการดําเนินงานที่ผ่านมานี้ มีอุปสรรคและปัญหาที่เกิดขึ้นแบ่งออกเป็นหัวข้อหลักๆ
ดังต่อไปนี้
1 ปัญหาความซับซ้อนของภาษา C++
เนื่องจากภาษา C++ มีความซับซ้อนมาก และทางผู้พัฒนาโครงงานมีประสบการณ์ในการ
พัฒนาโปรแกรมด้วยภาษา C++ น้อย จึงไม่คุ้นเคยกับโครงสร้างของภาษาและวิธีการใช้งาน
คลังข้อมูลพื้นฐานต่างๆที่มีในภาษา ดังนั้นผู้พัฒนาจึงประสบปัญหาในพัฒนาโปรแกรมในช่วงแรก
ทั้งในด้านความคล่องแคล่วและความรวดเร็วในการพัฒนาโปรแกรม รวมถึงปัญหาด้านการค้นหา
และแก้ไขข้อผิดพลาดของโปรแกรม เป็นผลให้การพัฒนาโปรแกรมมีความล่าช้ากว่ากําหนด
แนวทางการแก้ไข ทางผู้พัฒนาโครงงานได้ศึกษาข้อมูลเกี่ยวกับภาษา C++ ทั้งจากหนังสือ
และอินเตอร์เนท รวมทั้งได้ถามเพื่อนที่มีประสบการณ์ในภาษานี้ ทําให้สามารถบรรเทาความยุ่งยาก
และปัญหาในการพัฒนาโปรแกรมได้บ้าง และในปัจจุบันทางผู้พัฒนาโครงงานได้มีประสบการณ์
การพัฒนาโปรแกรมด้วยภาษา C++ ระดับหนึ่งแล้ว จึงทําให้สามารถพัฒนาโปรแกรมได้
คล่องแคล่วและรวดเร็วขึ้น
2 ปัญหาในการเลือกและการใช้งานคลังโปรแกรม (Library)
ภาษา C++ นั้นมีคลังโปรแกรมที่เกี่ยวข้องกับทางด้านการประมวลผลภาพจํานวนมาก แต่
ทางผู้พัฒนาโครงงานได้พบปัญหาในการเลือกใช้และใช้งานดังต่อไปนี้
• บางคลังโปรแกรมที่มีขนาดใหญ่มาก จะต้องใช้คลังโปรแกรมย่อยๆอื่นๆในการ
ทํางาน ทําให้มีความยากลําบากในการติดตั้งเพื่อใช้งาน เพราะต้องทําการติดตั้ง
คลังโปรแกรมย่อยๆ ทั้งหมดก่อนจึงจะใช้งานได้
• หลายๆคลังโปรแกรมนั้น ออกแบบมาสําหรับการใช้งานบนระบบปฎิบัติการ
ยูนิกซ์(Unix) หรือลีนุกซ์ (Linux) ทําให้มีความยากลําบากในการนํามาใช้พัฒนา
โปรแกรมบนระบบปฏิบัติการวินโดวส์ (Windows)
• บางคลังโปรแกรมมีวิธีการใช้งานที่ละเอียดและซับซ้อนมาก ทําให้ต้องใช้เวลาใน
การศึกษาวิธีการใช้งานเป็นเวลานาน
แนวทางการแก้ไข ทางผู้พัฒนาโครงงานพยายามเลือกใช้เฉพาะคลังโปรแกรมที่มีวิธีการ
ติดตั้งและใช้งานง่าย รวมทั้งมีฟังก์ชันที่ต้องการใช้งานครบถ้วน
17
3 ปัญหาความซับซ้อนในภาษา Cg
ทางผู้พัฒนาโครงงานไม่มีประสบการณ์ในการพัฒนาโปรแกรมด้วยภาษา Cg มาก่อน จึง
ไม่คุ้นเคยกับโครงสร้างของภาษาและวิธีการใช้งานคลังข้อมูลพื้นฐานต่างๆที่มีในภาษา ดังนั้น
ผู้พัฒนาจึงประสบปัญหาในพัฒนาโปรแกรมในช่วงแรก ทั้งในด้านความคล่องแคล่วและความ
รวดเร็วในการพัฒนาโปรแกรม รวมถึงปัญหาด้านการค้นหาและแก้ไขข้อผิดพลาดของโปรแกรม
เป็นผลให้การพัฒนาโปรแกรมมีความล่าช้ากว่ากําหนด
แนวทางการแก้ไข ทางผู้พัฒนาโครงงานได้ศึกษาข้อมูลเกี่ยวกับภาษา Cg ทั้งจากหนังสือ และ
อินเตอร์เนท รวมทั้งได้ถามรุ่นพี่ที่มีประสบการณ์ในภาษานี้ ทําให้สามารถบรรเทาความยุ่งยาก
และปัญหาในการพัฒนาโปรแกรมได้บ้าง และในปัจจุบันทางผู้พัฒนาโครงงานได้มี
ประสบการณ์การพัฒนาโปรแกรมด้วยภาษา Cg ระดับหนึ่งแล้ว จึงทําให้สามารถพัฒนา
โปรแกรมได้คล่องแคล่วและรวดเร็ว
4 ปัญหาด้านการออกแบบโปรแกรม
• ใช้เวลาในการ run นาน ทําให้การทดลองแต่ละครั้งทําได้ยากและเสียเวลามาก แนว
ทางการแก้ปัญหาคือ ทําการเขียน Code โดยเลือกใช้อัลกอรึทึม และ โครงสร้างข้อมูล
ที่มีประสิทธิภาพในการทํางาน
• Code ที่เขียนค่อนข้างวุ่นวายสับสน ไม่เป็นระบบระเบียบ ยากต่อการแก้ไขปรับค่า
ต่างๆ แนวทางการแก้ไขคือจะปรับปรุง code ให้เป็น low coupling และ high cohesion
เพื่อให้สามารถปรับปรุง code ได้ง่ายขึ้น
5 ปัญหาด้านการทํางานกับไฟล์ Video
• ในการทํางานกับไฟล์video นั้นจําเป็นต้องมีการสร้างภาพ tri-map ขึ้นมาซึ่งหากไม่
สามารถสร้างภาพ tri-map ที่ถูกต้องได้นั้น ผลลัพธ์ที่ได้ก็จะมีความผิดพลาดไปด้วย ทํา
ให้การทํางานกับไฟล์video ค่อนข้างมีข้อจํากัด
18
แนวทางในการพัฒนาและประยุกต์ใช้ร่วมกับงานอื่นๆในขั้นต่อไป
จากโปรแกรมที่ได้พัฒนาขึ้นมานั้น สามารถนําไปพัฒนาต่อโดยนําไปเป็นส่วนเพิ่มเติม
ให้กับโปรแกรมImage processing อื่นๆ ซึ่งเทคนิคของโปรแกรมนี้สามารถเพิ่มประสิทธิภาพให้กับ
โปรแกรมอื่นๆได้และในส่วนของการแก้linear algebra ที่มีขนาดใหญ่มากๆนั้น ก็สามารถนําไป
ประยุกต์ใช้กับโปรแกรมอื่นๆที่ต้องจัดการกับปัญหาแก้linear algebra ที่มีขนาดใหญ่มากๆ เช่นกัน
ข้อสรุปและข้อเสนอแนะ
ผลการดําเนินงานที่ผ่านมา โดยสรุป เป็นที่น่าพอใจ แม้จะมีปัญหาและอุปสรรคบ้าง เช่น
ปัญหาการแก้สมการปัวส์ซองที่มีความซับซ้อนมาก ปัญหาความซับซ้อนของภาษาC++ และ Cg
หรือปัญหาการทํางานของฟังก์ชันหลัก การทํางานกับไฟล์video
สําหรับข้อเสนอแนะคือ หากสามารถหาวิธีในการสร้างภาพ Tri-map ในการทํางานกับไฟล์
Video ได้อย่างถูกต้องแล้ว การทํางานกับไฟล์Video จะมีข้อจํากัดน้อยลง และในส่วนของการใช้
GPU มาช่วยในการประมวลผลในส่วนที่ใช้เวลานาน โดยทําการประมวลผลแบบ parallel บน GPU
นั้นสามารถนําไปประยุกต์ใช้กับโปรแกรมอื่นได้อีกมากมาย
19
เอกสารอ้างอิง (Reference)
[1] Blue/Green screen. Available from http://en.wikipedia.org/wiki/Chroma_key
[2] Composite image. Available form http://en.wikipedia.org/wiki/Compositing
[3] Jian Sun1,; Jiaya Jia2.; Chi-Keung Tang2.; Heung-Yeung Shun1, Poisson Matting. Microsoft
Research Asia1, Hong Kong University of Science and Technology2, 315-321
[4] Jacobi Method. Available form http://en.wikipedia.org/wiki/Jacobi_method
[5] GPGPU. Available from www.gpgpu.org
[6]Cg(C for Graphic) Available from http://en.wikipedia.org/wiki/Cg_(programming_language)
[7] OpenCV. Available from http://en.wikipedia.org/wiki/OpenCV
[8] GPU. Available from http://www.vichakarn.com/vblog/34762
[9] Poisson’s equation. Available from http://en.wikipedia.org/wiki/Poisson's_equation
[10] Color model. Available from http://en.wikipedia.org/wiki/Color_model
[11] Tristimulus values. Available from http://en.wikipedia.org/wiki/CIE_1931_color_space
[12] HSV. Available from http://en.wikipedia.org/wiki/HSL_and_HSV
20
คู่มือการติดตั้งอย่างละเอียด
ทําการ Copy โปรแกรมลงไปไว้บนเครื่องที่ต้องการทํางาน ทําการติดตั้ง
Cg toolkit และ OpenCV บนเครื่องคอมพิวเตอร์
คู่มือการใช้งานอย่างละเอียด
1) ทําการเปิดหน้าต่าง command line ขึ้นมาและทําการพิมพ์คําสั่ง
<program part> <mode> <fg> <bg> <tm> <o> <round>
<program part> คือ ชื่อไฟล์โปรแกรมรวมพาร์ทไปยังไฟล์
<mode> คือ โหมดการทํางาน ในที่นี้คือ -image
<fg> คือ ชื่อไฟล์ที่ต้องการทําการซ้อนภาพรวมพาร์ทไปยังไฟล์
<bg> คือ ชื่อไฟล์ภาพแบ็คกราวด์รวมพาร์ทไปยังไฟล์
<tm> คือ ชื่อไฟล์ภาพ tri-map รวมพาร์ทไปยังไฟล์
<o> คือ ชื่อไฟล์ของภาพที่ต้องการให้โปรแกรมทําการบันทึกรวม
พาร์ทไปยังไฟล์
<round> คือ จํานวนรอบในการทํา Jacobi method
ภาพตัวอย่างไฟล์Input ใช้
เมื่อโปรแกรมทํางานเสร็จแล้ว จะแสดงผลลัพธ์ออกมา

More Related Content

Similar to 641 1

โครงงานคอมพ วเตอร
โครงงานคอมพ วเตอร โครงงานคอมพ วเตอร
โครงงานคอมพ วเตอร Jp Eternally
 
ตัวอย่างโครงงานคอมพิมเตอร์
ตัวอย่างโครงงานคอมพิมเตอร์ตัวอย่างโครงงานคอมพิมเตอร์
ตัวอย่างโครงงานคอมพิมเตอร์tangonjr
 
ตัวอย่างโครงงาน
ตัวอย่างโครงงานตัวอย่างโครงงาน
ตัวอย่างโครงงานWachiraya Thasnapanth
 
ตัวอย่างโครงงาน
ตัวอย่างโครงงานตัวอย่างโครงงาน
ตัวอย่างโครงงานjokercoke
 
ใบงานที่ 8 เรื่อง โครงงานประเภท “การพัฒนาโปรแกรมประยุกต์”
ใบงานที่ 8 เรื่อง โครงงานประเภท “การพัฒนาโปรแกรมประยุกต์”ใบงานที่ 8 เรื่อง โครงงานประเภท “การพัฒนาโปรแกรมประยุกต์”
ใบงานที่ 8 เรื่อง โครงงานประเภท “การพัฒนาโปรแกรมประยุกต์”Justice MengKing
 
Emerging Technology: Thai IT Professional Readiness Survey
Emerging Technology: Thai IT Professional Readiness SurveyEmerging Technology: Thai IT Professional Readiness Survey
Emerging Technology: Thai IT Professional Readiness SurveyIMC Institute
 
ใบงานที่8 เรื่อง โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่8 เรื่อง โครงงานประเภท การพัฒนาโปรแกรมประยุกต์ใบงานที่8 เรื่อง โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่8 เรื่อง โครงงานประเภท การพัฒนาโปรแกรมประยุกต์Revill Noes
 
กิจกรรมที่ 2 Computer project
กิจกรรมที่ 2 Computer projectกิจกรรมที่ 2 Computer project
กิจกรรมที่ 2 Computer project46933yupparaj
 
Group1 กระบวนการเทคโนโลยีสารสนเทศ2007
Group1 กระบวนการเทคโนโลยีสารสนเทศ2007Group1 กระบวนการเทคโนโลยีสารสนเทศ2007
Group1 กระบวนการเทคโนโลยีสารสนเทศ2007MMp'New Aukkaradet
 
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์Mintra Pudprom
 
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์KaRn Tik Tok
 
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์Soldic Kalayanee
 
รายงานโครงงานคอมพิวเตอร์
รายงานโครงงานคอมพิวเตอร์รายงานโครงงานคอมพิวเตอร์
รายงานโครงงานคอมพิวเตอร์aonaon080
 
ใบงานท 8
ใบงานท   8ใบงานท   8
ใบงานท 8Milk MK
 

Similar to 641 1 (20)

Presentation 3
Presentation 3Presentation 3
Presentation 3
 
โครงงานคอมพ วเตอร
โครงงานคอมพ วเตอร โครงงานคอมพ วเตอร
โครงงานคอมพ วเตอร
 
ตัวอย่างโครงงานคอมพิมเตอร์
ตัวอย่างโครงงานคอมพิมเตอร์ตัวอย่างโครงงานคอมพิมเตอร์
ตัวอย่างโครงงานคอมพิมเตอร์
 
ตัวอย่างโครงงาน
ตัวอย่างโครงงานตัวอย่างโครงงาน
ตัวอย่างโครงงาน
 
5 6-7-8
5 6-7-85 6-7-8
5 6-7-8
 
Gor5
Gor5Gor5
Gor5
 
14p22i015
14p22i01514p22i015
14p22i015
 
ตัวอย่างโครงงาน
ตัวอย่างโครงงานตัวอย่างโครงงาน
ตัวอย่างโครงงาน
 
ใบงานที่ 8 เรื่อง โครงงานประเภท “การพัฒนาโปรแกรมประยุกต์”
ใบงานที่ 8 เรื่อง โครงงานประเภท “การพัฒนาโปรแกรมประยุกต์”ใบงานที่ 8 เรื่อง โครงงานประเภท “การพัฒนาโปรแกรมประยุกต์”
ใบงานที่ 8 เรื่อง โครงงานประเภท “การพัฒนาโปรแกรมประยุกต์”
 
Emerging Technology: Thai IT Professional Readiness Survey
Emerging Technology: Thai IT Professional Readiness SurveyEmerging Technology: Thai IT Professional Readiness Survey
Emerging Technology: Thai IT Professional Readiness Survey
 
ใบงานที่8 เรื่อง โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่8 เรื่อง โครงงานประเภท การพัฒนาโปรแกรมประยุกต์ใบงานที่8 เรื่อง โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่8 เรื่อง โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
 
กิจกรรมที่ 2 Computer project
กิจกรรมที่ 2 Computer projectกิจกรรมที่ 2 Computer project
กิจกรรมที่ 2 Computer project
 
Group1 กระบวนการเทคโนโลยีสารสนเทศ2007
Group1 กระบวนการเทคโนโลยีสารสนเทศ2007Group1 กระบวนการเทคโนโลยีสารสนเทศ2007
Group1 กระบวนการเทคโนโลยีสารสนเทศ2007
 
650 1
650 1650 1
650 1
 
คอม
คอมคอม
คอม
 
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
 
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
 
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
ใบงานที่ 8 โครงงานประเภท การพัฒนาโปรแกรมประยุกต์
 
รายงานโครงงานคอมพิวเตอร์
รายงานโครงงานคอมพิวเตอร์รายงานโครงงานคอมพิวเตอร์
รายงานโครงงานคอมพิวเตอร์
 
ใบงานท 8
ใบงานท   8ใบงานท   8
ใบงานท 8
 

More from Napadol Noreewech (8)

งานคอมใบงานที่2ถึง8
งานคอมใบงานที่2ถึง8งานคอมใบงานที่2ถึง8
งานคอมใบงานที่2ถึง8
 
Soci ent47
Soci ent47Soci ent47
Soci ent47
 
Thai ent47
Thai ent47Thai ent47
Thai ent47
 
Eng ent47
Eng ent47Eng ent47
Eng ent47
 
Bio ent47
Bio ent47Bio ent47
Bio ent47
 
Chem ent47
Chem ent47Chem ent47
Chem ent47
 
Physic ent47
Physic ent47Physic ent47
Physic ent47
 
Math ent47
Math ent47Math ent47
Math ent47
 

641 1

  • 1. รหัสโครงการ 11P14C586 Development of Chroma Key Technique on Graphics Processing Unit โปรแกรมซ้อนภาพพื้นหลังโปร่งสีสําหรับทํางานบนการ์ดแสดงผล โปรแกรมเพื่องานการพัฒนาด้านวิทยาศาสตร์และเทคโนโลยี (นักศึกษา) รางงานฉบับสมบูรณ์ เสนอต่อ ศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ สํานักงานพัฒนาวิทยาศาสตร์และเทคโนโลยีแห่งชาติ กระทรวงวิทยาศาสตร์และเทคโนโลยี และ สํานักงานส่งเสริมอุตสาหกรรมซอฟต์แวร์แห่งชาติ ได้รับทุนอุดหนุนโครงการวิจัย พัฒนาและวิศวกรรม โครงการการแข่งขันพัฒนาโปรแกรมคอมพิวเตอร์แห่งประเทศไทย ครั้งที่ 11 ประจําปีงบประมาณ 2551 โดย ผู้พัฒนา นายเอกลักษณ์ ป้องแก้ว อาจารย์ที่ปรึกษาโครงการ ผศ.ดร.อรรถวิทย์ สุดแสง จุฬาลงกรณ์มหาวิทยาลัย
  • 2. I กิตติกรรมประกาศ ทางผู้ดําเนินโครงการขอขอบคุณบุคคล, บริษัท และหน่วยงานต่างๆ ที่ให้การสนับสนุน เพื่อให้โครงงานนี้สําเร็จแลลุล่วงไปได้ด้วยดี โดยมีรายนามดังต่อไปนี้ • ผศ.ดร.อรรถวิทย์ สุดแสง (อาจารย์ที่ปรึกษาโครงการ) ขอขอบพระคุณอาจารย์เป็นอย่างมากสําหรับคําปรึกษาที่ดีและมีคุณค่า ตลอดการ ดําเนินงาน • โครงการการแข่งขันพัฒนาโปรแกรมคอมพิวเตอร์แห่งประเทศไทยครั้งที่ 11 จาก ศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ สํานักงานพัฒนาวิทยาศาสตร์และเทคโนโลยีแห่งชาติ และ สํานักงานส่งเสริมอุตสาหกรรมซอฟต์แวร์แห่งชาติ ที่ได้สนับสนุนเงินทุนอุดหนุนโครงการการพัฒนาโปรแกรมซ้อนภาพพื้นหลัง โปร่งสีสําหรับทํางานบนการ์ดแสดงผล
  • 3. II บทคัดย่อ การซ้อนภาพพื้นหลัง (Matte) คือ การนําภาพๆหนึ่งมาทําให้พื้นที่บางส่วนโปร่งใส แล้วนํา ภาพนั้นไปซ้อนกับภาพอีกภาพหนึ่ง พูดอีกอย่างหนึ่งคือการแทนที่ภาพบางส่วนของภาพนั้นด้วย ภาพอื่น ซึ่งในปัจจุบันการซ้อนภาพได้รับความนิยมมากขึ้นเรื่อยๆ เนื่องจากการที่สามารถแทนส่วน หนึ่งของภาพด้วยสิ่งที่ต้องการทําให้สะดวกต่อการทํางานและประหยัดค่าใช้จ่าย มีประโยชน์ มากมายในหลายๆด้าน ไม่ว่าจะเป็นการถ่ายทําวิดีโอในสตูดิโอ หรือถ่ายภาพยนตร์ การตกแต่ง ภาพถ่าย ซึ่งสามารถตกแต่งรายละเอียดได้ตามต้องการ แต่ค่าใช้จ่ายในการทําค่อนข้างสูง เนื่องจาก ซอฟต์แวร์เพื่อทําการซ้อนภาพนั้นมีราคาแพง หรือการใช้แรงงานคนและเวลาจํานวนมาก และต้อง ใช้คอมพิวเตอร์ประสิทธิภาพสูงในการประมวลผลเพื่อให้ได้ผลลัพธ์ทันเวลา ดังนั้นผู้พัฒนาจึงมี ความคิดที่จะพัฒนาซอฟต์แวร์นี้ขึ้นมาเพื่อทําให้การสร้างซ้อนภาพหรือวิดีโอทําได้โดยง่าย และ สามารถทํางานได้รวดเร็วได้โดยไม่ต้องใช้คอมพิวเตอร์ประสิทธิภาพสูง อีกทั้งในปัจจุบันนี้มีความตื่นตัวในเรื่องการใช้ซอฟต์แวร์ถูกลิขสิทธิ์มากยิ่งขึ้น การที่ต้อง ใช้ซอฟต์แวร์ราคาแพงนั้น อาจทําให้เกิดการละเมิดลิขสิทธิ์ได้และประสิทธิภาพของการ์ดแสดงผล ในปัจจุบันมีการพัฒนาไปอย่างรวดเร็ว ดังนั้นในการพัฒนาซอฟต์แวร์ซ้อนภาพพื้นหลังโปร่งใส สําหรับทํางานบนการ์ดแสดงผลจึงมีแนวคิดที่จะพัฒนาขึ้นให้ทํางานได้ถูกต้อง ใช้งานง่าย และใช้ เวลาในการประมวลผลน้อย แม้ไม่ได้ทําการประมวลผลบนคอมพิวเตอร์ประสิทธิภาพสูงเพื่อลด ค่าใช้จ่ายในการซื้อซอฟต์แวร์ และค่าใช้จ่ายในการซื้อเครื่องคอมพิวเตอร์ประสิทธิภาพสูง Abstract Mattes are used in photography and special effects filmmaking to combine two or more image elements into a single, final image. Usually, mattes are used to combine a foreground image with a background. We formulate the problem as one of solving Poisson equations with the matte gradient field. Our approach, which we call Poisson matting, has the following advantages. Experiments on many complex natural images demonstrate that Poisson matting can generate good matting results that are not possible using existing matting techniques. Therefore, the idea of low-cost matting’s system is then come up. The system is composed of many general low-cost webcams and the software used for building matte image or many videos from webcams. Moreover, using right protected software is more important in present. And the gpu’s performance is high. We have migrated to program on gpu. Hence, developing application on gpu can also reduce the cost and time.
  • 4. III บทนํา ในปัจจุบัน คอมพิวเตอร์ได้เข้ามามีบทบาทในการทํางานด้านเทคนิคการซ้อนภาพพื้นหลัง ในภาพยนตร์มากขึ้น แต่การใช้คอมพิวเตอร์ส่วนใหญ่แล้วต้องพึ่งพาเทคโนโลยีจากต่างประเทศ เพราะเทคโนโลยีในประเทศยังไม่มีประสิทธิภาพมากพอ ส่งผลให้ผู้ผลิตภาพยนตร์เสียค่าใช้จ่ายใน การซื้อเทคโนโลยีมากขึ้นส่งผลให้ต้นทุนการผลิตสูง อีกทั้งเทคโนโลยีที่ใช้ยังมีประสิทธิภาพตํ่า ประมวลผลได้ช้าและผลที่ได้ยังไม่ดีเท่าที่ควร ดังนั้นวิธีที่จะช่วยให้ผู้ผลิตภาพยนตร์เหล่านี้ให้ สามารถใช้งานเทคโนโลยีได้ก็คือการสร้างเทคโนโลยีที่มีประสิทธิภาพมาทดแทนการซื้อ เทคโนโลยีจากต่างประเทศ ปัจจุบันโปรแกรมซ้อนภาพพื้นหลังนั้นไม่สามารถประมวลผลได้อย่างถูกต้องเท่าที่ควร โดยเมื่อได้รับภาพเข้าไปแล้ว โปรแกรมจะทําการระบุบริเวณที่ต้องทําการบังภาพแล้วส่งต่อไปให้ ส่วนที่ทําการซ้อนภาพพื้นหลังให้ทําการซ้อนภาพพื้นหลังต่อ แต่เนื่องจากตัวระบุบริเวณที่ต้องทํา การบังภาพที่ใช้ในปัจจุบันยังไม่สามารถทํางานได้อย่างถูกต้อง เมื่อส่วนซ้อนภาพพื้นหลังได้ทําการ ซ้อนภาพพื้นหลังไปจึงทําให้ไม่สามารถสร้างภาพพื้นหลังที่ดูเสมือนจริงได้ โปรแกรมซ้อนภาพพื้นหลังที่พัฒนาขึ้นมานี้ จะเริ่มต้นโดยพัฒนาโปรแกรมให้สามารถ ทํางานบน CPU ได้ก่อน ซึ่งทํางานได้ช้าและสามารถพัฒนาต่อได้โดยจะนํามาพัฒนาให้สามารถ ทํางานบน GPU และ สามารถทํางานได้อย่างถูกต้อง รวดเร็ว และ มีประสิทธิภาพ หรืออาจจะ สามารถทํางานได้แบบ Real-time โดยโปรแกรมที่พัฒนาขึ้นมีแนวคิดในการทํางานโดยการแก้ สมการ Poisson โดยใช้ข้อมูลค่าขอบเขตจาก tri-map ที่กําหนดขึ้น และอาศัยความต่อเนื่องของสีใน ภาพฉากหน้าและฉากหลัง จากนั้นจะทําการกรองค่าที่ผิดพลาดออก และสามารถทําการปรับปรุง แก้ไขผลลัพธ์จนพอใจได้ ดังนั้นหากพัฒนาโปรแกรมโดยใช้วิธี Poisson matting และทําการพัฒนาให้ทํางานบน GPU ได้ปรับปรุงโดยลดเวลาในการประมวลผลได้ก็จะช่วยให้โปรแกรมซ้อนภาพพื้นหลังสามารถ ทํางานได้แบบ Real-time ถูกต้อง และมีประสิทธิภาพ
  • 5. สารบัญ หัวข้อ หน้า กิตติกรรมประกาศ I บทคัดย่อ II บทนํา III วัตถุประสงค์และเป้าหมาย 1 รายละเอียดของการพัฒนา 2 แนวคิดและขั้นตอนการทํางานของโปรแกรม 2 ทฤษฎีและเทคโนโลยีที่เกี่ยวข้อง 3 Poisson matting 3 Jacobi’s method 5 General Purpose Computing on Graphic Processing Unit 5 สีปฐมภูมิ ระบบสี RGB, HSV 6 เครื่องมือที่ใช้ในการพัฒนา 9 รายละเอียดโปรแกรม 12 รายละเอียดขั้นตอนการทํางานของโปรแกรม 12 ขอบเขต ข้อจํากัด 14 กลุ่มผู้ใช้โปรแกรม 14 ผลของการทดสอบโปรแกรม 14 ปัญหาและอุปสรรค 16 แนวทางในการพัฒนาและประยุกต์ 18 ข้อสรุปและข้อเสนอแนะ 18 เอกสารอ้างอิง 19 คู่มือการติดตั้งอย่างละเอียด 20 คู่มือการใช้งานอย่างละเอียด 20
  • 6. 1 วัตถุประสงค์และเป้าหมาย โครงงานนี้มีจุดประสงค์หลักในการดําเนินการ ดังต่อไปนี้ • ศึกษาเทคนิคการซ้อนภาพพื้นหลังแบบต่างๆ • พัฒนาโปรแกรมที่สามารถทําการซ้อนภาพพื้นหลังได้อย่างมีประสิทธิภาพ • ศึกษาและพัฒนาโปรแกรมให้ทํางานแบบ parallelได้บน GPU • เพื่อส่งเสริมการพัฒนาด้านความเร็วในการประมวลผลโดยการพัฒนาให้ทํางานแบบ คู่ขนานบนการ์ดแสดงผล • สนับสนุนการเขียนโปรแกรมเพื่อทํางานบนการ์ดแสดงผลให้เพิ่มมากขึ้น เพื่อเพิ่ม ประสิทธิภาพของโปรแกรมโดยไม่ต้องพึ่งCPUประสิทธิภาพสูงเพียงอย่างเดียว • เพื่อลดค่าใช้จ่ายการซื้อคอมพิวเตอร์ประสิทธิภาพสูง                                                  
  • 7. 2 รายละเอียดของการพัฒนา • แนวคิดและขั้นตอนการทํางานของโปรแกรม โปรแกรมที่พัฒนาขึ้นมานี้ถูกออกแบบให้สามารถทํางานได้กับภาพที่แม้ไม่ได้มี การใช้เทคนิค Blue/green screen [1] แต่ก็ยังสามารถทํางานได้โดยที่ต้องเพิ่ม input เพิ่มอีก คือ tri-map โดยที่ tri-map คือภาพที่แสดงว่าส่วนในภาพบริเวณใดเป็น Foreground บริเวณ ใดเป็น Background และ บริเวณใดเป็น unknown ซึ่งเมื่อได้แล้วจะนําไปทําการหาค่า ความโปร่งใสที่เหมาะสม เพื่อจะนําไปสร้าง Composite image [2] ที่ถูกต้องได้ โดยขั้นตอนการทํางานของโปรแกรมคือ เมื่อรับภาพ Input เข้ามาแล้ว จะทําการ resize ภาพ เพื่อให้ได้ภาพที่มีขนาดเหมาะสมกับการทํางานของโปรแกรมแล้วจะนําภาพที่ ได้ไปสร้างสมการสําหรับคํานวนหาค่าความโปร่งใสที่เหมาะสมตามวิธีของ Poisson Matting[3] จะได้เป็น Matrix A ซึ่ง มีขนาดเป็น n*n (n คือ จํานวนจุดของรูป) และ matrix B หรือ right hand value ของ สมการเชิงเส้น AX = B จากนั้น ทําการสร้าง texture สําหรับ เป็น input ให้กับ fragment program ของ Cg เพื่อทําการแก้สมการเชิงเส้นโดยอาศัยการ์ด แสดงผลช่วยในการแก้สมการ โดยใช้วิธี Jacobi’s Method[4] โดยวิธีนี้อาจจะทําการ ประมวลผลบน CPU เลยก็ได้ผลลัพธ์ที่ได้เหมือนกัน จากนั้น โปรแกรมจะนําค่าความ โปรงใสที่ได้ไปสร้าง composite image ต่อไป แล้วทําการแสดงผลออกมา กรณีที่เป็น วีดีโอก็จะมีการ ประมวลผลในเฟรมต่อๆไป
  • 8. 3 • ทฤษฎีและเทคโนโลยีที่เกี่ยวข้อง Poisson matting[3] เป็นวิธีหนึ่งที่ให้ผลลัพธ์ได้ถูกต้อง มีประสิทธิภาพวิธีหนึ่งโดยที่อาศัยค่า ของ Gradient field ของภาพ Input เพื่อนําไปหาค่าความโปร่งใสที่เหมาะสมเพื่อ สร้าง composite image โดยค่าสีของ composite image ในแต่ละจุดคํานวนได้ จากสมการด้านล่าง จากสมการ ทํา Partial derivative ได้เป็น ในกรณีที่ Foreground และ Background มีค่า Gradient น้อยๆ จะได้เป็น หรือ
  • 9. 4 และในกรณีที่ Foreground และ Background มีค่า Gradient มาก จะได้เป็น หรือ โดยสามารถแก้สมการเพื่อหาค่าที่เหมาะสมตามสมการด้านล่าง -ในกรณีที่ Foreground และ Background มีค่า Gradient น้อยๆ -ในกรณีที่ Foreground และ Background มีค่า Gradient มาก โดยจากสมการข้างต้นสามารถแปลงจาก Continue ให้อยู่ในรูปแบบ discrete ได้จากนั้นจะได้เป็นสมการ Linear algebra ขนาดใหญ่ (An*nXn*1=Bn*1) โดยที่ matrix A นั้นมีลักษณะเป็น band & sparse matrix ดังรูป จากนั้นทําการแก้สมการก็จะได้ค่าความโปร่งใส ซึ่งนําไปสร้างภาพ Composite Image ตามสมการ
  • 10. 5 การแก้Linear algebra โดยวิธี Jacobi’s method [4] Jacobi method เป็นอัลกอริทึมในการแก้สมการเชิงเส้น โดยที่จะเป็นการทําวนซํ้า เพื่อให้ได้ผลลัพธ์ที่มีความแม่นยําเพิ่มมากขึ้นเรื่อยๆโดยที่เมื่อเราแทนสมการเชิงเส้นด้วย เมทริกซ์ จะได้ โดยที่ , เมื่อ D, L และ U แทนด้วยเมทริกซ์ เส้นทะแยงมุม สามเหลี่ยมใต้เส้นทะแยงมุม และ สามเหลี่ยมเหนือเส้นทะแยงมุม ของเมทริกซ์ A จะได้สมการใหม่เป็น มากกว่านั้นคือ ถ้า สําหรับ i. จากกฎการทําซํ้า จะได้ว่า เมื่อ k คือ จํานวนรอบ GPGPU [5] GPGPU ย่อมาจาก General Purpose Computing on Graphic Processing Unit หมายถึง การนําเอาการ์ดแสดงผล มาใช้เพื่อทําการประมวลผลงานอื่น ๆ เช่น การคํานวณ, การสร้างและค้นหาฐานข้อมูล หรือทํางานอื่น ๆ เหมือนอย่างที่ทุกวันนี้ CPU (Central Processing Unit) ทําอยู่ และมีนักวิทยาศาสตร์คอมพิวเตอร์หลายคนพยายามพัฒนาเพื่อให้ มาแทนที่ CPU เนื่องด้วย GPU นี่ราคาถูกกว่าและมีความสามารถในการทําการคํานวนได้ ดีกว่า ปัจจุบันเราสามารถเขียนโปรแกรมโดยใช้ภาษา C หรือ C++ บน GPGPU ได้แต่ต้อง มี Library อย่าง ActiveX หรือ OpenGL
  • 11. 6 อย่างที่เราทราบกันดีว่า GPU นี่ถูกออกมาเพื่อใช้งานทางด้านภาพ อย่าง เช่นเกมส์ ช่วยทําให้เกมส์นี่ไหลลื่นคล่อง ภาพไปเบลอกระตุก การทํางานแบบนี้ต้องอาศัยการ คํานวณและประมวลผลภาพที่รวดเร็วเป็นอย่างมาก ดังนั้นสถาปัตยกรรมของ GPU จึงเป็น แบบ Parallel คือ จะประมวลผลข้อมูลได้หลาย ๆ ข้อมูลด้วยคําสั่งเดียว (Single Instruction Multiple Data) มากกว่าการใช้2 Core เพราะปัจจุบัน NVDIA Series 8 นี่มีมากกว่า 32 core Core คือ ส่วนที่ใช้สําหรับการประมวลผลจริง ๆใน CPU ที่เรียกว่า Multicore คือ มีส่วนที่ใช้ประมาวลผลหลายตัวใน CPU ตัวเดียว สําหรับ การพัฒนา GPGPU สามารถพัฒนาไปใช้งานได้เรียกว่า แทบจะเท่ากับงาน ของ CPU เลยทีเดียว แต่ GPU ก็ยังมีปัญหาเรื่อง ความซับซ้อนในการทํางานและ ประมวลผล ทําให้การพัฒนาลําบากกว่า แต่ผลลัพธ์คุ้มค่าเพราะการทํางานเร็วกว่า CPU มาก สําหรับรุ่นที่นํามาเขียนโปรแกรมได้ก็เริ่มตั้งแต่ NVDIA GeForce5000 ขึ้นไป และใน รุ่นที่เทียบเท่ากันสําหรับ ATi ไม่แน่ว่า อีกไม่นานนี้การ์ดจอ จะเข้ามาทําหน้าที่แทน CPU ได้โดยสมบูรณืแต่มีราคาที่ถูกกว่ามากก็เป็นได้ สีปฐมภูมิ ประสาทตาของมนุษย์ปกติจะตอบสนองต่อคลื่นที่ความถี่ 400 นาโนเมตรถึง 700 นาโนเมตร [11] โดยที่ในดวงตาของมนุษย์จะมีเซลประสาทที่ตอบสนองต่อคลื่น ความถี่ต่างๆ กันอยู่ 3 ช่วงความถี่ คือที่ความถี่ของสีนํ้าเงิน สีเขียว และสีแดง ดังรูป ซึ่งเมื่อ สมองนําไปแปลความหมายแล้วจะได้ออกมาเป็นภาพอย่างที่เราเห็นกัน รูปแสดงการตอบสนองของประสาทตาของมนุษย์ที่ความยาวคลื่นต่างๆ
  • 12. 7 ระบบสี[10] ในทางคอมพิวเตอร์ การอ้างอิงถึงสีใดสีหนึ่ง สามารถทําได้หลายวิธี โดยปกติจะ กําหนดเป็นกลุ่มของตัวเลข 3 ถึง 4 ตัว เพื่อใช้แทนแต่ละส่วนประกอบในการอธิบายสีนั้นๆ โดยระบบสีที่นิยมใช้กันก็เช่น RGB, CMY, HSV ระบบสี RGB ระบบสีแบบ RGB ประกอบขึ้นจากส่วนประกอบพื้นฐาน 3 ส่วนคือสีแดง (Red) สีเขียวนี้จะระบุด้วยค่าทั้งสามค่านี้ (Green) และสีนํ้าเงิน (Blue) โดยการระบุสีในระบบสี แบบ RGB ในสัดส่วนที่ต่างๆกันเพื่อสร้างเป็นสีที่ต้องการ เราสามารถจําลองภาพของ ระบบสี RGB นี้ได้ด้วยการกําหนดขนาดลูกบาศก์ขนาด 1x1x1 และแทนแกนที่ x, y, z ด้วย ค่าสี R,G,B จะได้ลูกบาศก์ของสีดังในรูป ระบบสีแบบ RGB นี้จัดเป็นระบบสีแบบ additive เนื่องจากที่จุด (0, 0, 0) หมายถึง สีดํา เมื่อแต่ละสีมีค่าเพิ่มขึ้นก็จะได้ค่าสีที่สว่างมากขึ้น จนกระทั่งที่จุด (1, 1, 1) ซึ่งหมายถึง สีขาว รูปแสดงระบบสี RGB บนแกนสามมิติ ระบบสีแบบ CMY ระบบสีแบบ CMY ประกอบด้วยส่วนประกอบย่อยของสามสี ได้แก่ สีฟ้า (Cyan) สีม่วงแดง (Magenta) และสีเหลือง (Yellow) ซึ่งทั้งสามสีเป็นสีหลักของระบบงานพิมพ์ หมึกสีฟ้าจะดูดกลืนสีแดง หมึกสีม่วงแดงจะดูดกลืนสีเขียว และหมึกสีเหลืองจะดูดกลืนสี นํ้าเงิน ดังนั้นสีที่มองเป็นจะเป็นผลจากการสะท้อนสีที่ไม่ถูกดูดกลืนออกมา ด้วยคุณสมบัติ แบบนี้ เราจึงจัดระบบสีแบบ CMY ว่าเป็นระบบสีแบบ subtractive โดยพื้นฐานแล้ว ที่ค่า CMY = (0, 0, 0) จะหมายความว่า ไม่มีการดูดกลืนสีใดๆเลย ดังนั้นแสงที่ตกกระทบจะสะท้อนทุกช่วงความถี่ ทําให้เห็นเป็นสีขาว และที่ (1, 1, 1) หมายถึงทุกสีจะถูกดูดกลืนทั้งหมดโดยไม่มีการสะท้อนสีใดออกไปเลย ทําให้มองเห็นเป็น สีดํา
  • 13. 8 ระบบสีแบบ HSV[12] โดยที่จริงแล้ว ระบบสีแบบ HSV นั้นเป็นการนําระบบสีแบบ RGB มาผ่าน กระบวนการเปลี่ยนรูปอย่างไม่เป็นเชิงเส้น (nonlinear transformation) เพราะการระบุค่าสี แบบแยก RGB นั้นทําความเข้าได้ยาก ในระบบสีแบบ HSV จึงใช้การระบุค่าแบบ Hue, Saturation และ Value แทน โดยจากในรูป ค่าของ Hue จะเป็นค่าที่กําหนดว่าเป็นสีอะไร ซึ่งค่าที่ 0 จะ หมายถึงสีแดง และ วนไปแบบทวนเข็นนาฬิกา ค่าที่ พาย จะหมายถึงสีฟ้า และกลับมาจบที่ สีแดงอีกครั้งที่ค่า 2พาย ส่วนค่าของ saturation คือ ความอิ่มตัวของสี แทนด้วยระยะห่าง จากจุดศูนย์กลางของวงกลมโดยสีที่มีความอิ่มตัวน้อยจะมีสีใกล้เคียงกับสีดําและสีเทา สีที่ มีความอิ่มตัวมากจะมีความสดและฉูดฉาด (vivid) สูง และสุดท้ายค่า value คือค่าความ สว่างของสีนั้นๆ บางครั้งก็เรียกว่า Brightness ทําให้ย่อเป็น HSB รูปแสดงกรวยแสดงสีแบบ HSV
  • 14. 9 • เครื่องมือที่ใช้ในการพัฒนา 1. ภาษา C++ เป็นภาษาซึ่งมีประสิทธิภาพสูง สามารถประมวลผลได้เร็ว ทําความเข้าใจได้ไม่อยากและมี ไลบรารี่ให้เลือกใช้มากมาย บนอินเตอร์เน็ต สามารถใช้ได้ทั่วไป ทํางานได้บนเพลตฟอร์ม วินโดว์ซึ่งเป็นที่แพร่หลาย 2. ภาษา Cg[6] เป็นภาษาที่ nvidia ทําออกมาเพื่อให้ผู้ใช้ผลิตภัณฑ์สามารถนําไปเขียนโปรแกรม เพื่อควบคุมการทํางานของ GPU ได้ทําให้เราสามารถ ใช้การ์ดแสดงผลทําการประมวลผล ได้ตามที่เราต้องการและ สามารถนํามาใช้ทํา GPGPU หรือ General Purpose Graphic Processing Unit ทําให้สามารถใช้งาน GPU ในการประมวลผล 3. IDE ที่ใช้ในการพัฒนา: Visual Studio C++2005 Express Visual Studio C++ 2005 Express เป็นส่วนหนึ่งของ Visual Studio 2005 Express Edition เป็นเครื่องมือที่เหมาะสําหรับผู้เริ่มต้นเรียนรู้การเขียนโปรแกรมบน Windows, แอพพลิเคชัน หรือแม้แต่เกมคอมพิวเตอร์ เพื่อให้ง่ายต่อการใช้งาน Visual Studio Express Edition แยกออกตามภาษาโปรแกรมคือ Visual Basic, Visual C#, Visual C++, Visual J# และ Visual Web Developer 4. Library ที่ใช้ในการพัฒนา: OpenCV[7] OpenCV คือ เป็น library สําหรับทํา image processing พัฒนาเริ่มโดยบริษัท อิน เทล โดย OpenCV สามารถนําไปใช้ในการค้นคว้าวิจัย และการนําไปใช้ในเชิงพาณิชย์ได้ ภายใต้ใบอนุญาต BSD OpenCV ทํางานได้บนระบบปฏิบัติการ Mac OS X, Windows และ Linux OpenCV เน้นที่จะทํา image processing แบบทันเวลา และหาก OpenCV สามารถเพิ่ม ประสิทธิภาพได้หากทํางานบนอินเทล
  • 15. 10 5. Personal Computer คือเครื่องคอมพิวเตอร์ที่ใช้ในการเขียนและรันโปรแกรม โดยที่คอมพิวเตอร์เครื่อง นี้ต้องมีการติดตั้งการ์ดแสดงผลของ nvidia ด้วย 6. Camera คือ กล้องโดยใช้รับภาพเป็นอินพุท โดยอาจใช้กล้องเวบแคมทั่วๆไป 7. Graphics processing unit หรือ Graphic card [8] (Graphic adaptor หรือ graphics card, video card, video board, video display board, display adapter, video adapter) เป็นอุปกรณ์ที่รับข้อมูลเกี่ยวกับการแสดงผลจาก หน่วยความจํา มาคํานวณและประมวลผล จากนั้นจึงส่งข้อมูลในรูปแบบสัญญาณเพื่อนําไป แสดงผลยังอุปกรณ์แสดงผล
  • 16. 11 บริษัท NVIDIA เป็นผู้พัฒนา GPU ที่มีชื่อว่า GeForce 256 เป็นเจ้าแรก. ประสิทธิภาพการทํางานของ GeForce 256 มีสูงมากมันสามารถทําการคํานวณเป็นพันล้าน ต่อวินาที และสามารถทําการประมวลผลตํ่าสุดที่ 10 million polygons ต่อวินาที และ สูงสุด 22 million transistors เป็นการ์ดแสดงผลทั้งแบบ 2D/3D เป็น ชิบกราฟิกตัวแรกที่นํา เทคโนโลยี transform, lighting, triangle setup/clipping, และ rendering ไว้ในชิฟกราฟิก เพียงตัวเดียว เจ้า GeForce256 ตัวนี้มาพร้อมกับหน่วยความจําขนาด 32 MB แบบ DDR พร้อมช่อง TV-out จากการที่ NVIDIA ใช้เทคโนโลยี 0.22 ไมครอนกับ GeForce 256 จึงทํา ให้มันสามารถสร้างภาพได้เสมือนจริงมากขึ้น ซึ่งภาพเสมือนจริงส่วนหนึ่งได้มาจากการที่ นําเอา Polygon ที่ประมวลผลโดย CPU มาเท่านั้น และ GPU จะทําการประมวลผลในส่วน T&L(Tranform & Lighting) และทําการ Renderเอง ซึ่งทําให้ CPU นําความสามารถไปใช้ ในการการประมวลผลด้านอื่น ๆ มากขึ้น
  • 17. 12 รายละเอียดโปรแกรม รายละเอียดขั้นตอนการทํางานของโปรแกรม Input ของโปรแกรม โปรแกรมแบ่งออกเป็นสอง Mode คือทํากับภาพ และการทํากับไฟล์วิดิโอ สําหรับการทํากับภาพนั้นต้องการไฟล์สามไฟล์คือ 1) ไฟล์ภาพฉากหน้า 2) ไฟล์ภาพฉากหลัง 3) ไฟล์ภาพ tri-map นั้นคือในภาพจะมีสามสีคือสีขาวแทนบริเวณฉากหน้า สีดําแทน บริเวณฉากหลัง และ สีเทา แทนบริเวณที่ไม่แน่ใจ ตัวอย่างภาพฉากหน้า ตัวอย่างภาพ trimap Output ของโปรแกรม โปรแกรมจะให้ภาพที่แสดงค่าความ โปร่งสีของฉากหน้าเพื่อนําไปทําการ ซ้อนภาพต่อ ตัวอย่างภาพที่ได้จากการแยกฉาก หน้าออกมา
  • 18. 13 Function หลักของโปรแกรม เป็นฟังก์ชันในภาษา Cg ที่ใช้ในการวนทําซํ้าเพื่อแก้linear algebra เพื่อหาค่าคําตอบ โดยจะ มีการแก้สมการโดยใช้Jacobi’s method แต่ว่าเนื่องจาก สมการซึ่งแทนด้วยเมทริกซ์ AX=B แต่ ว่า เมทริกซ์ A นั้น เป็น band & sparse matrix ทําให้สามารลดรูปสมการได้และไม่จําเป็นต้อง วนลูปทําทุกจุด เพราะในภาษา Cg นั้น ได้แยกการประมวลผลของแต่ละจุดแบบอิสระต่อกัน float iterate(float2 p, sampler2D X, sampler2D iD, sampler2D nD, sampler2D B) // iD: 1/diagonal, a_{ii}^{-1} // nD: non-diagonal { float4 a = tex2D(nD, p); float4 x = float4( tex2D(X, p + float2(0, -2/H))[0], tex2D(X, p + float2(-2/W, 0))[0], tex2D(X, p + float2(+2/W, 0))[0], tex2D(X, p + float2(0, +2/H))[0] ); return tex2D(iD,p)[0]*(tex2D(B, p)[0] - dot(a, x)); } เป็นฟังก์ชันในภาษา C++ ที่ใช้ในการแก้linear algebra เพื่อหาค่าคําตอบ โดยจะมีการแก้ สมการโดยใช้Jacobi’s method โดยที่สมการซึ่งแทนด้วยเมทริกซ์ AX=B แต่ว่า เมทริกซ์ A นั้น เป็น band & sparse matrix ทําให้สามารลดรูปสมการได้และโดยจะทําการวนลูปทําทุกจุด void jacobi(int round){ for(int k=0 ; k<round ; k++){ error = 0; for(int i=0; i<307200 ; i++){ X[i](k) = iD[i]*(B[i] - (nD1[i]*X[i-w](k) + nD2[i]*X[i-1](k) + nD3[i]*X[i+1](k) + nD4[i]*X[i+w](k))); } } return; }
  • 19. 14 ขอบเขต ข้อจํากัด -ในการทํางานของโปรแกรมนั้นเหมาะสําหรับการทํางานกับภาพขนาด 640*480 หรือ ภาพ ในอัตราส่วนเดียวกัน -สําหรับโปรแกรมที่พัฒนาขึ้นมานั้นมีข้อจํากัดอยู่ที่ Input ของโปรแกรมนั้นต้องมีภาพ tri- map ซึ่งแสดงส่วนที่เป็นฉากหน้า ฉากหลัง และบริเวณที่ไม่แน่ใจ ซึ่งหากภาพ tri-map ที่ใส่เป็น input นั้นไม่ถูกต้องก็จะทําให้ได้ผลลัพธ์ที่ไม่ถูกต้องไปด้วย -ในการทํางานกับไฟล์Video สามารถทํางานได้ลําบากหากภาพที่ได้ไม่สามารถนําไปทํา เป็นภาพ tri-map ได้อย่างถูกต้อง ผลลัพธ์ที่ได้ก็จะมีความผิดพลาดมาก -วัตถุมีการเคลื่อนที่ออกนอกเฟรมแล้วกลับเข้ามาใหม่ หรือมีการเคลื่อนที่เร็วเกินกว่าที่ โปรแกรมจะตรวจจับได้ แต่สามารถแก้ไขได้โดยกําหนดค่าพื้นหลังให้กับโปรแกรม กลุ่มผู้ใช้โปรแกรม เน้นผู้ใช้ในอุตสาหกรรมผลิตซอฟต์แวร์ วงการภาพยนตร์ หรือช่างภาพผู้สนใจถ่ายภาพ สตูดิโอสําหรับการทําข่าว สตูดิโอสําหรับถ่ายรายการ รวมถึงผู้สนใจทั่วไป ผลของการทดสอบโปรแกรม ภาพตัวอย่างจากการทํางานของโปรแกรมโดยการเปลี่ยนฉากหลัง
  • 20. 15 ภาพแสดง Input และ output ได้จากการทํา matting
  • 21. 16 ปัญหาและอุปสรรค จากการดําเนินงานที่ผ่านมานี้ มีอุปสรรคและปัญหาที่เกิดขึ้นแบ่งออกเป็นหัวข้อหลักๆ ดังต่อไปนี้ 1 ปัญหาความซับซ้อนของภาษา C++ เนื่องจากภาษา C++ มีความซับซ้อนมาก และทางผู้พัฒนาโครงงานมีประสบการณ์ในการ พัฒนาโปรแกรมด้วยภาษา C++ น้อย จึงไม่คุ้นเคยกับโครงสร้างของภาษาและวิธีการใช้งาน คลังข้อมูลพื้นฐานต่างๆที่มีในภาษา ดังนั้นผู้พัฒนาจึงประสบปัญหาในพัฒนาโปรแกรมในช่วงแรก ทั้งในด้านความคล่องแคล่วและความรวดเร็วในการพัฒนาโปรแกรม รวมถึงปัญหาด้านการค้นหา และแก้ไขข้อผิดพลาดของโปรแกรม เป็นผลให้การพัฒนาโปรแกรมมีความล่าช้ากว่ากําหนด แนวทางการแก้ไข ทางผู้พัฒนาโครงงานได้ศึกษาข้อมูลเกี่ยวกับภาษา C++ ทั้งจากหนังสือ และอินเตอร์เนท รวมทั้งได้ถามเพื่อนที่มีประสบการณ์ในภาษานี้ ทําให้สามารถบรรเทาความยุ่งยาก และปัญหาในการพัฒนาโปรแกรมได้บ้าง และในปัจจุบันทางผู้พัฒนาโครงงานได้มีประสบการณ์ การพัฒนาโปรแกรมด้วยภาษา C++ ระดับหนึ่งแล้ว จึงทําให้สามารถพัฒนาโปรแกรมได้ คล่องแคล่วและรวดเร็วขึ้น 2 ปัญหาในการเลือกและการใช้งานคลังโปรแกรม (Library) ภาษา C++ นั้นมีคลังโปรแกรมที่เกี่ยวข้องกับทางด้านการประมวลผลภาพจํานวนมาก แต่ ทางผู้พัฒนาโครงงานได้พบปัญหาในการเลือกใช้และใช้งานดังต่อไปนี้ • บางคลังโปรแกรมที่มีขนาดใหญ่มาก จะต้องใช้คลังโปรแกรมย่อยๆอื่นๆในการ ทํางาน ทําให้มีความยากลําบากในการติดตั้งเพื่อใช้งาน เพราะต้องทําการติดตั้ง คลังโปรแกรมย่อยๆ ทั้งหมดก่อนจึงจะใช้งานได้ • หลายๆคลังโปรแกรมนั้น ออกแบบมาสําหรับการใช้งานบนระบบปฎิบัติการ ยูนิกซ์(Unix) หรือลีนุกซ์ (Linux) ทําให้มีความยากลําบากในการนํามาใช้พัฒนา โปรแกรมบนระบบปฏิบัติการวินโดวส์ (Windows) • บางคลังโปรแกรมมีวิธีการใช้งานที่ละเอียดและซับซ้อนมาก ทําให้ต้องใช้เวลาใน การศึกษาวิธีการใช้งานเป็นเวลานาน แนวทางการแก้ไข ทางผู้พัฒนาโครงงานพยายามเลือกใช้เฉพาะคลังโปรแกรมที่มีวิธีการ ติดตั้งและใช้งานง่าย รวมทั้งมีฟังก์ชันที่ต้องการใช้งานครบถ้วน
  • 22. 17 3 ปัญหาความซับซ้อนในภาษา Cg ทางผู้พัฒนาโครงงานไม่มีประสบการณ์ในการพัฒนาโปรแกรมด้วยภาษา Cg มาก่อน จึง ไม่คุ้นเคยกับโครงสร้างของภาษาและวิธีการใช้งานคลังข้อมูลพื้นฐานต่างๆที่มีในภาษา ดังนั้น ผู้พัฒนาจึงประสบปัญหาในพัฒนาโปรแกรมในช่วงแรก ทั้งในด้านความคล่องแคล่วและความ รวดเร็วในการพัฒนาโปรแกรม รวมถึงปัญหาด้านการค้นหาและแก้ไขข้อผิดพลาดของโปรแกรม เป็นผลให้การพัฒนาโปรแกรมมีความล่าช้ากว่ากําหนด แนวทางการแก้ไข ทางผู้พัฒนาโครงงานได้ศึกษาข้อมูลเกี่ยวกับภาษา Cg ทั้งจากหนังสือ และ อินเตอร์เนท รวมทั้งได้ถามรุ่นพี่ที่มีประสบการณ์ในภาษานี้ ทําให้สามารถบรรเทาความยุ่งยาก และปัญหาในการพัฒนาโปรแกรมได้บ้าง และในปัจจุบันทางผู้พัฒนาโครงงานได้มี ประสบการณ์การพัฒนาโปรแกรมด้วยภาษา Cg ระดับหนึ่งแล้ว จึงทําให้สามารถพัฒนา โปรแกรมได้คล่องแคล่วและรวดเร็ว 4 ปัญหาด้านการออกแบบโปรแกรม • ใช้เวลาในการ run นาน ทําให้การทดลองแต่ละครั้งทําได้ยากและเสียเวลามาก แนว ทางการแก้ปัญหาคือ ทําการเขียน Code โดยเลือกใช้อัลกอรึทึม และ โครงสร้างข้อมูล ที่มีประสิทธิภาพในการทํางาน • Code ที่เขียนค่อนข้างวุ่นวายสับสน ไม่เป็นระบบระเบียบ ยากต่อการแก้ไขปรับค่า ต่างๆ แนวทางการแก้ไขคือจะปรับปรุง code ให้เป็น low coupling และ high cohesion เพื่อให้สามารถปรับปรุง code ได้ง่ายขึ้น 5 ปัญหาด้านการทํางานกับไฟล์ Video • ในการทํางานกับไฟล์video นั้นจําเป็นต้องมีการสร้างภาพ tri-map ขึ้นมาซึ่งหากไม่ สามารถสร้างภาพ tri-map ที่ถูกต้องได้นั้น ผลลัพธ์ที่ได้ก็จะมีความผิดพลาดไปด้วย ทํา ให้การทํางานกับไฟล์video ค่อนข้างมีข้อจํากัด
  • 23. 18 แนวทางในการพัฒนาและประยุกต์ใช้ร่วมกับงานอื่นๆในขั้นต่อไป จากโปรแกรมที่ได้พัฒนาขึ้นมานั้น สามารถนําไปพัฒนาต่อโดยนําไปเป็นส่วนเพิ่มเติม ให้กับโปรแกรมImage processing อื่นๆ ซึ่งเทคนิคของโปรแกรมนี้สามารถเพิ่มประสิทธิภาพให้กับ โปรแกรมอื่นๆได้และในส่วนของการแก้linear algebra ที่มีขนาดใหญ่มากๆนั้น ก็สามารถนําไป ประยุกต์ใช้กับโปรแกรมอื่นๆที่ต้องจัดการกับปัญหาแก้linear algebra ที่มีขนาดใหญ่มากๆ เช่นกัน ข้อสรุปและข้อเสนอแนะ ผลการดําเนินงานที่ผ่านมา โดยสรุป เป็นที่น่าพอใจ แม้จะมีปัญหาและอุปสรรคบ้าง เช่น ปัญหาการแก้สมการปัวส์ซองที่มีความซับซ้อนมาก ปัญหาความซับซ้อนของภาษาC++ และ Cg หรือปัญหาการทํางานของฟังก์ชันหลัก การทํางานกับไฟล์video สําหรับข้อเสนอแนะคือ หากสามารถหาวิธีในการสร้างภาพ Tri-map ในการทํางานกับไฟล์ Video ได้อย่างถูกต้องแล้ว การทํางานกับไฟล์Video จะมีข้อจํากัดน้อยลง และในส่วนของการใช้ GPU มาช่วยในการประมวลผลในส่วนที่ใช้เวลานาน โดยทําการประมวลผลแบบ parallel บน GPU นั้นสามารถนําไปประยุกต์ใช้กับโปรแกรมอื่นได้อีกมากมาย
  • 24. 19 เอกสารอ้างอิง (Reference) [1] Blue/Green screen. Available from http://en.wikipedia.org/wiki/Chroma_key [2] Composite image. Available form http://en.wikipedia.org/wiki/Compositing [3] Jian Sun1,; Jiaya Jia2.; Chi-Keung Tang2.; Heung-Yeung Shun1, Poisson Matting. Microsoft Research Asia1, Hong Kong University of Science and Technology2, 315-321 [4] Jacobi Method. Available form http://en.wikipedia.org/wiki/Jacobi_method [5] GPGPU. Available from www.gpgpu.org [6]Cg(C for Graphic) Available from http://en.wikipedia.org/wiki/Cg_(programming_language) [7] OpenCV. Available from http://en.wikipedia.org/wiki/OpenCV [8] GPU. Available from http://www.vichakarn.com/vblog/34762 [9] Poisson’s equation. Available from http://en.wikipedia.org/wiki/Poisson's_equation [10] Color model. Available from http://en.wikipedia.org/wiki/Color_model [11] Tristimulus values. Available from http://en.wikipedia.org/wiki/CIE_1931_color_space [12] HSV. Available from http://en.wikipedia.org/wiki/HSL_and_HSV
  • 25. 20 คู่มือการติดตั้งอย่างละเอียด ทําการ Copy โปรแกรมลงไปไว้บนเครื่องที่ต้องการทํางาน ทําการติดตั้ง Cg toolkit และ OpenCV บนเครื่องคอมพิวเตอร์ คู่มือการใช้งานอย่างละเอียด 1) ทําการเปิดหน้าต่าง command line ขึ้นมาและทําการพิมพ์คําสั่ง <program part> <mode> <fg> <bg> <tm> <o> <round> <program part> คือ ชื่อไฟล์โปรแกรมรวมพาร์ทไปยังไฟล์ <mode> คือ โหมดการทํางาน ในที่นี้คือ -image <fg> คือ ชื่อไฟล์ที่ต้องการทําการซ้อนภาพรวมพาร์ทไปยังไฟล์ <bg> คือ ชื่อไฟล์ภาพแบ็คกราวด์รวมพาร์ทไปยังไฟล์ <tm> คือ ชื่อไฟล์ภาพ tri-map รวมพาร์ทไปยังไฟล์ <o> คือ ชื่อไฟล์ของภาพที่ต้องการให้โปรแกรมทําการบันทึกรวม พาร์ทไปยังไฟล์ <round> คือ จํานวนรอบในการทํา Jacobi method