MATLAB OCR 7-Segment Part5
Step 4 เชื่อมต่อ 7 Segment
ก็ตามชื่อนั่นแหละครับ ตัวเลข 7 Segment 1 ตัว จะมีส่วนประกอบอยู่ 7 ส่วน เรียงลำดับจาก A ถึง F ตามนี้ครับซึ่งเราจะเห็นว่าแต่ละส่วนนั้น มันไม่ได้เชื่อมต่อกันเลย (ถ้ามันเชื่อมต่อกันแล้วจะเรียกเป็นส่วนได้ไงเนอะ ฮ่าๆๆ) ซึ่งตรงจุดนี้แหละครับ ที่มันทำให้เกิดปัญหา เพราะว่าโปรแกรมมันจะไม่รู้ว่า ทั้ง 7 ส่วนนี้มันคือตัวเลขตัวเดียวกันนะ เพราะไม่ใช่ว่าตัวเลขทุกตัวจะมองเห็นครบ 7 ส่วนเสมอ เช่น เลข 1 แสดงด้วย 2 ส่วนเท่านั้น คือ B กับ C
ดังนั้นเราจะมาทำให้แต่ละส่วนมันเชื่อมต่อกัน โดยใช้วิธีการทาง image processing ที่เรียกว่า "dilate" ซึ่งจะทำให้ภาพขยายตัวออกตามแนวโครงสร้างของมันครับ
แต่ปัญหาคือ แล้วเราจะขยายมันออกไปเท่าไรละ?
ถ้าเราจะให้โปรแกรมทำงานได้ถูกต้องกับภาพนี้ภาพเดียว มันก็ไม่เป็นปัญหาหรอกครับ เราก็แค่ค่อยๆ ลองปรับไปเรื่อยๆ จนเห็นมันเชื่อมต่อกันหมด แค่นั้นก็พอละ
แต่ถ้าเราจะให้โปรแกรมของเรามันทำงานได้กับทุกภาพ เราก็ต้องให้โปรแกรมมันคำนวณเอง ว่าจะปรับขยายไปเท่าไร ซึ่งในจุดนี้ เราจะใช้คำสั่ง bwlabel เข้ามาช่วยนับครับ
โดยคำสั่ง bwlabel จะคืนค่ามา 2 ค่าคือ label ของภาพ และ จำนวน label งั้นเรามาลองทดสอบกันดูนะครับว่าภาพ 7-segment ของเรามันมีกี่ label โดยพิมพ์คำสั่ง ต่อไปนี้ใน command window
จะเห็นว่าตัวเลขทั้ง 10 ตัวนี้ มีจำนวน label ถึง 49 label เลยนะครับ ซึ่งก็เท่ากับจำนวนส่วนของ 7-Segment ในแต่ละรูปรวมกันนั่นแหละ (ไม่เชื่อก็ลองนับดูนะ)
แต่ตาของคนเรา มองเห็นแค่ว่ามันเป็นตัวเลข 10 ตัวเท่านั้น ดังนั้น เราก็จะให้มันขยายตัวออกเรื่อยๆ จนกว่าจะเหลือจำนวน label เท่ากับที่ตาเรามองเห็น ซึ่งเราได้เขียนฟังก์ชันนับจำนวนตัวเลขเอาไว้แล้วในขั้นตอนก่อนหน้านี้ (Step 3)
ดังนั้น เราก็จะใช้คำตอบจาก step 3 นั่นแหละครับมาเป็นเงื่อนไข โดยเขียนโค้ดดังนี้
%Grow 7 segment for m=1:50 nbw = bwmorph(xbw,'dilate',m); [a,b] = bwlabel(nbw); if(b<=nb) break; end end nbw = bwmorph(nbw,'thin',m);
จากนั้นเราลอง imshow(nbw) ขึ้นมาดูนะครับ เราก็จะเห็นว่ามันเชื่อมต่อกันเรียบร้อยแล้ว
แค่นี้ก็เสร็จเรียบร้อยแล้วครับ
ขั้นตอนที่เหลือก็คือ กระบวนการเทรนนิ่ง ให้โปรแกรมรู้จำตัวเลขได้ ซึ่งก็มีหลายวิธี อย่างเช่น
- ใช้นิวรอล
https://github.com/subho406/Handwritten-Digit-Recognition
- ใช้ Hog feature classify
https://www.mathworks.com/help/vision/examples/digit-classification-using-hog-features.html
จริงๆ ก็อีกหลายวิธีแหละครับ หาดูได้ใน google เลย หรือไม่ก็รอดูบทความต่อๆ ไปที่ผมจะเขียนก็ได้ครับคิดว่าน่าจะมีเรื่อง การรู้จำตัวเลข และตัวอักษร รวมอยู่ด้วยนะ (ตอนนี้ยังไม่ได้เขียน แค่คิดไว้เฉยๆ ครับ ฮ่าๆๆๆ)
<< Part4 |
---|