SlideShare a Scribd company logo
1 of 14
Download to read offline
1 
 
บทที่ 1
วัตถุประสงค์และเป้ าหมาย
1.1 วัตถุประสงค์
1. เพื่อสร้างเพื่อสร้างเม้าส์ควบคุมด้วยจุดอ้างอิงบนอุปกรณ์ และเสียง(เป่าลม) สําหรับผู้พิการหรือบุคคลที่
ไม่สามารถใช้มือในการควบคุมเม้าส์ได้
2. เพื่อศึกษาการเขียนโปรแกรมประมวลผลภาพด้วย Web Cam
3. เพื่อศึกษาการเขียนโปรแกรมประมวลผลภาพด้วย Web Cam
4. เพื่อศึกษา API ที่ใช้ในการช่วยเขียนโปรแกรมวิเคราะห์เสียง
5. เพื่อศึกษาการเขียนโปรแกรมด้วย VB.NET
1.2 เป้ าหมาย
1. ได้รับความรู้และสามารถฝึกทักษะเกี่ยวกับการเขียนโปรแกรมติดต่อกับกล้อง
2. ได้รับความรู้และฝึกทักษะในการเขียนโปรแกรมวิเคราะห์เสียง
3. ได้รับความรู้และฝึกทักษะในการเขียนโปรแกรมประยุกต์บนระบบปฏิบัติการ Windows
4. โปรแกรมสามารถควบคุมเม้าส์ด้วยจุดอ้างบนอุปกรณ์(Headphone) และสั่งงานโดยการเป่าลมใส่
ไมโครโฟนได้
2 
 
บทที่ 2
รายละเอียดของการพัฒนา
2.1 ทฤษฎีที่เกี่ยวข้อง
2.1.1 ทฤษฎีรูปภาพและการประมวลผลภาพดิจิตอล
รูปภาพที่ปรากฏและใช้งานบนเครื่องคอมพิวเตอร์นั้น มีอยู่ด้วยกัน 2 ชนิดคือ รูปภาพแบบเวคเตอร์ (Vector)
และรูปภาพแบบราสเตอร์ (Raster) โดยแบ่งตามลักษณะการเก็บบันทึกข้อมูลของรูปภาพและวิธีการนําออกมา
ใช้งานที่แตกต่างกัน
ภาพชนิดเวคเตอร์ เป็นรูปภาพที่มีการบันทึกส่วนต่าง ๆ ของรูปภาพ ไม่ว่าจะเป็นเส้นตรง เส้นโค้งรูปทรง และสี
ต่างๆ ด้วยสมการทางคณิตศาสตร์เมื่อต้องการนํารูปภาพนี้ออกมาทางจอภาพ หรือพิมพ์ออกทางเครื่องพิมพ์
โปรแกรมที่ใช้ในการเปิดรูปภาพดังกล่าว จะต้องนําสมการต่างๆ ที่บันทึกเอาไว้มาคํานวณและสร้างรูปทรง
ต่างๆ ขึ้นมาใหม่จุดเด่นที่ถือว่าเป็นข้อดีของภาพแบบ เวคเตอร์คือ ไม่ว่าคุณจะขยายขนาดภาพให้ใหญ่โตแค่
ไหนก็ตามเครื่องคอมพิวเตอร์จะคํานวณอัตราส่วนของ สมการใหม่ที่เกิดขึ้นมานั้นมีความคมชัดทุกครั้งภาพแบบ
เวคเตอร์นั้นจะใช้กันมากในงานประเภทที่ต้องการความละเอียดแม่นยํา เช่นงาน สร้างภาพโลโก้งานสร้างภาพ
สามมิติงานสร้างภาพ ทางด้านวิศวกรรม เนื่องจากงานที่กล่าวมานั้นจะต้องถูกย่อ หรือขยายอยู่บ่อย ๆ ดังนั้นภาพ
แบบ เวคเตอร์จึงมีประโยชน์มากกับงานประเภทนี้
ส่วนภาพชนิดราสเตอร์ (หรือบิตแมป) นั้น เป็นภาพที่เกิดมาจากการเรียงเม็ดสีขนาดเล็กประกอบขึ้นมาเป็นภาพ
ใหญ่ ที่เรามองเห็นกัน เม็ดเล็กๆ หรือจุดเล็กๆ ดังกล่าว จะบรรจุด้วยสีหนึ่ง ซึ่งจุดนี้มีชื่อเรียกว่า พิกเซล (Pixels)
ในการแก้ไขภาพแบบบิตแมป นั่นหมายความว่าเรากําลังแก้ไขเม็ดสีดังกล่าวเพื่อให้ภาพเปลี่ยนไปตามต้องการ
เนื่องจากภาพแบบบิตแมปนั้นจะบรรจุไปด้วยเม็ดสีในจํานวนที่คงที่ ดังนั้นเมื่อขยายภาพออกมา มากๆ จะทําให้
รายละเอียดของภาพสูญเสียไป ภาพที่ถูกขยายออกมามากๆ จะทําให้มองเห็นจุดสี แทนที่จะเป็นรูปภาพที่
ต้องการ
รูปที่ 2.1 ตัวอย่างภาพแบบเวคเตอร์ (บน) และภาพแบบราสเตอร์ (ล่าง)
3 
 
2.1.2 ไฟล์ภาพแบบต่างๆ
1. ไฟล์บิตแมป (*.BMP)
ภาพประเภทบิตแมป (Bitmap Graphic) นั้น เป็นรูปแบบหนึ่งของวิธีการเก็บภาพที่มีลักษณะ
เป็นพื้นฐานที่มีรูปแบบเรียบง่ายที่สุด โดยจะเก็บรูปเป็นลักษณะของสี่เหลี่ยม ซึ่งสามารถสร้างได้จาก
โปรแกรมวาดรูปทั่วๆไป โครงสร้างของภาพจะเก็บเป็นเมตริกซ์ของค่า pixel ของสีแต่ละจุดใน
หน่วยความจํา โดยสนับสนุนค่า pixel ที่เป็น 8 บิต และ 16 บิต (Indirect) หรือ 24 บิต (Direct) โดย
สามารถเก็บอยู่ในไฟล์ชนิด .bmp โดยโครงสร้างของไฟล์ชนิด .bmp จะเก็บอยู่ในลักษณะที่ไม่
เหมือนกับภาพที่แสดงผลออกมาโดยโปรแกรมวาดภาพต่าง โดยที่ภาพต่างกันแกน Y คือ กลับตรงกัน
ข้ามกัน รองรับงานในโหมดสีแบบ RGB, Indexed Color, Grayscale และ Bitmap
การเก็บข้อมูลในรูปแบบบิตแมปมีข้อดีคือสามารถเก็บข้อมูลภาพได้ละเอียด นอกจากนี้ยัง
นําไปใช้บนโปรแกรมที่ใช้งานบนวินโดวส์ได้ทุกโปรแกรม ในทางกลับกันไฟล์ภาพที่ได้จะมีขนาด
ใหญ่ ถือเป็นข้อเสียของการเก็บภาพในรูปแบบไฟล์บิตแมป อีกทั้งยังไม่สามารถทํางานสําหรับงาน
พิมพ์แบบแยกสีได้ และใช้งานบนเครื่อง Macintosh ได้ไม่ดีนัก
2. ไฟล์ภาพแบบ JPEG (*.JPG, *.JPEG)
JPEG ย่อมาจากชื่อเต็มคือ Joint Photographic Experts Group เป็นไฟล์กราฟิกที่มีการบีบอัด
ข้อมูลทําให้ไฟล์มีขนาดเล็ก เหมาะสําหรับใช้เก็บบันทึกรูปภาพแบบภาพถ่าย หรือภาพที่มีการไล่โทน
สีแบบต่อเนื่อง นอกจากนี้ยังนิยมใช้ในเอกสารแบบ HTML สําหรับเว็บไซต์และงานบริการแบบ
ออนไลน์ต่างๆ บนอินเตอร์เน็ตเช่นเดียวกันกับไฟล์แบบ GIF โดยการบีบอัดข้อมูลของไฟล์JPEG
รองรับโหมดสีแบบ CMYK, RGB, Grayscale และไม่รองรับการใช้งาน Alpha Channels
ข้อดีของไฟล์JPEG คือขนาดของไฟล์ที่เล็กมาก สามารถดาวน์โหลดผ่านทางอินเตอร์เน็ตได้
รวดเร็ว แต่การบีบอัดข้อมูลทําให้คุณภาพของภาพลดลงอย่างมาก จึงไม่เหมาะกับงานที่ต้องการความ
ละเอียดสูง
2.1.3 การประมวลผลภาพดิจิตอล
2.1.3.1 การทํา Thresholding
เทคนิคการทํา Thresholding มีอยู่หลายแบบที่มีการใช้งานเกี่ยวกับงานด้านคอมพิวเตอร์อย่าง
กว้างขวาง เช่น Threshold แบบเดี่ยวที่ให้ผลลัพธ์ที่น่าพอใจกับหลายๆ รูปภาพนอกจากนี้ยังมี Threshold
ที่เป็นแบบตัวแปรหรือ รูปแบบที่มีหลายระดับ และยังใช้สถิติมาช่วยใช้ร่วมด้วย
4 
 
1. Global Thresholding
เป็นกระบวนการที่ใช้ในการแยกวัตถุ ที่มีความแตกต่างจากภาพพื้นหลังของภาพ การจําแนก
แต่ละกลุ่มของพิกเซลว่าเป็นวัตถุเดียวกันหรือว่าเป็นภาพพื้นหลัง สามารถกําหนดค่าให้กับภาพต้นฉบับ
ได้ ถ้าอยู่ในช่วงที่กําหนด การทํา Threshold ทั่วไป จะเป็นแบบตรงไปตรงมา กําหนดให้ a ∈ Rx
ของ
ภาพต้นแบบ และให้ช่วงที่ต้องการทํา Threshold เป็น [h,k] Threshold ของภาพ b {0,1}x ให้
1 ถ้า h ≤ a ≤ k (2.1)
b(x) = 0 อื่น
ทุกค่าของ x มีสองกรณีที่ต้องให้ความสนใจ คือ ค่าของภาพ b มีค่าสูงเพียงอย่างเดียวหรือ
มีค่าตํ่าเพียงอย่างเดียว ในกรณีแรกของ Threshold ภาพ b จะให้
1 ถ้า h ≤ a ≤ k (2.2)
b(x) = 0 อื่น
กรณีที่สอง
1 ถ้า h ≤ a ≤ k (2.3)
b(x) = 0 อื่น
ที่ค่า k แทนค่า Threshold ที่ต้องการ
นอกจากนี้ยังมีสมการพีชคณิตของภาพ กําหนดให้ a ∈ Rx
เป็นภาพต้นแบบ และ [h.k] เป็นช่วงของค่า
Threshold ผลลัพธ์ของ Threshold คือภาพ b{0,1}x คํานวณได้จาก
b := x[h, k] (2.4)
สมการที่มีลักษณะพิเศษ
b := k ≤ x(a) (2.5)
และ
b = k ≥ x(a) (2.6)
5 
 
รูปที่ 2.2 แสดงกระบวนการที่ใช้ในการแยกวัตถุตามสมการพีชคณิตของภาพ
2.1.3.2 Semi-Thresholding
Semi Thresholding นําประโยชน์ของ Global Thresholding ที่มีการเปลี่ยนแปลงมาใช้งาน ค่า
ของแต่ละพิกเซลจะอยู่ภายใน ช่วงของค่า Threshold จะเก็บค่าพิกเซลเดิมไว้หรือถ้าค่าของพิกเซลไม่อยู่
ในช่วงของ Threshold จะถูกเปลี่ยนค่าให้เป็น “0” ให้ภาพต้นฉบับเป็น a ∈ Rx
ช่วงของ
Threshold เป็น [h,k] ภาพที่เป็น semi thresholding คือ
b ∈ Rx
โดยให้
a(x) ถ้า h ≤ a(x) ≤ k (2.7)
Image 
Initial K 
Segment image f(x, y) 
Into 2 regions 
Calculate 
Recalculate 
Δk < k0 
END 
6 
 
b(x) = 0 อื่น
สําหรับทุกค่าของ x
สําหรับพื้นที่ที่มีค่าพิกเซลค่าสูงแยกเป็น
a(x) ถ้า a ≥ k (2.8)
b(x) = 0 อื่น
สําหรับพื้นที่ที่มีค่าพิกเซลค่าตํ่าแยกเป็น
a(x) ถ้า a ≤ k (2.9)
b(x) = 0 อื่น
2.1.3.3 Multi-Level Thresholding
จากวิธีการของ Thresholding ที่กล่าวมาทั้งสองวิธีนั้น การทําเซกเมนต์กับภาพจะทําให้ได้
ข้อมูลที่มีขอบเขตหรือว่าพื้นที่นั้นจะถูกแบ่งออกเป็นสองส่วน การทํางานที่เกี่ยวกับภาพนั้นก็มีความ
จําเป็นที่จะต้องแบ่งเซกเมนต์ภาพออกมามากกว่าสองส่วน
Multilevel Threshold จะทําให้เราแบ่งภาพหรือจัดกลุ่มได้มากกว่า ยกตัวอย่างเช่น
ฮิสโตแกรม (histogram) ของภาพที่มีจุดสูงสุดสามจุด สามารถแบ่งจุดเพื่อทํา Threshold ได้ 2 จุดโดย
ช่วงที่แบ่งไม่ทับซ้อนซึ่งกันและกัน กําหนดให้ a ∈ Rx
และ k1,…,kn เป็นค่า Threshold ที่ k1 > k2 >
k3 >…>kn แบ่ง R ออกเป็น n+1 ที่สัมพันธ์กับค่าผลลัพธ์ของ V1,V2,V3,…,Vn โดยทั่วไปค่าที่ได้จะ
เป็น 0,
1
,...,
1
,1
nn
n −
Threshold ของภาพ b ∈ Rx
กําหนดโดย
v1 ถ้า k < a(x)
b(x) = vi ถ้า k < a(x) ≤ ki-1 (2.10)
vn+1 ถ้า a(x) ≤ k
2.1.3.4 Variable Thresholding
การทําThresholdที่เป็นแบบเดียวยังทําให้ผลลัพธ์ที่ทําภาพนั้นยังไม่ค่อยดี Variable
Thresholding จะทําให้ผลการทํา Threshold กับภาพนั้นมีความแตกต่างกันหลายระดับขึ้น
7 
 
ภาพที่มีระดับความเข้มของวัตถุ และพื้นหลังสูง แต่มีความสว่างของภาพไม่สมํ่าเสมอกันนั้น
ภาพวัตถุและพื้นหลังนั้นจะมีค่าตํ่าที่อีกด้านหนึ่งของภาพมากกว่าอีกข้างตัวอย่างเช่น ภาพอาจจะถูก
แบ่งเป็นพื้นที่เล็กๆย่อยลงไป ความแน่นอนของการทํา Threshold ขณะนั้นของเขตและเป้าหมายของ
ภาพที่ต้องการที่เป็นพื้นที่ย่อยนั้นรวมกันเป็นสิ่งเดียวกันได้
กําหนดให้ a ∈ Rx
เป็นภาพต้นฉบับ และภาพ d ∈ Rx
แสดงถึงการทํา Threshold ที่ค่า x ต่าง
d(x) คือค่าที่ได้จากการทํา Threshold ที่ x ต่างการทํา Threshold ภาพ b{0,1} กําหนดให้
1 ถ้า a(x) ≥ d(x) (2.11)
b(x) = 0 ถ้า a(x) < d(x)
2.1.4 การทําเซกเมนเตชัน
เซกเมนเตชัน (Segmentation) หมายถึง การแบ่งภาพออกเป็นส่วนๆ โดยการแบ่ง เราจะใช้คุณสมบัติ
พิเศษ (Feature) ของแต่ละภาพ เช่น ค่าความเข้มแสง, สี, การเปลี่ยนแปลงความเข้มแสง (Gradient), ลักษณะของ
พื้นผิว (Texture) โดยมีกระบวนการที่สําคัญได้แก่ การหาขอบของภาพ (Discontinuity) และการหาส่วนที่
เหมือนกันของภาพ (Similarity)
2.1.4.1 การหาขอบของภาพ (Discontinuity)
เราสามารถหาขอบของภาพด้วยวิธีการที่มีชื่อเรียกต่างๆดังต่อไปนี้
1. First-Second Derivative (ไม่มี noise)
เรียกอีกอย่างว่า Sharp Edge ถือเป็นกรณีอุดมคติ คือภาพต้นฉบับไม่มี noise และมีการแบ่งระหว่าง
ความเข้มแสงมากกับความเข้มแสงน้อยอย่างชัดเจน ทําให้สามารถหาขอบได้ง่าย
2. First-Second Derivative (มี noise)
ใช้กับภาพต้นฉบับที่เกิดจากการถ่ายภาพปกติ จะมี noise คือไม่มีการแบ่งระหว่างความเข้มแสงมากกับ
น้อยอย่างชัดเจน แต่จะเป็นการเปลี่ยนแปลงความเข้มแสงจากมากค่อยๆลดเป็นน้อย หรือกรณีความ
เข้มแสงจากน้อยค่อยๆเพิ่มเป็นมาก เราสามารถหาขอบได้จากการเปลี่ยนแปลงนี้
2.1.4.2 การหาส่วนที่เหมือนกันของภาพ (Similarity)
ใช้ในการแยกองค์ประกอบต่างๆของรูปภาพออกจากกันตามลักษณะสําคัญที่เราพิจารณา ขั้นตอนนี้
เป็นขั้นตอนสําคัญของการวิเคราะห์ภาพ ซึ่งมีประโยชน์ดังนี้
1) ลดจํานวนข้อมูลในรูปภาพที่ไม่จําเป็นในการวิเคราะห์ลง
8 
 
2) จัดระเบียบข้อมูลในรูปภาพให้เป็นกลุ่มได้ดีขึ้น
3) แสดงข้อมูลในรูปที่เข้าใจง่ายขึ้น
2.1.4.3 Region segmentation methods
เป็นวิธีการแยกองค์ประกอบของภาพโดยดูจากตําแหน่งของพิกเซล และความเหมือนกันของคุณสมบัติ
ของพิกเซลภายในพื้นที่ โดยถ้าพิกเซลที่อยู่ติดกันและมีคุณสมบัติเหมือนกันจะถูกจัดให้เข้ากลุ่มเดียวกัน
1. Region Growing
วิธีการ Region Growing จะนําพิกเซลข้างเคียงมาพิจารณาซึ่งทําการจัดกลุ่ม (Region) ของพิกเซลเหล่านี้
เข้าไว้ด้วยกันโดยการพิจารณาถึงความเข้มของพิกเซล ในการ Segmentation จะต้องมีการกําหนดกลุ่ม (Region )
ที่ต้องการจะแบ่ง Ri โดยที่แต่ละกลุ่มจะต้องมีการกําหนดค่าความเข้มของพิกเซลเริ่มต้น Si, i = 1,…N ( ค่า
เหล่านี้จะถูกเลือกไว้โดยผู้ที่ต้องการ segmentation : supervised mode ) ซึ่งมีไว้เพื่อใช้สําหรับการขยายตัวของ
กลุ่ม (Growth)
ในการขยายตัวของกลุ่มนี้จําเป็นจะต้องมีกฎ เพื่อใช้เป็นวิธีการขยายตัวของกลุ่มรวมทั้งกฎของการ
ตรวจสอบความเป็นอันหนึ่งอันเดียวกันของกลุ่ม ( homogeneity ) ของทุกระยะของการขยายตัว
ในแต่ละระยะของการขยายตัวของกลุ่ม Ri
(k)
, i = 1,…,N จะมีการตรวจสอบว่ามีพิกเซลที่ยังไม่ได้จัด
กลุ่มหรือไม่ (เป็นพิกเซลทั้ง 8 ที่เชื่อมต่อ ( 8-neighbourhood) อยู่กับพิกเซลที่อยู่บริเวณขอบของกลุ่ม ) และ
ก่อนที่จะมีการกําหนดพิกเซลใดๆ (x) เข้าสู่กลุ่มใดกลุ่มหนึ่ง จะต้องมีการตรวจสอบอีกว่ากลุ่มที่จะขยายนั้น
ยังคงมีความเป็นอันหนึ่งอันเดียวกันอีกหรือไม่ ( homogeneity )
P(Ri
(k)
∪ {x} ) = TRUE (2.12)
ประสิทธิภาพของการ Segmentation วิธีนี้จะขึ้นอยู่กับการเลือกค่าความเข้มของพิกเซลเริ่มต้นของในแต่
ละกลุ่มซึ่งกําหนดให้โดยผู้ใช้ ซึ่งกระบวนการนี้สามารถหาได้อัตโนมัติจาก histogram ของภาพโดยการ
พิจารณาค่าสูงสุดของ histogram ( ค่า peak ) มาใช้เป็นค่าความเข้มของพิกเซลเริ่มต้นของกลุ่มได้ ซึ่งโดยปกติ
แล้วจะมีค่าความเข้มเริ่มต้นมากกว่าหนึ่งค่าต่อหนึ่งกลุ่ม
ดังนั้นจึงต้องมีวิธีการ merging เพื่อที่จะใช้ในการรวมกลุ่มที่มีลักษณะทาง statistical ( พิจารณาค่าเฉลี่ย
และค่าเบี่ยงเบนมาตรฐาน ) ใกล้เคียงกัน
∑∈
=
iRk
i lkf
n
m
)1,(
),(
1
(2.13)
9 
 
∑∈
−=
iRlk
ii mlkf
n ),(
2
)),((
1
σ (2.14)
เมื่อ mi เป็นค่าเฉลี่ยของค่าความเข้มในกลุ่มที่ I ที่มีจํานวนพิกเซลเท่ากับ n พิกเซล ค่าเหล่านี้จะใช้ในการ
จะนําไปในการตัดสินใจว่าจะสามารถรวมกลุ่ม R1, R2 เข้าไว้ด้วยกันได้หรือไม่ ถ้าหากค่าเฉลี่ยของกลุ่ม m1, m2
มีค่าใกล้เคียงกันก็สามารถรวมกันได้โดยใช้วิธีที่เรียกว่า Split and Merge
2. Merge Region
เป็นวิธีการ segmentation วิธีหนึ่งซึ่งจะมี algorithm ดังนี้ คือถ้าสมมติว่ามีการสแกนไปยังพิกเซลต่างๆ
ภายในภาพจากพิกเซลแรกไปยังพิกเซลสุดท้ายของภาพไปตามแถวและหลักตามลําดับ ในช่วงระหว่างการ
สแกนก็จะมีการกําหนดพิกเซลนั้นไปยังกลุ่มต่างๆ สมมติปัจจุบันอยู่ที่พิกเซล (k, l ) ดังนั้นพิกเซลแรกจถึง
พิกเซล (k-1, l) ได้ถูกกําหนดให้อยู่ในกลุ่มต่างๆหมดแล้ว ดังนั้นพิกเซลที่ (k, l ) จึงเปรียบเสมือนเป็นอีกกลุ่ม
หนึ่งที่พยายามที่จะรวมเข้ากับกลุ่มที่มีอยู่ก่อนหน้านั้น (กลุ่มที่มีทั้งหมด Ri แต่จะเลือกเอาเฉพาะกลุ่มที่อยู่
ข้างเคียงเท่านั้น ได้แก่ กลุ่มที่มีพิกเซล ณ ตําแหน่ง (k-1, l), (k+1, l), (k, l-1) และ (k, l+1) เป็นสมาชิกอยู่ หาก
พบว่าไม่สามารถทําการรวมเข้ากับกลุ่มใดได้ ก็ให้สร้างกลุ่มใหม่ขึ้นมา ซึ่งประสิทธิภาพของวิธีนี้จะขึ้นอยู่กับ
กฎของการรวมกลุ่ม ( P(Ri ∪ (k, l))) ของพิกเซล (k, l) เข้ากับกลุ่ม Ri กฎของการรวมจะขึ้นอยู่กับค่าเฉลี่ยของ
กลุ่ม mi และค่าเบี่ยงเบนมาตรฐาน Si แต่สําหรับการรวมกันของ R ∪ (k, l) จะมีการเปลี่ยนแปลงการหา
ค่าเฉลี่ย และค่าเบี่ยงเบนมาตรฐานเป็นดังนี้
)),((
1
1'
ii nmlkf
n
m +
+
= (2.15)
⎟
⎠
⎞
⎜
⎝
⎛
−
+
+
+
= 22'
]),([
11
1
iii mlkf
n
n
n
n
σσ (2.16)
การรวมกันสามารถทําได้เมื่อค่าความเข้มของพิกเซล f(k, l) มีค่าใกล้เคียงกับค่าเฉลี่ย mi ดังต่อไปนี้ คือ
|f(k, l) – mi| <= Ti(k, l ) (2.17)
เมื่อ Ti เป็นค่า Threshold ที่มีค่าเปลี่ยนแปลงอยู่ระหว่างกลุ่ม Ri กับความเข้มของพิกเซล f(k, l) ซึ่ง
สามารถหาได้จาก
10 
 
T
m
lkT
i
i
i ⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
−= '
'
1),(
σ
(2.18)
3. Split Region
เป็นลักษณะของการ segmentation อีกวิธีหนึ่งที่มีลักษณะตรงข้ามกับ Merge region (เป็นลักษณะ Top-
down Approach ) โดยเริ่มต้นจะมีการสมติว่าทั้งภาพจะมีเพียงหนึ่งกลุ่มเท่านั้น ( Region ) โดยถ้าหากว่าไม่เป็น
ความจริงก็ให้ทําการแยกกลุ่มนี้ออกเป็นสี่กลุ่มย่อย และจะมีการพิจารณาลักษณะนี้เรื่อยๆ จนกระทั่งได้กลุ่มของ
ภาพที่มีสมาชิกของกลุ่ม ที่มีค่าใกล้เคียงกัน ในระดับที่สามารถยอมรับได้( homogeneous )
รูปที่ 2.3 แสดงลักษณะของการ Spilt region
การตรวจสอบว่ากลุ่มใดสามารถยอมรับได้หรือไม่ ทําได้โดยการคํานวณผลต่างของค่าความเข้มของ
พิกเซล ที่ได้จากค่าความเข้มสูงสุดลบกับพิกเซลที่มีความเข้มน้อยสุด แล้วนําผลที่ได้ไปเปรียบเทียบกับค่า
Threshold ว่ามีค่าน้อยกว่าหรือไม่ คุณสมบัติของ Split region คือถ้าภาพเริ่มต้นมีขนาดเป็น NxN ก็จะทําให้
ขนาดเท่ากับเป็นกําลังของ 2(N = 2n
) ทุกกลุ่มที่ถูกสร้างด้วย Split Algorithm จะเป็นสี่เหลี่ยมเป็นขนาดเท่ากับ
MxM เมื่อ M เป็นกําลังของ 2(M = 2m
), m <= n และเนื่องจาก Algorithm นี้จะเป็นลักษณะของการเรียกตัวเอง
ดังนั้นจึงสามารถแสดงเป็นลักษณะของรูปต้นไม้ได้ ซึ่งแต่ละโหนดจะมีการแตกออกมาเป็น 4 กลุ่ม ซึ่งเรียกว่า
Quadtree
R1R0
R2 R3
001
0011
R0
R1
R2 R3
R00 R01 R02 R03
11 
 
2.2 เทคโนโลยีที่ใช้
การจับเสียงเป่าลมในการคลิกเม้าส์ โดยจะใช้API เข้ามาช่วยในการออกแบบ โดยจะใช้เสียงเป่าลมเป็น
ตัวกําหนดช่วงเวลาในการ click , double click, drag and drop
- RGB /HSL conversion
- Thresholding
- Object Tracking
- Position Mapping
- Wave Amplitude Analysis
2.3 เครื่องมือที่ใช้ในการพัฒนา
1. Microsoft Visual Studio 2005 โดยภาษาที่ใช้ในการพัฒนา ได้แก่ Visual Basic .NET ซึ่ง
รูปแบบภาษาเป็นภาษาระดับสูงง่ายต่อการพัฒนา และมีการตอบสนองรวดเร็ว
2. ใช้ActiveX มาช่วยในการจับภาพจากกล้อง Web Cam เพื่อความสะดวกและรวดเร็วต่อการ
พัฒนา
3. DirectX SDK : Microsoft.DirectX, Microsoft.DirectX.DirectSound วิเคราะห์อินพุตเสียง
2.4 รายละเอียดโปรแกรมที่จะพัฒนาในเชิงเทคนิค (Software Specification)
• Input/Output Specification
• Input ได้แก่ Web Cam ที่ใช้ในการจับภาพ และนําภาพที่ได้มาประมวลผล,
Microphone ใช้ในการวิเคราะห์เสียงเป่าลม และนําผลที่ได้มาใช้ใน Algorithms
ควบคุมการคลิก
• Output ได้แก่ Cursor ที่อยู่บนหน้าจอ จะเลื่อนไปตามจุดอ้างอิงที่กล้องจับ
ภาพได้
• Functional Specification
• การเคลื่อนที่ของเคอร์เซอร์เม้าส์ (Cursor Mouse Move)
• คลิกซ้าย (Mouse Left Click)
• คลิกขวา (Mouse Right Click)
• ดับเบิ้ลคลิก (Mouse Double Click)
• ลากและปล่อย (Drag and Drop)
 
• โครงสร้
รูปที่ 2.5
างซอฟต์แวร์
รูปที่ 2.4
Use Case D
์ (Design)
4 การออกแบบ
iagram ของเ
บ High-level
เมาส์สําหรับผู
l
ผู้พิการทางมืออ
122 
13 
 
2.4.1 คําอธิบาย Use Case Diagram
• เลื่อนเมาส์ : กรณีปกติ
- ผู้ใช้ขยับใบหน้า
- โปรแกรมประมวลผลตําแหน่งที่เปลี่ยนไปของจุดอ้างอิง
- โปรแกรมกําหนดค่าตําแหน่งของเคอร์เซอร์ใหม่
- โปรแกรมแสดงผลตําแหน่งของเคอร์เซอร์
• เลื่อนเมาส์ : ในขณะที่ปุ่มซ้ายถูกกดอยู่
- ทํา “เลื่อนเมาส์ปกติ”
- แสดงคําว่า “ปล่อยเมาส์”
• เรียกเมนู : กรณีปกติ
- ผู้ใช้เป่าลมใส่ไมโครโฟน
- แสดงคําว่า “คลิกซ้าย” เป็นเวลา 2.5 วินาที
- แสดงคําว่า “ดับเบิลคลิก” เป็นเวลา 2.5 วินาที
- แสดงคําว่า “คลิกขวา” เป็นเวลา 2.5 วินาที
- แสดงคําว่า “คลิกซ้ายค้าง” เป็นเวลา 2.5 วินาที
• คลิกซ้าย : กรณีปกติ
- ทํา “เรียกเมนู”
- ผู้ใช้เป่าลมเมื่อถึงคําว่า “คลิกซ้าย”
- ทํา “ส่งค่าคลิกซ้าย”
• ดับเบิลคลิก : กรณีปกติ
- ทํา “เรียกเมนู”
- ผู้ใช้เป่าลมเมื่อถึงคําว่า “ดับเบิลคลิก”
- ทํา “ส่งค่าคลิกซ้าย” 2 ครั้ง
• ส่งค่าคลิกซ้าย : กรณีปกติ
- โปรแกรมส่งค่า “ปุ่มซ้ายถูกกด” ให้แก่ระบบ
- โปรแกรมส่งค่า “ปุ่มซ้ายถูกปล่อย” ให้แก่ระบบ
• คลิกขวา : กรณีปกติ
- ทํา “เรียกเมนู”
- ผู้ใช้เป่าลมเมื่อถึงคําว่า “คลิกขวา”
14 
 
- ทํา “ส่งค่าคลิกขวา”
• ส่งค่าคลิกขวา : กรณีปกติ
- โปรแกรมส่งค่า “ปุ่มขวาถูกกด” ให้แก่ระบบ
- โปรแกรมส่งค่า “ปุ่มขวาถูกปล่อย” ให้แก่ระบบ
• ลากวาง : กรณีปกติ
- ทํา “เรียกเมนู”
- ผู้ใช้เป่าลมเมื่อถึงคําว่า “คลิกซ้ายค้าง”
- โปรแกรมส่งค่า “ปุ่มซ้ายถูกกด” ให้แก่ระบบ
- ทํา “เลื่อนเมาส์”
- ผู้ใช้เป่าลมเมื่อต้องการปล่อยเมาส์
- โปรแกรมส่งค่า “ปุ่มซ้ายถูกปล่อย” ให้แก่ระบบ

More Related Content

What's hot

Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)Wongyos Keardsri
 
09 multi arrays
09 multi arrays09 multi arrays
09 multi arraysa-num Sara
 
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)Wongyos Keardsri
 
Java-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional ArraysJava-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional ArraysWongyos Keardsri
 
Java-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindowJava-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindowWongyos Keardsri
 
2D Graphics and Animations in Java World
2D Graphics and Animations in Java World2D Graphics and Animations in Java World
2D Graphics and Animations in Java Worldkunemata
 

What's hot (11)

Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)
 
Java-Answer Chapter 10-11
Java-Answer Chapter 10-11Java-Answer Chapter 10-11
Java-Answer Chapter 10-11
 
Java-Answer Chapter 07
Java-Answer Chapter 07Java-Answer Chapter 07
Java-Answer Chapter 07
 
Java-Answer Chapter 12-13
Java-Answer Chapter 12-13Java-Answer Chapter 12-13
Java-Answer Chapter 12-13
 
Java-Answer Chapter 01-04
Java-Answer Chapter 01-04Java-Answer Chapter 01-04
Java-Answer Chapter 01-04
 
09 multi arrays
09 multi arrays09 multi arrays
09 multi arrays
 
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)
 
Java-Answer Chapter 05-06
Java-Answer Chapter 05-06Java-Answer Chapter 05-06
Java-Answer Chapter 05-06
 
Java-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional ArraysJava-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional Arrays
 
Java-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindowJava-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindow
 
2D Graphics and Animations in Java World
2D Graphics and Animations in Java World2D Graphics and Animations in Java World
2D Graphics and Animations in Java World
 

More from Thanyalux Kanthong

More from Thanyalux Kanthong (20)

โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์
 
โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์
 
โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์โครงงานคอมพิวเตอร์
โครงงานคอมพิวเตอร์
 
เฉลยไทยปี 53
เฉลยไทยปี 53เฉลยไทยปี 53
เฉลยไทยปี 53
 
O net-m6-ไทย53
O net-m6-ไทย53O net-m6-ไทย53
O net-m6-ไทย53
 
เฉลยปี 53
เฉลยปี 53เฉลยปี 53
เฉลยปี 53
 
O net-m6-53
O net-m6-53O net-m6-53
O net-m6-53
 
เฉลยปี 52
เฉลยปี 52เฉลยปี 52
เฉลยปี 52
 
O net-m6-52
O net-m6-52O net-m6-52
O net-m6-52
 
เฉลยปี 51
เฉลยปี 51เฉลยปี 51
เฉลยปี 51
 
O net-m6-51
O net-m6-51O net-m6-51
O net-m6-51
 
เฉลยปี 50
เฉลยปี 50เฉลยปี 50
เฉลยปี 50
 
O net-m6-50
O net-m6-50O net-m6-50
O net-m6-50
 
โครงงานคอม1
โครงงานคอม1โครงงานคอม1
โครงงานคอม1
 
โครงงานคอม1
โครงงานคอม1โครงงานคอม1
โครงงานคอม1
 
โครงงานคอม1
โครงงานคอม1โครงงานคอม1
โครงงานคอม1
 
ใบงานที่ 15
ใบงานที่ 15ใบงานที่ 15
ใบงานที่ 15
 
ใบงานที่ 14
ใบงานที่  14ใบงานที่  14
ใบงานที่ 14
 
ใบงานที่ 13
ใบงานที่  13ใบงานที่  13
ใบงานที่ 13
 
ใบงานที่ 12
ใบงานที่ 12ใบงานที่ 12
ใบงานที่ 12
 

ตัวอย่างโครงงาน 2

  • 1. 1    บทที่ 1 วัตถุประสงค์และเป้ าหมาย 1.1 วัตถุประสงค์ 1. เพื่อสร้างเพื่อสร้างเม้าส์ควบคุมด้วยจุดอ้างอิงบนอุปกรณ์ และเสียง(เป่าลม) สําหรับผู้พิการหรือบุคคลที่ ไม่สามารถใช้มือในการควบคุมเม้าส์ได้ 2. เพื่อศึกษาการเขียนโปรแกรมประมวลผลภาพด้วย Web Cam 3. เพื่อศึกษาการเขียนโปรแกรมประมวลผลภาพด้วย Web Cam 4. เพื่อศึกษา API ที่ใช้ในการช่วยเขียนโปรแกรมวิเคราะห์เสียง 5. เพื่อศึกษาการเขียนโปรแกรมด้วย VB.NET 1.2 เป้ าหมาย 1. ได้รับความรู้และสามารถฝึกทักษะเกี่ยวกับการเขียนโปรแกรมติดต่อกับกล้อง 2. ได้รับความรู้และฝึกทักษะในการเขียนโปรแกรมวิเคราะห์เสียง 3. ได้รับความรู้และฝึกทักษะในการเขียนโปรแกรมประยุกต์บนระบบปฏิบัติการ Windows 4. โปรแกรมสามารถควบคุมเม้าส์ด้วยจุดอ้างบนอุปกรณ์(Headphone) และสั่งงานโดยการเป่าลมใส่ ไมโครโฟนได้
  • 2. 2    บทที่ 2 รายละเอียดของการพัฒนา 2.1 ทฤษฎีที่เกี่ยวข้อง 2.1.1 ทฤษฎีรูปภาพและการประมวลผลภาพดิจิตอล รูปภาพที่ปรากฏและใช้งานบนเครื่องคอมพิวเตอร์นั้น มีอยู่ด้วยกัน 2 ชนิดคือ รูปภาพแบบเวคเตอร์ (Vector) และรูปภาพแบบราสเตอร์ (Raster) โดยแบ่งตามลักษณะการเก็บบันทึกข้อมูลของรูปภาพและวิธีการนําออกมา ใช้งานที่แตกต่างกัน ภาพชนิดเวคเตอร์ เป็นรูปภาพที่มีการบันทึกส่วนต่าง ๆ ของรูปภาพ ไม่ว่าจะเป็นเส้นตรง เส้นโค้งรูปทรง และสี ต่างๆ ด้วยสมการทางคณิตศาสตร์เมื่อต้องการนํารูปภาพนี้ออกมาทางจอภาพ หรือพิมพ์ออกทางเครื่องพิมพ์ โปรแกรมที่ใช้ในการเปิดรูปภาพดังกล่าว จะต้องนําสมการต่างๆ ที่บันทึกเอาไว้มาคํานวณและสร้างรูปทรง ต่างๆ ขึ้นมาใหม่จุดเด่นที่ถือว่าเป็นข้อดีของภาพแบบ เวคเตอร์คือ ไม่ว่าคุณจะขยายขนาดภาพให้ใหญ่โตแค่ ไหนก็ตามเครื่องคอมพิวเตอร์จะคํานวณอัตราส่วนของ สมการใหม่ที่เกิดขึ้นมานั้นมีความคมชัดทุกครั้งภาพแบบ เวคเตอร์นั้นจะใช้กันมากในงานประเภทที่ต้องการความละเอียดแม่นยํา เช่นงาน สร้างภาพโลโก้งานสร้างภาพ สามมิติงานสร้างภาพ ทางด้านวิศวกรรม เนื่องจากงานที่กล่าวมานั้นจะต้องถูกย่อ หรือขยายอยู่บ่อย ๆ ดังนั้นภาพ แบบ เวคเตอร์จึงมีประโยชน์มากกับงานประเภทนี้ ส่วนภาพชนิดราสเตอร์ (หรือบิตแมป) นั้น เป็นภาพที่เกิดมาจากการเรียงเม็ดสีขนาดเล็กประกอบขึ้นมาเป็นภาพ ใหญ่ ที่เรามองเห็นกัน เม็ดเล็กๆ หรือจุดเล็กๆ ดังกล่าว จะบรรจุด้วยสีหนึ่ง ซึ่งจุดนี้มีชื่อเรียกว่า พิกเซล (Pixels) ในการแก้ไขภาพแบบบิตแมป นั่นหมายความว่าเรากําลังแก้ไขเม็ดสีดังกล่าวเพื่อให้ภาพเปลี่ยนไปตามต้องการ เนื่องจากภาพแบบบิตแมปนั้นจะบรรจุไปด้วยเม็ดสีในจํานวนที่คงที่ ดังนั้นเมื่อขยายภาพออกมา มากๆ จะทําให้ รายละเอียดของภาพสูญเสียไป ภาพที่ถูกขยายออกมามากๆ จะทําให้มองเห็นจุดสี แทนที่จะเป็นรูปภาพที่ ต้องการ รูปที่ 2.1 ตัวอย่างภาพแบบเวคเตอร์ (บน) และภาพแบบราสเตอร์ (ล่าง)
  • 3. 3    2.1.2 ไฟล์ภาพแบบต่างๆ 1. ไฟล์บิตแมป (*.BMP) ภาพประเภทบิตแมป (Bitmap Graphic) นั้น เป็นรูปแบบหนึ่งของวิธีการเก็บภาพที่มีลักษณะ เป็นพื้นฐานที่มีรูปแบบเรียบง่ายที่สุด โดยจะเก็บรูปเป็นลักษณะของสี่เหลี่ยม ซึ่งสามารถสร้างได้จาก โปรแกรมวาดรูปทั่วๆไป โครงสร้างของภาพจะเก็บเป็นเมตริกซ์ของค่า pixel ของสีแต่ละจุดใน หน่วยความจํา โดยสนับสนุนค่า pixel ที่เป็น 8 บิต และ 16 บิต (Indirect) หรือ 24 บิต (Direct) โดย สามารถเก็บอยู่ในไฟล์ชนิด .bmp โดยโครงสร้างของไฟล์ชนิด .bmp จะเก็บอยู่ในลักษณะที่ไม่ เหมือนกับภาพที่แสดงผลออกมาโดยโปรแกรมวาดภาพต่าง โดยที่ภาพต่างกันแกน Y คือ กลับตรงกัน ข้ามกัน รองรับงานในโหมดสีแบบ RGB, Indexed Color, Grayscale และ Bitmap การเก็บข้อมูลในรูปแบบบิตแมปมีข้อดีคือสามารถเก็บข้อมูลภาพได้ละเอียด นอกจากนี้ยัง นําไปใช้บนโปรแกรมที่ใช้งานบนวินโดวส์ได้ทุกโปรแกรม ในทางกลับกันไฟล์ภาพที่ได้จะมีขนาด ใหญ่ ถือเป็นข้อเสียของการเก็บภาพในรูปแบบไฟล์บิตแมป อีกทั้งยังไม่สามารถทํางานสําหรับงาน พิมพ์แบบแยกสีได้ และใช้งานบนเครื่อง Macintosh ได้ไม่ดีนัก 2. ไฟล์ภาพแบบ JPEG (*.JPG, *.JPEG) JPEG ย่อมาจากชื่อเต็มคือ Joint Photographic Experts Group เป็นไฟล์กราฟิกที่มีการบีบอัด ข้อมูลทําให้ไฟล์มีขนาดเล็ก เหมาะสําหรับใช้เก็บบันทึกรูปภาพแบบภาพถ่าย หรือภาพที่มีการไล่โทน สีแบบต่อเนื่อง นอกจากนี้ยังนิยมใช้ในเอกสารแบบ HTML สําหรับเว็บไซต์และงานบริการแบบ ออนไลน์ต่างๆ บนอินเตอร์เน็ตเช่นเดียวกันกับไฟล์แบบ GIF โดยการบีบอัดข้อมูลของไฟล์JPEG รองรับโหมดสีแบบ CMYK, RGB, Grayscale และไม่รองรับการใช้งาน Alpha Channels ข้อดีของไฟล์JPEG คือขนาดของไฟล์ที่เล็กมาก สามารถดาวน์โหลดผ่านทางอินเตอร์เน็ตได้ รวดเร็ว แต่การบีบอัดข้อมูลทําให้คุณภาพของภาพลดลงอย่างมาก จึงไม่เหมาะกับงานที่ต้องการความ ละเอียดสูง 2.1.3 การประมวลผลภาพดิจิตอล 2.1.3.1 การทํา Thresholding เทคนิคการทํา Thresholding มีอยู่หลายแบบที่มีการใช้งานเกี่ยวกับงานด้านคอมพิวเตอร์อย่าง กว้างขวาง เช่น Threshold แบบเดี่ยวที่ให้ผลลัพธ์ที่น่าพอใจกับหลายๆ รูปภาพนอกจากนี้ยังมี Threshold ที่เป็นแบบตัวแปรหรือ รูปแบบที่มีหลายระดับ และยังใช้สถิติมาช่วยใช้ร่วมด้วย
  • 4. 4    1. Global Thresholding เป็นกระบวนการที่ใช้ในการแยกวัตถุ ที่มีความแตกต่างจากภาพพื้นหลังของภาพ การจําแนก แต่ละกลุ่มของพิกเซลว่าเป็นวัตถุเดียวกันหรือว่าเป็นภาพพื้นหลัง สามารถกําหนดค่าให้กับภาพต้นฉบับ ได้ ถ้าอยู่ในช่วงที่กําหนด การทํา Threshold ทั่วไป จะเป็นแบบตรงไปตรงมา กําหนดให้ a ∈ Rx ของ ภาพต้นแบบ และให้ช่วงที่ต้องการทํา Threshold เป็น [h,k] Threshold ของภาพ b {0,1}x ให้ 1 ถ้า h ≤ a ≤ k (2.1) b(x) = 0 อื่น ทุกค่าของ x มีสองกรณีที่ต้องให้ความสนใจ คือ ค่าของภาพ b มีค่าสูงเพียงอย่างเดียวหรือ มีค่าตํ่าเพียงอย่างเดียว ในกรณีแรกของ Threshold ภาพ b จะให้ 1 ถ้า h ≤ a ≤ k (2.2) b(x) = 0 อื่น กรณีที่สอง 1 ถ้า h ≤ a ≤ k (2.3) b(x) = 0 อื่น ที่ค่า k แทนค่า Threshold ที่ต้องการ นอกจากนี้ยังมีสมการพีชคณิตของภาพ กําหนดให้ a ∈ Rx เป็นภาพต้นแบบ และ [h.k] เป็นช่วงของค่า Threshold ผลลัพธ์ของ Threshold คือภาพ b{0,1}x คํานวณได้จาก b := x[h, k] (2.4) สมการที่มีลักษณะพิเศษ b := k ≤ x(a) (2.5) และ b = k ≥ x(a) (2.6)
  • 5. 5    รูปที่ 2.2 แสดงกระบวนการที่ใช้ในการแยกวัตถุตามสมการพีชคณิตของภาพ 2.1.3.2 Semi-Thresholding Semi Thresholding นําประโยชน์ของ Global Thresholding ที่มีการเปลี่ยนแปลงมาใช้งาน ค่า ของแต่ละพิกเซลจะอยู่ภายใน ช่วงของค่า Threshold จะเก็บค่าพิกเซลเดิมไว้หรือถ้าค่าของพิกเซลไม่อยู่ ในช่วงของ Threshold จะถูกเปลี่ยนค่าให้เป็น “0” ให้ภาพต้นฉบับเป็น a ∈ Rx ช่วงของ Threshold เป็น [h,k] ภาพที่เป็น semi thresholding คือ b ∈ Rx โดยให้ a(x) ถ้า h ≤ a(x) ≤ k (2.7) Image  Initial K  Segment image f(x, y)  Into 2 regions  Calculate  Recalculate  Δk < k0  END 
  • 6. 6    b(x) = 0 อื่น สําหรับทุกค่าของ x สําหรับพื้นที่ที่มีค่าพิกเซลค่าสูงแยกเป็น a(x) ถ้า a ≥ k (2.8) b(x) = 0 อื่น สําหรับพื้นที่ที่มีค่าพิกเซลค่าตํ่าแยกเป็น a(x) ถ้า a ≤ k (2.9) b(x) = 0 อื่น 2.1.3.3 Multi-Level Thresholding จากวิธีการของ Thresholding ที่กล่าวมาทั้งสองวิธีนั้น การทําเซกเมนต์กับภาพจะทําให้ได้ ข้อมูลที่มีขอบเขตหรือว่าพื้นที่นั้นจะถูกแบ่งออกเป็นสองส่วน การทํางานที่เกี่ยวกับภาพนั้นก็มีความ จําเป็นที่จะต้องแบ่งเซกเมนต์ภาพออกมามากกว่าสองส่วน Multilevel Threshold จะทําให้เราแบ่งภาพหรือจัดกลุ่มได้มากกว่า ยกตัวอย่างเช่น ฮิสโตแกรม (histogram) ของภาพที่มีจุดสูงสุดสามจุด สามารถแบ่งจุดเพื่อทํา Threshold ได้ 2 จุดโดย ช่วงที่แบ่งไม่ทับซ้อนซึ่งกันและกัน กําหนดให้ a ∈ Rx และ k1,…,kn เป็นค่า Threshold ที่ k1 > k2 > k3 >…>kn แบ่ง R ออกเป็น n+1 ที่สัมพันธ์กับค่าผลลัพธ์ของ V1,V2,V3,…,Vn โดยทั่วไปค่าที่ได้จะ เป็น 0, 1 ,..., 1 ,1 nn n − Threshold ของภาพ b ∈ Rx กําหนดโดย v1 ถ้า k < a(x) b(x) = vi ถ้า k < a(x) ≤ ki-1 (2.10) vn+1 ถ้า a(x) ≤ k 2.1.3.4 Variable Thresholding การทําThresholdที่เป็นแบบเดียวยังทําให้ผลลัพธ์ที่ทําภาพนั้นยังไม่ค่อยดี Variable Thresholding จะทําให้ผลการทํา Threshold กับภาพนั้นมีความแตกต่างกันหลายระดับขึ้น
  • 7. 7    ภาพที่มีระดับความเข้มของวัตถุ และพื้นหลังสูง แต่มีความสว่างของภาพไม่สมํ่าเสมอกันนั้น ภาพวัตถุและพื้นหลังนั้นจะมีค่าตํ่าที่อีกด้านหนึ่งของภาพมากกว่าอีกข้างตัวอย่างเช่น ภาพอาจจะถูก แบ่งเป็นพื้นที่เล็กๆย่อยลงไป ความแน่นอนของการทํา Threshold ขณะนั้นของเขตและเป้าหมายของ ภาพที่ต้องการที่เป็นพื้นที่ย่อยนั้นรวมกันเป็นสิ่งเดียวกันได้ กําหนดให้ a ∈ Rx เป็นภาพต้นฉบับ และภาพ d ∈ Rx แสดงถึงการทํา Threshold ที่ค่า x ต่าง d(x) คือค่าที่ได้จากการทํา Threshold ที่ x ต่างการทํา Threshold ภาพ b{0,1} กําหนดให้ 1 ถ้า a(x) ≥ d(x) (2.11) b(x) = 0 ถ้า a(x) < d(x) 2.1.4 การทําเซกเมนเตชัน เซกเมนเตชัน (Segmentation) หมายถึง การแบ่งภาพออกเป็นส่วนๆ โดยการแบ่ง เราจะใช้คุณสมบัติ พิเศษ (Feature) ของแต่ละภาพ เช่น ค่าความเข้มแสง, สี, การเปลี่ยนแปลงความเข้มแสง (Gradient), ลักษณะของ พื้นผิว (Texture) โดยมีกระบวนการที่สําคัญได้แก่ การหาขอบของภาพ (Discontinuity) และการหาส่วนที่ เหมือนกันของภาพ (Similarity) 2.1.4.1 การหาขอบของภาพ (Discontinuity) เราสามารถหาขอบของภาพด้วยวิธีการที่มีชื่อเรียกต่างๆดังต่อไปนี้ 1. First-Second Derivative (ไม่มี noise) เรียกอีกอย่างว่า Sharp Edge ถือเป็นกรณีอุดมคติ คือภาพต้นฉบับไม่มี noise และมีการแบ่งระหว่าง ความเข้มแสงมากกับความเข้มแสงน้อยอย่างชัดเจน ทําให้สามารถหาขอบได้ง่าย 2. First-Second Derivative (มี noise) ใช้กับภาพต้นฉบับที่เกิดจากการถ่ายภาพปกติ จะมี noise คือไม่มีการแบ่งระหว่างความเข้มแสงมากกับ น้อยอย่างชัดเจน แต่จะเป็นการเปลี่ยนแปลงความเข้มแสงจากมากค่อยๆลดเป็นน้อย หรือกรณีความ เข้มแสงจากน้อยค่อยๆเพิ่มเป็นมาก เราสามารถหาขอบได้จากการเปลี่ยนแปลงนี้ 2.1.4.2 การหาส่วนที่เหมือนกันของภาพ (Similarity) ใช้ในการแยกองค์ประกอบต่างๆของรูปภาพออกจากกันตามลักษณะสําคัญที่เราพิจารณา ขั้นตอนนี้ เป็นขั้นตอนสําคัญของการวิเคราะห์ภาพ ซึ่งมีประโยชน์ดังนี้ 1) ลดจํานวนข้อมูลในรูปภาพที่ไม่จําเป็นในการวิเคราะห์ลง
  • 8. 8    2) จัดระเบียบข้อมูลในรูปภาพให้เป็นกลุ่มได้ดีขึ้น 3) แสดงข้อมูลในรูปที่เข้าใจง่ายขึ้น 2.1.4.3 Region segmentation methods เป็นวิธีการแยกองค์ประกอบของภาพโดยดูจากตําแหน่งของพิกเซล และความเหมือนกันของคุณสมบัติ ของพิกเซลภายในพื้นที่ โดยถ้าพิกเซลที่อยู่ติดกันและมีคุณสมบัติเหมือนกันจะถูกจัดให้เข้ากลุ่มเดียวกัน 1. Region Growing วิธีการ Region Growing จะนําพิกเซลข้างเคียงมาพิจารณาซึ่งทําการจัดกลุ่ม (Region) ของพิกเซลเหล่านี้ เข้าไว้ด้วยกันโดยการพิจารณาถึงความเข้มของพิกเซล ในการ Segmentation จะต้องมีการกําหนดกลุ่ม (Region ) ที่ต้องการจะแบ่ง Ri โดยที่แต่ละกลุ่มจะต้องมีการกําหนดค่าความเข้มของพิกเซลเริ่มต้น Si, i = 1,…N ( ค่า เหล่านี้จะถูกเลือกไว้โดยผู้ที่ต้องการ segmentation : supervised mode ) ซึ่งมีไว้เพื่อใช้สําหรับการขยายตัวของ กลุ่ม (Growth) ในการขยายตัวของกลุ่มนี้จําเป็นจะต้องมีกฎ เพื่อใช้เป็นวิธีการขยายตัวของกลุ่มรวมทั้งกฎของการ ตรวจสอบความเป็นอันหนึ่งอันเดียวกันของกลุ่ม ( homogeneity ) ของทุกระยะของการขยายตัว ในแต่ละระยะของการขยายตัวของกลุ่ม Ri (k) , i = 1,…,N จะมีการตรวจสอบว่ามีพิกเซลที่ยังไม่ได้จัด กลุ่มหรือไม่ (เป็นพิกเซลทั้ง 8 ที่เชื่อมต่อ ( 8-neighbourhood) อยู่กับพิกเซลที่อยู่บริเวณขอบของกลุ่ม ) และ ก่อนที่จะมีการกําหนดพิกเซลใดๆ (x) เข้าสู่กลุ่มใดกลุ่มหนึ่ง จะต้องมีการตรวจสอบอีกว่ากลุ่มที่จะขยายนั้น ยังคงมีความเป็นอันหนึ่งอันเดียวกันอีกหรือไม่ ( homogeneity ) P(Ri (k) ∪ {x} ) = TRUE (2.12) ประสิทธิภาพของการ Segmentation วิธีนี้จะขึ้นอยู่กับการเลือกค่าความเข้มของพิกเซลเริ่มต้นของในแต่ ละกลุ่มซึ่งกําหนดให้โดยผู้ใช้ ซึ่งกระบวนการนี้สามารถหาได้อัตโนมัติจาก histogram ของภาพโดยการ พิจารณาค่าสูงสุดของ histogram ( ค่า peak ) มาใช้เป็นค่าความเข้มของพิกเซลเริ่มต้นของกลุ่มได้ ซึ่งโดยปกติ แล้วจะมีค่าความเข้มเริ่มต้นมากกว่าหนึ่งค่าต่อหนึ่งกลุ่ม ดังนั้นจึงต้องมีวิธีการ merging เพื่อที่จะใช้ในการรวมกลุ่มที่มีลักษณะทาง statistical ( พิจารณาค่าเฉลี่ย และค่าเบี่ยงเบนมาตรฐาน ) ใกล้เคียงกัน ∑∈ = iRk i lkf n m )1,( ),( 1 (2.13)
  • 9. 9    ∑∈ −= iRlk ii mlkf n ),( 2 )),(( 1 σ (2.14) เมื่อ mi เป็นค่าเฉลี่ยของค่าความเข้มในกลุ่มที่ I ที่มีจํานวนพิกเซลเท่ากับ n พิกเซล ค่าเหล่านี้จะใช้ในการ จะนําไปในการตัดสินใจว่าจะสามารถรวมกลุ่ม R1, R2 เข้าไว้ด้วยกันได้หรือไม่ ถ้าหากค่าเฉลี่ยของกลุ่ม m1, m2 มีค่าใกล้เคียงกันก็สามารถรวมกันได้โดยใช้วิธีที่เรียกว่า Split and Merge 2. Merge Region เป็นวิธีการ segmentation วิธีหนึ่งซึ่งจะมี algorithm ดังนี้ คือถ้าสมมติว่ามีการสแกนไปยังพิกเซลต่างๆ ภายในภาพจากพิกเซลแรกไปยังพิกเซลสุดท้ายของภาพไปตามแถวและหลักตามลําดับ ในช่วงระหว่างการ สแกนก็จะมีการกําหนดพิกเซลนั้นไปยังกลุ่มต่างๆ สมมติปัจจุบันอยู่ที่พิกเซล (k, l ) ดังนั้นพิกเซลแรกจถึง พิกเซล (k-1, l) ได้ถูกกําหนดให้อยู่ในกลุ่มต่างๆหมดแล้ว ดังนั้นพิกเซลที่ (k, l ) จึงเปรียบเสมือนเป็นอีกกลุ่ม หนึ่งที่พยายามที่จะรวมเข้ากับกลุ่มที่มีอยู่ก่อนหน้านั้น (กลุ่มที่มีทั้งหมด Ri แต่จะเลือกเอาเฉพาะกลุ่มที่อยู่ ข้างเคียงเท่านั้น ได้แก่ กลุ่มที่มีพิกเซล ณ ตําแหน่ง (k-1, l), (k+1, l), (k, l-1) และ (k, l+1) เป็นสมาชิกอยู่ หาก พบว่าไม่สามารถทําการรวมเข้ากับกลุ่มใดได้ ก็ให้สร้างกลุ่มใหม่ขึ้นมา ซึ่งประสิทธิภาพของวิธีนี้จะขึ้นอยู่กับ กฎของการรวมกลุ่ม ( P(Ri ∪ (k, l))) ของพิกเซล (k, l) เข้ากับกลุ่ม Ri กฎของการรวมจะขึ้นอยู่กับค่าเฉลี่ยของ กลุ่ม mi และค่าเบี่ยงเบนมาตรฐาน Si แต่สําหรับการรวมกันของ R ∪ (k, l) จะมีการเปลี่ยนแปลงการหา ค่าเฉลี่ย และค่าเบี่ยงเบนมาตรฐานเป็นดังนี้ )),(( 1 1' ii nmlkf n m + + = (2.15) ⎟ ⎠ ⎞ ⎜ ⎝ ⎛ − + + + = 22' ]),([ 11 1 iii mlkf n n n n σσ (2.16) การรวมกันสามารถทําได้เมื่อค่าความเข้มของพิกเซล f(k, l) มีค่าใกล้เคียงกับค่าเฉลี่ย mi ดังต่อไปนี้ คือ |f(k, l) – mi| <= Ti(k, l ) (2.17) เมื่อ Ti เป็นค่า Threshold ที่มีค่าเปลี่ยนแปลงอยู่ระหว่างกลุ่ม Ri กับความเข้มของพิกเซล f(k, l) ซึ่ง สามารถหาได้จาก
  • 10. 10    T m lkT i i i ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ −= ' ' 1),( σ (2.18) 3. Split Region เป็นลักษณะของการ segmentation อีกวิธีหนึ่งที่มีลักษณะตรงข้ามกับ Merge region (เป็นลักษณะ Top- down Approach ) โดยเริ่มต้นจะมีการสมติว่าทั้งภาพจะมีเพียงหนึ่งกลุ่มเท่านั้น ( Region ) โดยถ้าหากว่าไม่เป็น ความจริงก็ให้ทําการแยกกลุ่มนี้ออกเป็นสี่กลุ่มย่อย และจะมีการพิจารณาลักษณะนี้เรื่อยๆ จนกระทั่งได้กลุ่มของ ภาพที่มีสมาชิกของกลุ่ม ที่มีค่าใกล้เคียงกัน ในระดับที่สามารถยอมรับได้( homogeneous ) รูปที่ 2.3 แสดงลักษณะของการ Spilt region การตรวจสอบว่ากลุ่มใดสามารถยอมรับได้หรือไม่ ทําได้โดยการคํานวณผลต่างของค่าความเข้มของ พิกเซล ที่ได้จากค่าความเข้มสูงสุดลบกับพิกเซลที่มีความเข้มน้อยสุด แล้วนําผลที่ได้ไปเปรียบเทียบกับค่า Threshold ว่ามีค่าน้อยกว่าหรือไม่ คุณสมบัติของ Split region คือถ้าภาพเริ่มต้นมีขนาดเป็น NxN ก็จะทําให้ ขนาดเท่ากับเป็นกําลังของ 2(N = 2n ) ทุกกลุ่มที่ถูกสร้างด้วย Split Algorithm จะเป็นสี่เหลี่ยมเป็นขนาดเท่ากับ MxM เมื่อ M เป็นกําลังของ 2(M = 2m ), m <= n และเนื่องจาก Algorithm นี้จะเป็นลักษณะของการเรียกตัวเอง ดังนั้นจึงสามารถแสดงเป็นลักษณะของรูปต้นไม้ได้ ซึ่งแต่ละโหนดจะมีการแตกออกมาเป็น 4 กลุ่ม ซึ่งเรียกว่า Quadtree R1R0 R2 R3 001 0011 R0 R1 R2 R3 R00 R01 R02 R03
  • 11. 11    2.2 เทคโนโลยีที่ใช้ การจับเสียงเป่าลมในการคลิกเม้าส์ โดยจะใช้API เข้ามาช่วยในการออกแบบ โดยจะใช้เสียงเป่าลมเป็น ตัวกําหนดช่วงเวลาในการ click , double click, drag and drop - RGB /HSL conversion - Thresholding - Object Tracking - Position Mapping - Wave Amplitude Analysis 2.3 เครื่องมือที่ใช้ในการพัฒนา 1. Microsoft Visual Studio 2005 โดยภาษาที่ใช้ในการพัฒนา ได้แก่ Visual Basic .NET ซึ่ง รูปแบบภาษาเป็นภาษาระดับสูงง่ายต่อการพัฒนา และมีการตอบสนองรวดเร็ว 2. ใช้ActiveX มาช่วยในการจับภาพจากกล้อง Web Cam เพื่อความสะดวกและรวดเร็วต่อการ พัฒนา 3. DirectX SDK : Microsoft.DirectX, Microsoft.DirectX.DirectSound วิเคราะห์อินพุตเสียง 2.4 รายละเอียดโปรแกรมที่จะพัฒนาในเชิงเทคนิค (Software Specification) • Input/Output Specification • Input ได้แก่ Web Cam ที่ใช้ในการจับภาพ และนําภาพที่ได้มาประมวลผล, Microphone ใช้ในการวิเคราะห์เสียงเป่าลม และนําผลที่ได้มาใช้ใน Algorithms ควบคุมการคลิก • Output ได้แก่ Cursor ที่อยู่บนหน้าจอ จะเลื่อนไปตามจุดอ้างอิงที่กล้องจับ ภาพได้ • Functional Specification • การเคลื่อนที่ของเคอร์เซอร์เม้าส์ (Cursor Mouse Move) • คลิกซ้าย (Mouse Left Click) • คลิกขวา (Mouse Right Click) • ดับเบิ้ลคลิก (Mouse Double Click) • ลากและปล่อย (Drag and Drop)
  • 12.   • โครงสร้ รูปที่ 2.5 างซอฟต์แวร์ รูปที่ 2.4 Use Case D ์ (Design) 4 การออกแบบ iagram ของเ บ High-level เมาส์สําหรับผู l ผู้พิการทางมืออ 122 
  • 13. 13    2.4.1 คําอธิบาย Use Case Diagram • เลื่อนเมาส์ : กรณีปกติ - ผู้ใช้ขยับใบหน้า - โปรแกรมประมวลผลตําแหน่งที่เปลี่ยนไปของจุดอ้างอิง - โปรแกรมกําหนดค่าตําแหน่งของเคอร์เซอร์ใหม่ - โปรแกรมแสดงผลตําแหน่งของเคอร์เซอร์ • เลื่อนเมาส์ : ในขณะที่ปุ่มซ้ายถูกกดอยู่ - ทํา “เลื่อนเมาส์ปกติ” - แสดงคําว่า “ปล่อยเมาส์” • เรียกเมนู : กรณีปกติ - ผู้ใช้เป่าลมใส่ไมโครโฟน - แสดงคําว่า “คลิกซ้าย” เป็นเวลา 2.5 วินาที - แสดงคําว่า “ดับเบิลคลิก” เป็นเวลา 2.5 วินาที - แสดงคําว่า “คลิกขวา” เป็นเวลา 2.5 วินาที - แสดงคําว่า “คลิกซ้ายค้าง” เป็นเวลา 2.5 วินาที • คลิกซ้าย : กรณีปกติ - ทํา “เรียกเมนู” - ผู้ใช้เป่าลมเมื่อถึงคําว่า “คลิกซ้าย” - ทํา “ส่งค่าคลิกซ้าย” • ดับเบิลคลิก : กรณีปกติ - ทํา “เรียกเมนู” - ผู้ใช้เป่าลมเมื่อถึงคําว่า “ดับเบิลคลิก” - ทํา “ส่งค่าคลิกซ้าย” 2 ครั้ง • ส่งค่าคลิกซ้าย : กรณีปกติ - โปรแกรมส่งค่า “ปุ่มซ้ายถูกกด” ให้แก่ระบบ - โปรแกรมส่งค่า “ปุ่มซ้ายถูกปล่อย” ให้แก่ระบบ • คลิกขวา : กรณีปกติ - ทํา “เรียกเมนู” - ผู้ใช้เป่าลมเมื่อถึงคําว่า “คลิกขวา”
  • 14. 14    - ทํา “ส่งค่าคลิกขวา” • ส่งค่าคลิกขวา : กรณีปกติ - โปรแกรมส่งค่า “ปุ่มขวาถูกกด” ให้แก่ระบบ - โปรแกรมส่งค่า “ปุ่มขวาถูกปล่อย” ให้แก่ระบบ • ลากวาง : กรณีปกติ - ทํา “เรียกเมนู” - ผู้ใช้เป่าลมเมื่อถึงคําว่า “คลิกซ้ายค้าง” - โปรแกรมส่งค่า “ปุ่มซ้ายถูกกด” ให้แก่ระบบ - ทํา “เลื่อนเมาส์” - ผู้ใช้เป่าลมเมื่อต้องการปล่อยเมาส์ - โปรแกรมส่งค่า “ปุ่มซ้ายถูกปล่อย” ให้แก่ระบบ