ชื่อโครงงาน - prince of songkla...
TRANSCRIPT
ชื่อโครงงาน Motion Detection By Background Substraction
ผูจัดทํา นาย สนั่น งานวิวัฒนถาวร รหัสนักศึกษา 4610533
สาขาวิชา วิศวกรรมคอมพิวเตอร
ปการศึกษา 2551
___________________________________________________________________
อาจารยท่ีปรึกษาโครงงาน
..................................................
(ดร. นิคม สุวรรณวร)
อาจารยท่ีปรึกษาโครงงานรวม
..................................................
(ดร. ธเนศ เคารพาพงศ)
อาจารยท่ีปรึกษาโครงงานรวม
..................................................
(รศ.ดร. มนตรี กาญจนเดชะ)
โครงการน้ีเปนสวนหนึ่งของรายวิชา Computer Engineering Project I-II ตามหลักสูตรปริญญาวิศวกรรมศาสตรบัณฑิต สาขาวิศวกรรมศาสตรคอมพิวเตอร มหาวิทยาลัยสงขลานครินทร
..................................................
ผศ.ดร. พิชญา ตัณฑัยย
(หัวหนาภาควิชาวิศวกรรมคอมพิวเตอร)
หนังสือรับรองความเปนเอกลักษณ
ผูจัดทํารายงานฉบับนี้ขอรับรองวารายงานฉบับนี้เปนรายงานท่ีมีความเปนเอกลักษณ โดยท่ีผูจัดทํามิไดคัดลอกมาจากท่ีใดท่ีหนึ่ง เนื้อหาท้ังหมดถูกรวบรวมตามข้ันตอนการดําเนินงานในการจัดทําโครงงาน และหากมีการคัดลอกขอความหรอืสวนใดสวนหนึ่งมาจากแหลงท่ีมาหรือเอกสารอื่น ผูจัดทําก็ไดมีการอางองิถงึเอกสารตนฉบับเหลาน้ันไวอยางเหมาะสมแลวในสวนของบรรณานุกรม และขอรับรองวารายงานฉบับนี้เปนรายงานท่ีมิไดเสนอตอสถาบันใดมากอน
……………………………….
สนั่น งานวิวัฒนถาวร
ผูจัดทํา
17 ตุลาคม พ.ศ. 2551
Motion Detection By Background Substraction 1
สารบัญ
หนังสือรับรองความเปนเอกลักษณ .............................................................................................................. 1
สารบัญ .......................................................................................................................................................... 2
สารบัญรูปภาพ .............................................................................................................................................. 4
สารบัญตาราง ................................................................................................................................................ 6
กิตติกรรมประกาศ ................................................................................................................................... 7
บทคัดยอ .................................................................................................................................................. 8
บทท่ี 1 บทนํา ...................................................................................................................................... 10
1.1 ความเปนมา (Motivation) ....................................................................................................... 10
1.2 วัตถุประสงคของโครงงาน ...................................................................................................... 10
1.3 ขอบเขตของโครงงาน ............................................................................................................. 10
1.4 ข้ันตอนการทํางาน .................................................................................................................. 11
1.5 แผนการดําเนินงานของโครงงาน ............................................................................................ 11
1.6 ตารางการดําเนินงานของโครงงาน ......................................................................................... 12
1.7 เครื่องมือท่ีจําเปนสําหรับการพัฒนา ........................................................................................ 13
บทท่ี 2 ความรูพื้นฐาน ......................................................................................................................... 14
2.1 การเปรียบเทียบจุดสี ................................................................................................................ 14
2.2 การเปรียบเทียบเฟรม .............................................................................................................. 14
2.3 เทคนิคการหาภาพวัตถุท่ีเคลื่อนไหว ....................................................................................... 15
2.4 วิธีการหาผลตางของเฟรม ....................................................................................................... 17
2.5 วิธีการหาพื้นหลัง .................................................................................................................... 17
2.6 Motion Template .................................................................................................................... 18
Motion Detection By Background Substraction 2
2.7 วิธีการและอัลกอริธึมทางดาน Background Substraction ....................................................... 20
2.8 ขอแตกตางระหวางอลักอริธมึ ...................................................................................................... 23
2.9 การประมวลผลภาพกับรูปรางและโครงรางของภาพ (Morphological Image Processing) ......... 26
2.10 การขยายภาพ(Dilation) ........................................................................................................... 26
2.11 การยอภาพ(Erosion) ............................................................................................................... 27
2.12 Running Gaussian Average By Selectivity ............................................................................ 29
บทท่ี 3 การออกแบบระบบ ................................................................................................................. 30
3.1 โครงสรางของระบบ IP Camera ................................................................................................. 30
3.2 Flow Diagram ......................................................................................................................... 31
บทท่ี 4 รายละเอียดการทํางาน ............................................................................................................. 33
4.1 การทํางานของโปรแกรมตัดพืน้หลังเชิงเทคนิค ...................................................................... 33
4.2 ข้ันตอนวิธีการทํา Running Gaussian Average ....................................................................... 42
4.3 ข้ันตอนการทํา Erosion / Dilation ........................................................................................... 47
4.4 Running Gaussian Average By Selectivity ............................................................................ 50
บทท่ี 5 สรุปผลและขอเสนอแนะ ........................................................................................................ 56
สรุปผล ................................................................................................................................................... 56
ปญหาและแนวทางการแกไข ................................................................................................................. 56
บรรณานุกรม .............................................................................................................................................. 58
Motion Detection By Background Substraction 3
สารบัญรูปภาพ
รูปภาพ 2-1 ภาพตนฉบับและหลังจากตัด background ออก ....................................................................... 14
รูปภาพ 2-2 การเปรียบเทียบเฟรม .............................................................................................................. 15
รูปภาพ 2-3 เทคนิคการหาภาพวัตถุท่ีเคลื่อนไหว ....................................................................................... 16
รูปภาพ 2-4 Optical Flow ............................................................................................................................ 17
รูปภาพ 2-5 MHI ( Motion History Image ) ............................................................................................... 18
รูปภาพ 2-6 ภาพโครงรางท่ีทํา Motion Gradian ......................................................................................... 19
รูปภาพ 2-7 ภาพโครงรางท่ีทํา Motion Gradian หลังจากทํา Nomalize ...................................................... 19
รูปภาพ 2-8 Finding Regional Orientation ................................................................................................. 20
รูปภาพ 2-9 Mixture of Gaussian ............................................................................................................... 22
รูปภาพ 3-1 โครงสรางของระบบ IP Camera ............................................................................................ 30
รูปภาพ 3-2 Flow Diagram ......................................................................................................................... 32
รูปภาพ 4-1 ภาพประกอบการทํา frame buffer ........................................................................................... 37
รูปภาพ 4-2 ภาพตนฉบับ ............................................................................................................................ 41
รูปภาพ 4-3 ภาพวัตถ ุ................................................................................................................................... 41
รูปภาพ 4-4 ภาพพื้นหลัง ............................................................................................................................. 42
รูปภาพ 4-5 ภาพตนฉบับ ............................................................................................................................ 45
รูปภาพ 4-6 ภาพคาเฉลี่ย ............................................................................................................................. 45
รูปภาพ 4-7 ภาพคาความแปรปรวน ............................................................................................................ 46
รูปภาพ 4-8 ภาพผลลัพธ ............................................................................................................................. 46
รูปภาพ 4-9 ภาพผลลัพธ ............................................................................................................................. 49
รูปภาพ 4-10 ภาพหลังการทํา Erode/Dilate ................................................................................................ 49
Motion Detection By Background Substraction 4
รูปภาพ 4-11 ภาพตนฉบับ .......................................................................................................................... 53
รูปภาพ 4-12 K1=10 ................................................................................................................................... 54
รูปภาพ 4-13 K2 = 20 ................................................................................................................................ 54
รูปภาพ 4-14 K3 = 1 .................................................................................................................................. 55
Motion Detection By Background Substraction 5
สารบัญตาราง
ตาราง 1-1 ข้ันตอนการทํางาน ............................................................................................... 12
ตาราง 2-1 เปรยีบเทียบอัลกอริทึม .......................................................................................... 24
Motion Detection By Background Substraction 6
กิตติกรรมประกาศ 5
โครงงาน Motion Detection By Background Substraction สามารถดําเนินงานใหบรรลุวัตถุประสงคท่ีต้ังไว เนื่องจากไดรับความสนับสนุนและชวยเหลือในดานตางๆจากบุคคลตอไปนี้
อาจารยดร. นิคม สุวรรณวร ซึ่งเปนอาจารยท่ีปรึกษาโครงงาน ไดใหความรู ขอเสนอแนะ และชวยเหลือ ตลอดจนแนวคิดในการจัดทําโครงงาน
อาจารยธเนศ เคารพาพงศ อาจารยมนตรี กาญจนเดชะ ซึ่งเปนอาจารยท่ีปรึกษารวมโครงงาน ท่ีไดใหขอแนะนําและตรวจสอบโครงงาน
และขอขอบคุณคณาจารยภาควิชาวิศวกรรมคอมพิวเตอรทุกทานท่ีไดประสิทธิ์ประสาทวิชาความรู
ขอขอบคุณเจาหนาท่ีของวิศวกรรมคอมพิวเตอรทุกทาน ท่ีไดอํานวยความสะดวกในดานตางๆ
ขอขอบคุณเพ่ือน ๆ และรุนพ่ีทุกคน ท่ีใหความรวมมือในการทดสอบโครงงาน และเปนกําลังใจท่ีดีในการจัดทําโครงงานน้ีมาโดยตลอด
สุดทายน้ี ขอระลึกถึงพระคุณบิดามารดาที่ไดเลี้ยงดู อบรมส่ังสอนจนเติบใหญและยังคอยหวงใยเรื่อยมา
สนั่น งานววิัฒนถาวร
ผูจัดทํา
Motion Detection By Background Substraction 7
บทคัดยอ
ระบบ Motion Detection คือ ระบบท่ีมีไวสําหรับตรวจสอบการเคลื่อนไหวของวัตถุ เพือ่ใชในระบบการตรวจตรา จับการเคลื่อนไหว ซึง่ระบบดังกลาวนี้แบงไดเทคนิดใหญได 2 ประเภทคือ background subtraction เหมาะสําหรับกลองแบบอยูนิ่ง และ optical flow เหมาะสําหรับกลองแบบเคลื่อนท่ี ในโครงงานของขาพเจาไดเนนกรณีศึกษาท่ีตัวกลองอยูนิ่ง โดยท่ีขอมูล input ของโครงงานน้ีจะเปนจวิดีโอสตรีมมาจากกลอง IP Camera ท่ีติดอยูท่ัวทางเขาออกของมหาวิทยาลัย สงขลานครินทร นั่นคือเราจะตองตรวจสอบรถที่เขาออกในมหาวิทยาลัยขณะนั้นโดยใชข้ันตอนวิธีในการตัดพื้นหลัง โดยหาการคาเฉลี่ยของจุดสีของคลิปวิดีโอท้ังหมดเพ่ือไดพืน้หลังแลวนําไปตัดออกจากภาพตนฉบับเพื่อเหลือแคถาพวัตถุขณะน้ัน ทําให output ของงานจะเปนเฉพาะรถอยางเดียว ซึ่งโดยปกติแลวหนวยรักษาความปลอดภัยจะตองเกบ็คลิปวิดีโอเหลามาทําการดูยอนหลังทุกวินาที ทําใหเสียเวลาเปนอยางมาก ขาพเจาหวังเปนอยางยิ่งวาผลของโครงงานนี้จะมีสวนสําคัญตอการพัฒนาระบบรักษาความปลอดภัย
Motion Detection By Background Substraction 8
Abstract
Motion detection is a crutial step in the 3th generation of surveillance system. Two principal approches of detection techniques could be classified: background subtraction and optical flow, depending on the camera types (fixed or pan-tilt-zoom). We emphasize in this project on the background modeling which is the fundamental process in background subtraction method. We review some of the classical algorithms such as running average, guanssian and etc and propose an adaptive method that improves the quality of detection which suitable for surveillance context. The experimentation is demonstrated with the image sequences obtained from IP Cameras of the PSU’s security system. The computational time of the proposed algorithm is also tested which is executed in a specified real time. The encouraged results show some avantages that may be used in the real situation of surveillance circomstances.
Motion Detection By Background Substraction 9
บทท่ี 1 บทนํา
ความเปนมา (Motivation) 1.1
โครงการน้ีเปนโครงการเพ่ือรกัษาความปลอดภัยตอระบบการเขาออกของรถบริเวณทางเขาของมหาวิทยาลัยสงขลานครินทร ซึ่งจะมีการใชกลองวีดโีอวงจรปดถายเอาไว จุดประสงคเพื่อหาวาชวงเวลาใดท่ีมีรถเขามาบางกี่คัน จากอดีตท่ีตองมาตรวจสอบวีดีโอยอนหลังทุกๆคลิปของกลองท่ีถายเอาไว ซึ่งเสียเวลามากในกรณีท่ีรถวาง เราจะดูแค output ของโปรแกรมท่ีเปนไฟลคลิปท่ีมีเฉพาะสวนของรถวิ่งจากไฟลวิดีโอ ซึ่งจะลดเวลาท่ีจะตองดูยอนหลังไดเปนอยางมาก
ขอมูล input ของโปรแกรมนี้เปนไฟลวิดีโอสตรีม หลังจากเอามาเขากระบวนการคํานวณผลลัพธจะไดไฟล บิตแม็บ ท่ีตัดเอาพ้ืนหลังออกจะไดเปนภาพเคลื่อนไหวของวัตถุแตละตัว แตในกรณีท่ีวัตถุมาพรอมกันหลายๆวัตถุก็ตองสามารถแยกออกมาได
1.2 วัตถุประสงคของโครงงาน
นําเทคโนโลยีการวิเคราะหผลทางดาน Image Processing เพื่อตรวจจับการเคลื่อนไหวของวัตถุจากขอมูลภาพท่ีไดมาจากกลอง IP Camera ของระบบ Surveillance System ในมหาวิทยาลัยสงขลานครินทร
-
ในโครงงานจะทําการนําเอาความรูของ Image processing มาประยุกตการใชงานในดานประมวลผลภาพวิดีโอสตรีม เพื่อใชเปนตัวตรวจจับหาวัตถท่ีุเคลื่อนไหวในวิดีโอสตรีม และใชในการตัดสินใจเลือกอัลกอริธึมท่ีเหมาะสมสําหรับการตรวจหาวัตถุ รวมไปถึงการสรางโปรแกรมจําลอง ข้ึนมาเพ่ือใหผูใช ศึกษา Algorithm ใหเขาใจไดงายข้ึน
ขอบเขตของโครงงาน 1.3
สามารถนํา Algorithm ท่ีศึกษามาเปรียบเทียบคุณสมบัติกันเพื่อใหไดมาซ่ึง Algorithm ท่ีดีท่ีสุดและเหมาะสมท่ีสุด เพื่อนํามาประยุกตใชกับการสรางเปนโปรแกรมจําลอง เพื่อการศึกษาAlgorithm ตอไป
Motion Detection By Background Substraction 10
ข้ันตอนการทํางาน 1.4
1. ศึกษาอัลกอรธิึมท่ีใชสําหรับการตรวจจับการเคลื่อนไหว
2. พัฒนาโปรแกรมท่ีไดจากการปรับปรุงแนวคิด
3. นําโปรแกรมท่ีพัฒนาไปใชกับระบบความปลอดภยั IP Camera Network
4. ใชอัลกอริธึมทางการตรวจจบัวัตถุในภาพท่ีมีอยูมาทําการการปรับปรุงแนวคิดและออกแบบใหดีข้ึนสําหรับระบบ Surveillance System
แผนการดําเนินงานของโครงงาน 1.5
-ข้ันตอนท่ี 1 ศึกษาปญหาและแนวคิดของโครงงาน
ข้ันตอนท่ี 2 ทําการ Implement ทดสอบแนวคิด -
-ข้ันตอนท่ี 3 ทําการปรับปรุงแนวคิดและออกแบบใหดีข้ึน
ข้ันตอนท่ี 4 ทําการ Implement สวนการปรบัปรุงแนวคิด -
ข้ันตอนท่ี 5 Classified and Tracking สวน Objects หลายช้ินท่ีอยูเฟรมเดียวกัน -
ข้ันตอนท่ี 6 Implement สวนการ Classified and Tracking -
ข้ันตอนท่ี 7 Integrate กับระบบกลอง IP Camera และ Serverใหใชงานไดจริง -
ข้ันตอนท่ี 8 จัดทําสวนของ File Description ในแบบเอกสาร XML เชนเดียวกับ log file -
ข้ันตอนท่ี 9 ทดสอบ Implement ท้ังหมด -
Motion Detection By Background Substraction 11
ตารางการดําเนินงานของโครงงาน 1.6
มิถุนายน กรกฏาคม สิงหาคม กันยายน ตุลาคม พฤศจิกายน ธันวาคม มกราคม เดือน กุมภาพันธ
ข้ันตอนท่ี 1
ข้ันตอนท่ี 2
ข้ันตอนท่ี 3
ข้ันตอนท่ี 4
ข้ันตอนท่ี 5
ข้ันตอนท่ี 6
ข้ันตอนท่ี 7
ข้ันตอนท่ี 8
ข้ันตอนท่ี 9
ตาราง 1-1 ขั้นตอนการทํางาน
Motion Detection By Background Substraction 12
Motion Detection By Background Substraction 13
1.7 เครื่องมือท่ีจําเปนสําหรับการพัฒนา
1. ระบบปฏิบัติการ Microsoft Window
2. โปรแกรม Microsoft Visual C++ 6.0 สําหรับ Editor และ Complier
3. Library ของ OpenCV สําหรับการเรียกใชฟงกชันการทํางานตางๆ
4. PC 1 เครื่องสําหรับการเขียนโปรแกรม
5. กลอง IP Camera ท่ีติดอยูบริเวณทางเขาออกของมหาวิทยาลัย
บทท่ี 2 ความรูพ้ืนฐาน
ในบทนี้จะกลาวถึงความรูพื้นฐานท่ีจําเปนจะตองใชในการพัฒนาโครงงานนี้ โดยจะประกอบไปดวยหัวขอดังตอไปนี้ซึ่งน่ันคือ ความรูในดานการวางแผนการเคล่ือนท่ี Algorithm ตลอดจน เครื่องมือท่ีใชพัฒนาโปรแกรม
การเปรียบเทียบจุดสี 2.1
เนื่องจากภาพ bitmap จะประกอบไปดวยจุดเล็กๆท่ีเรียกวา pixel เราสามารถหาคาสีแตละจุดของภาพได ซ่ึงออกมาในรูปแบบ RGB (สีแดง สีเขียว สีน้ําเงิน) เราสามารถนํามาเปรียบเทียบกบัจุดสีอ่ืนๆไดโดยวิธีการวนลูปแกน x และ แกน y ของภาพ bitmap นั้นๆ
รูปภาพ 2-1 ภาพตนฉบับและหลังจากตัด background ออก
ท้ัง 2 รูปแสดงถึงการตัดสี background ออกโดยใชข้ันตอนวิธีเปรียบเทียบจุดสี
การเปรียบเทียบเฟรม 2.2
เนื่องจากคลิปวิดีโอประกอบดวย bitmap หลายๆภาพมาแสดงผลเรียงกัน เราเรียก bitmap แตละตัววา เฟรม (frame) เราจําเปนจะตองเปรียบเทียบเฟรมหลายเฟรมเขาดวยกันเพื่อหาวาชวงเวลาใดท่ีมีรถเขามาโดยวิธีตามกรณีดังนี ้
ถาเฟรมปจจุบัน ( current frame ) เหมือนกับเฟรมถัดไป (next frame) ใหคิดวาไมมีรถเขาออก
1.
Motion Detection By Background Substraction 14
2. ถาเฟรมปจจบัุน ( current frame ) ตางกับเฟรมถัดไป (next frame) ใหคิดวามีรถเขาออก และตรวจจับคาจุดสีของเฟรมถัดไป เพื่อหาภาพท่ีเคล่ือนไหวโดยตัด background ออก
2.1 นําภาพแตละเฟรมท่ีเคลื่อนไหวและตัด background ออกมาทําการลด noise เพื่อม ี คุณภาพดีข้ึน 2.2 นําภาพจากหัวขอ 2.1 มาบันทึกเปนไฟลท้ังหมด
รูปภาพ 2-2 การเปรียบเทียบเฟรม
เทคนิคการหาภาพวัตถุที่เคลื่อนไหว 2.3
Background Subtraction
เปนข้ันตอนวิธตัีดพื้นหลังออกจากเฟรมวิดโีอ มีหลักการคือ เมื่อภาพของเฟรมหนึ่งๆ มาลบกับพ้ืนหลังจะไดเปน object นั้นๆ ดังสมการ
O = I – B
เมื่อ O คือ Object
I คือ ภาพของเฟรมหน่ึงๆ
B คือ ภาพพื้นหลัง
- สําหรับข้ันตอนการประมวลผลจําเปนจะตองทําใหภาพเปน Gray Scale (ขาวดํา) เพื่อลดหนวยความจําท่ีใช เพราะ Gray Scale 1 จุดใช 8 bit ในขณะท่ี RGB ใช 24 bit
รูปข้ันตอนการประมวลผลโดยวิธี Background Substracttion
Motion Detection By Background Substraction 15
รูปภาพ 2-3 เทคนิคการหาภาพวัตถุที่เคลื่อนไหว
( X,Y ) คือ คาจุดสีแบบ Gray Scale ของภาพท่ีจุด X ,Y
N คือ จํานวนเฟรมท้ังหมดของ buffer ท่ีนํามาจองหนวยความจําเอาไว
นํามาเขาสมการไดดังน้ี
นั่นคือ ผลรวมของคาสี Gray Scale ท่ีจุด X,Y ของภาพ หารดวยจํานวนของเฟรมท้ังหมดของ buffer จะไดคา background เฉลี่ยท้ังหมดโดยตองกําหนดให background คือสวนของภาพในเฟรมท่ีไมเหมือนกัน
Motion Detection By Background Substraction 16
Optical Flow
เปนวิธีการหาเว็กเตอรลพัธของสวนท่ีภาพเคลื่อนไหวไปแลว ดังรูป
รูปภาพ 2-4 Optical Flow
รูปภาพจะมี Object ท่ีเคลื่อนไหวไปมาเราสามารถนํามาหาเวคเตอรลัพธของการเคลื่อนท่ีของ Object นั้ไดโดยตองรูพิกัดท่ี จุด X ,Y ของเฟรมเริ่มตนและเฟรมสุดทาย
วิธีการหาผลตางของเฟรม | framei – framei‐1 | Th
2.4
framei คือ เฟรมปจจุบัน framei-1 คือ เฟรมกอนหนา Th คือ คา threshold
วิธีนี้จะสมมุติให background ท่ีประมาณคาไดเปนเฟรมกอนหนาเพ่ืองายตอการประมวลผล และคาความเร็วของวัตถุกับจํานวนเฟรมตอวนิาที(FPS) ก็สงผลตอวิธีนี้เชนกัน สวนวิธีนี้ไวตอคา Threshold เปนอยางมาก
วิธีการหาพ้ืนหลัง 2.5
- นิยมใชวิธีการหา background คาเฉลี่ย( average ) หรือ ฐานนิยม( median ) - วิธีนี้คอนขางจะเร็วแตใช memory คอนขางเยอะ เนื่องจากตองการจอง memory เปน
จํานวนเฟรม x ขนาดภาพ
Motion Detection By Background Substraction 17
2.6 Motion Template
เปนการทํางานเก่ียวกับการออกแบบสรางการเคลื่อนไหวจําลองตอเนื่องกันจากจุดท่ีเกิดการเคลื่อนไหว วาเกิดข้ึนอยางไร ทิศทางอยางไร ซึ่งอลักอริธึมเหลาน้ีถูกเขียนข้ึนโดย Mr. Davis and Bobick และ Bradski and Davis สวนการทํางานบนรูปภาพของ output ของเฟรม หรือ การหาผลตางของ background หรือวิธีการทํา Image Seqmentation ท้ังหลายเหลาน้ันจะทําในรูปแบบภาพ Grayscale นั่นคือ 1 channel นั้นเอง
MHI ( Motion History Image )
จากรูปทางดานซายแสดงภาพโครงรางของวตัถุ( foreground silhouette)ของวัตถุท่ีเคลื่อนไหวในภาพ หรอืคน ซึ่งวิธีท่ีไดมาของภาพโครงรางของวัตถุมาจากเทคนิคของการตัดภาพพ้ืนหลังในรูปแบบตางๆ ซึ่งวิธีการตัดพืน้หลังสําหรับคนหรือการเคลื่อนไหวของวัตถ ุ จะทําโดยการคัดลอกภาพพื้นหลังท่ีมีการอัพเดทคาลาสุดใน Motion History Image ซึ่งจะทําการสรางเลเยอรประวัติ ( layered history) ของภาพสุดทาย โดยปกติแลวคาลาสุดจะเปนแคคา timestamp ของเวลาท่ีผานไปซ่ึงแสดงผลในหนวย millisecond
รูปทางขวาแสดงผลลัพธท่ีเรียกวา MHI ( Motion History Image ) ซึ่งบอกถึงระดับของพิกเซล หรอื threshode ของเวลาท่ีเปลี่ยนแปลง
รูปภาพ 2-5 MHI ( Motion History Image )
การเคลื่อนไหวท่ีอัพเดทลาสุดจะมีคาสูงสุด และการเคลื่อนไหวกอนหนาจะมีคานอยไปเรื่อยๆ ซึ่งกระบวนการของ Motion Template จะกลาวถัดไป
Motion Template Processing
A) Updating MHI Images
Motion Detection By Background Substraction 18
ปกติแลวเราจะทํางานกับคาจุดทศนิยมของรูปภาพต้ังแตเราอานคาผลตางของเวลาในหนวย millisecond จากการเริ่มของโปรแกรม และทําการคํานวณคาของภาพโครงรางของวัตถุลาสุดท่ีจะนํามาหาทิศทางการเคลื่อนท่ี
B) Making Motion Gradient Image
เปนการสรางทิศทางการเคลื่อนไหวของภาพโครงรางท้ังหมด แตเนื่องจากทิศทางท่ีไดจากการคํานวณจะคาคลาดเคลื่อนไปบาง ดังน้ันจึงตองมีการทํา Noramlize
รูปภาพ 2-6 ภาพโครงรางที่ทํา Motion Gradian
รูปภาพ 2-7 ภาพโครงรางที่ทํา Motion Gradian หลังจากทํา Nomalize
C) Finding Regional Orientation
ปกติแลวไมจําเปนตองคํานวณคามุมของการเคลื่อนท่ีท้ังหมด ดังน้ันการกําหนดพื้นท่ีของการเคลื่อนไหวจะกระทําโดยเคลื่อนท่ีช้ินสวนของวัตถุท้ังหมด ซึ่งทุกครั้งท่ีภาพ MHI ถูกสรางข้ึน ภาพโครงรางลาสุดจําเปนตองใชคาสูงสุดหลายๆตัวในการสแกน แลวเขาสู contour ของภาพโครงรางเพือ่ชวยในการหาพื้นท่ีของการเคลื่อนไหว เชน time stamp ลาสุด อัลกอริธึมสําหรับสราง mask ไปยังพื้นท่ี segment motion เปนดังน้ี
สแกนรูป MHI จนกระท่ังเจอภาพโครงรางลาสุด(รูป a) 1.
2. สํารวจไปยังพื้นท่ีของภาพโครงรางลาสุดแลวทําการลบจุดท่ีมี step ของ motion history เมื่อเจอ step ท่ีดีท่ีสุด จะทําเครื่องหมายไวลงใน stack ถาขนาดของท่ีใสเพียงพอแลวก็ zero out พื้นท่ี (รูป b)
Motion Detection By Background Substraction 19
3. เพิ่มเติม
- บันทึก ตําแนงท่ีนอยท่ีสุดแลวทําการ downfill (รูป c)
- แบง floodfill up จากการตรวจสอบตําแหนง (รูป d)
- รวมสวนยอยโดย logic AND สําหรับ upfill และ downfill
4. จัดเก็บสวนท่ีตรวจเจอพ้ืนท่ี segmented motion ไปสู mask
ตอสวนของการสํารวจจนกระท่ังหมดภาพโครงรางท้ังหมด 5.
เพิ่มเติม ไปยงัขอ 1 จนกระท่ังเจอพื้นท่ีภาพโครงรางท้ังหมด 6.
รูปภาพ 2-8 Finding Regional Orientation
วิธีการและอัลกอริธึมทางดาน Background Substraction 2.7
ปญหาที่พบ 1. ดานภาพ
- วิถีเอยีงของภาพ - กลุมควัน และ หมอก
2. การเคลื่อนไหวของภาพ - มุมกลอง
Motion Detection By Background Substraction 20
- วัตถุพื้นหลังท่ีมีความถี่สูง เชน กิ่งไม คลื่นทะเล 3. การเปลี่ยนแปลงของภาพพ้ืนหลัง
- การจอดรถ วิธีที่ 1 : running average โดยใชสมการ
Bi 1 α * Fi 1 – α * Bi Bi+1 คือ background ของเฟรมถัดไป Bi คือ background ของเฟรมปจจุบัน α คือ คาสัมประสิทธิ์ ปกติมีคา 0.05 Fi คือ คาจุดสีของเฟรมปจจบัุน เนื่องจากวิธีนี้เปนวิธีงายท่ีสุดของการคํานวณโดยท่ีไมจําเปนตองใชหนวยความจํา เพียงแคทดคาตัวแปรตางๆเขาสูสมการแลววนลูปไปก็ได background ของเฟรมถัดไปมาใชได วิธีที่ 2 : running average แบบ selectivity หลักการ
- แตละเฟรมใหมท่ีเขามา แตละจุดสีจะตองมีการจําแนกเปน foreground หรอื background
- สิ่งท่ีเปนการจําแนกของ background model i. ถาจุดสีจําแนกเปน foreground จะถูกตัดท้ิงใน backgroung model
สมการแนวคิดของ ีนี ้วิธ background
i 1 y 1 – α * Bt x,y กรณีท่ี 1 ถา Ft เปน
B x,y α * Ft x, foreground Bi 1 x,y Bi x,y
กรณีท่ี 2 ถา Ft เปน
วิธีนี้ใหคลายกับวิธีแรกเพียงแตมีการแยกพื้นหลัง (background) กับ วัตถุ (foreground) เพื่อแยกประมวลผลแตละสมการ เห็นไดวาเม่ือ Ft เปน foreground คาของ background ของเฟรม ถัดไปจะเทากับเฟรมกอนหนา วิธีที่ 3 : ใชวิธี Running Gaussian Average หลักการ
ให μ เปนคาการก ปร นของ Gaussian ระ อง Gaussian และ เปนคาความแปร วµt 1 αF 1 – α µt σ 2t 1 α Ft –µt 2 1 – α σ 2t
จายข σ-
Motion Detection By Background Substraction 21
วิธีที่ 4 : ใชวิธี Mixture of Gaussian หลักการ -ใหคา ωi มีการเปลี่ยนแปลงตลอดเวลาทุกๆ เฟรมใหม - ในทุกๆเฟรมใหมคาของ Gaussian จะตรงกับคาปจจุบันทําใหคา μ,σ มีการเปลี่ยนแปลงตลอด - วิธีนี้จะตองหาท้ังคา background และ foreground เพื่อหาคาความแปรปรวน - จําเปนจะใชคาสถิติมาเปรียบเทียบ
รูปภาพ 2-9 Mixture of Gaussian
วิธีท่ี 5 : Kernel Density Estimator
- หาคา PDF (x)ใชข้ันตอนวิธี background PDF ซึ่งนํามาจาก histogram ท่ีมีคาจุดสีของมากท่ีสุดของเฟรมลาสุด
- ถา PDF (x) > Th , ท่ี x pixel จะเปน background - มีปญหาดานการจอง memory ( n * size(frame))
วิธีที่ 6 : Mean-shift Base Estimation หลักการ
- ใชวิธี หา gradian เพื่อหาคาฐานนิยมจากการแปรปรวนของขอมูล ตามสมการ
m (x) คือ คา mean shift vectori x คือ คาจุดใดๆบนภาพ
Motion Detection By Background Substraction 22
xi คือ เปนเซ็ตของจุดขอมูล h คือ คาของ bandwidth ท่ีไดรับวิเคราะหมาแลว g(u) คือ อนุพันธอันดับ 1 ของฟงกชันรวม k(u) โดยท่ี k(u) คือ kernel profile
ปญหาของวิธีนี้
- การทํางานของสมการน้ี (วนรอป) จะชา - มีการจอง memory : (n * size(frame))
วิธีที่ 7 : Eigenbackground หลักการ
1. จํานวนเฟรมจะถูกจัดเรียงใหมในรูปของแมทริกซ A
2. หาคา covariance metrix โดย
C = AAT
หาคา eigenvalue L และ eigenvector metrix Ф จาก C 3. 4. เก็บคา eigen vector metrix M เอาไว 5. ขณะท่ีภาพใหมเขามา ( / )จะมีการทํา sub-space กับคา M แลวเก็บเปนคา /’ 6. หาผลตางของ / - /’ จะไดคา foreground object
ขอไดเปรียบของวิธีนี้คือมีความเท่ียงตรงสูง แตใชข้ันตอนการคํานวณสูง และใชหนวยความจําสําหรับเก็บคาจํานวนเฟรมท้ังหมด
2.8 ขอแตกตางระหวางอัลกอริธึม
เห็นไดวาแตละวิธีการแตละชนิดมีขอไดเปรียบหรือเสียเปรยีบอยางเห็นไดชัด โดยปกติจะเปนปญหาทางดานการใชหนวยความจํามาก เพราะจําเปนตองใชในการเก็บคายอนหลังเพ่ือเปรียบเทียบ
อัลกอริธึม ขอเปรียบเทียบ
Motion Detection By Background Substraction 23
ความเท่ียงตรง การใชหนวยความจํา ความซับซอน
running average
selectivity Mixture of Gaussian
Kernel Density Estimator
Mean-shift Estimation
Eigenbackground
นอย ไมใช งาย
นอย ไมใช งาย
ปานกลาง ใชการเก็บแบบสถิติ -
- - ใชมาก
สูง ใชมาก ยาก
สูง ใชเฉพาะสราง metrix ยาก
ตาราง 2-1 เปรียบเทียบอัลกอริทึม
Running Gaussian Average Model
เริ่มตน model อันนี้เปน model ท่ีมาจากการหาคา Gaussian Probably Density (pdf) ในคาของ pixel สุดทายของภาพ ในแตละ pixel ใหคาเฉลี่ยของภาพ μt และ คาความแปรปรวน σ ในแตละ channel ของจุดสี ซึ่งการหาคาเฉลี่ยทําไดจากการนําผลรวมของคาเฟรมท้ังหมดหารดวยจาํนวนภาพ
และ คาความแปรปรวนหาไดจาก คา
แตในความเปนจริงการหาคาเหลาน้ีไมสามารถนํามาใชจริงในรูปแบบงาน video streamไดเนื่องจากเราไมทราบคาของ frame ท้ังหมดเพ่ือแทนคาในสมการน้ีได จึงไดมีการคิดสมการเพ่ือใชกับ
video stream จริงไดโดย
ใหเปนสมการท่ี 1 µt 1 α Ft 1 – α µt σ 2t 1 α Ft –µt 2 1 – α σ 2t ใหเปนสมการท่ี 2
Motion Detection By Background Substraction 24
Fout | Ft ‐ µt | Th ใหเปนสมการท่ี 3
สมการท่ี 1 เปนการหาคาเฉลี่ยของภาพ ( μ ) ณ เวลาปจจบัุน โดยม ี
Ft คือ คา Input Image
μt คือ คาเฉลี่ยของภาพ ตัวกอนหนา มีคาเริม่ตนเปน 0
μt+1 คือ คา คาเฉลี่ยของภาพ ตัวปจจุบัน α คือ คาสัมประสิทธิ์
สมการท่ี 2 เปนการหาคาความแปรปรวนของภาพ ( σ ) ณ เวลาปจจุบัน โดยม ี
Ft คือ คา Input Image
μt คือ คาเฉลี่ยของภาพ
σ t คือ คา ความแปรปรวนของภาพ ตัวกอนหนา มีคาเริ่มตนเปน 0
σ t+1 คือ คา ความแปรปรวนของภาพตัวปจจุบัน α คือ คาสัมประสิทธิ์
สมการท่ี 3 เปนการหาคาภาพผลลัพธ ( Fout )
Ft คือ คา Input Image
μt คือ คาเฉลี่ยของภาพ
Th คือ คาของ threshold แทนดวย k * σ t
Fout คา ภาพผลลัพธมีคา เปน 0 หรือ 1 ( จุดสีดําหรือขาว )
Motion Detection By Background Substraction 25
2.9 การประมวลผลภาพกับรูปรางและโครงรางของภาพ
(Morphological Image Processing)
Morphological Image Processing เปนการประมวลผลภาพโดยการเปล่ียนแปลงลักษณะรูปรางหรอืโครงสรางของภาพ โอเปอเรช่ันพืน้ฐานโดยท่ัวไปไดแก การ Dilation Erosion และ Skeleton โดยการ Dilation คือการขยายภาพโดยมีสัดสวนเทากันท่ัวท้ังภาพ(Uniform) การ Erosion คือ
การยอภาพ สวนการทํา Skeleton เปนการหาโครงสรางหลักของวัตถ ุนอกจากโอเปอเรช่ันพ้ืนฐานดังท่ีไดกลาวขางตนแลวยังมีโอเปอเรชั่นอ่ืน ๆ อีกท่ีไดแกการ Opening และ Closing เปนตน
การขยายภาพ(Dilation) 2.10
การขยายภาพในท่ีนี้จะพิจารณาสําหรับขอมูลภาพท่ีเปนแบบไบนารีโดยการใชเทคนิคการ Hit และ Miss ตามท่ีไดกลาวไว การขยายภาพจะทําไดโดยกําหนดTemplate (ซึ่งสามารถสรางไดจาก * และ 1 โดยมีจุดเริ่มตนท่ีกําหนดโดยวงกลม) และนํา Template นี้สแกนไปบนขอมูลภาพตามลําดับตลอดท้ังภาพซึ่งในขณะท่ีจุดเริ่ม (Origin) ของ Template ตรงกับตําแหนงขอมูลภาพท่ีพิกเซลมีคาเทากับ 1 นั้นก็จะทําการยูเนียน Template นี้เขากับขอมูลภาพดังตัวอยาง
ขอมูลภาพ Template
1111111****1111111****1*11111****1111111*****11*11*****1***1*******1**1******
11*1
ขอมูลภาพและTemplate
ขอมูลแถวแรกของภาพเปนดังน้ี
*1**1******
ขอมูลแถวแรกของภาพ
เมื่อทําการยูเนียนกับ Template ณ. ตําแหนงขอมูลภาพท่ีพิกเซลเทากับ 1 ในแถวแรก
Motion Detection By Background Substraction 26
*1*11**********1******
ยูเนียนกับ Template ณ. ตําแหนงขอมูลภาพที่พิกเซลเทากับ 1 ในแถวแรก
และเม่ือยูเนียนกับ Template เขากับพิกเซลท่ีมีคาเทากับ 1 ณ. ตําแหนงพิกเซลท่ีสองในแถวแรก
11*11**********1******
ยูเนียนกับ Template เขากับพิกเซลที่มีคาเทากับ 1 ณ. ตําแหนงพิกเซลที่สองในแถวแรก
และเม่ือทําการยูเนียนท้ังภาพจะไดภาพสุดทายดังน้ี
11111111****11111111****11111111****11111111****11111111****1111111******11*11********1**1******
ยูเนียนท้ังภาพ
การยอภาพ(Erosion) 2.11
การยอภาพเปนลักษณะของการลบขอมูลภาพบริเวณขอบของภาพ การยอภาพสามารถทําไดมีลักษณะคลายกับการขยายภาพโดยการสราง Template ข้ึนแลวนํา Template ไปสแกนตามขอมูลภาพ
สําหรับทุกตําแหนงท่ีเลื่อน Template ไปบนภาพก็จะมีการเปรียบเทียบกับขอมูลภาพ ถาขอมูลภาพมีคาเหมือนกับ Template จะทําการกําหนดคาขอมูลภาพในตําแหนงท่ีตรงกับจุดเริ่มตน(Origin)ของ Template ถูกกําหนดใหมีคาเทากับ 1
ขอมูลภาพ Template
Motion Detection By Background Substraction 27
Motion Detection By Background Substraction 2828
* 11
1111111****1111111****1*11111****1111111****11*11*****1***1*******1**1******
1*
ขอมูลภาพและTemplate
ผลท่ีไดจะมีเพียง 3 ตําแหนงเทาน้ันท่ีมีคาเหมือนกับ Template
ตําแหนงที่มีคาเหมือนกับ Template
ผลท่ีไดตาม ขอมูลภาพท่ีผานการทําโอเปอเรช่ันกับ Template แลวพบวามีขอมูลของภาพเพียง
3 ตําแหนงเทาน้ันท่ีเหมือนกับ Template ถามีการเปลี่ยน Template เปน 1 ผลท่ีไดมีลักษณะ
ดังน้ีคือ 111
*111111*******1111******11111******1**1**************************************
ขอมูลภาพที่ผานการทําโอเปอเรชั่นกับ Template
*************1********************1**1***************************************
ผลท่ีไดตามรูปท่ี 5-13 จะเห็นวาจะเปนการยอขนาดของภาพแตสามารถยอขนาดไดนอยกวา
เม่ือใช Template ซึ่งไดผลเปนท่ีนายอมรับมากกวาดังน้ันในการเลือก Template เปนสิ่งท่ีสําคัญ
อยางหน่ึงในการยอและขยายภาพ 11*1
2.12 Running Gaussian Average By Selectivity
เปนการเลือกใชอัลกอรธิึม Running Gaussian Average ของในแตละกรณีท่ีไดกําหนดไว
กรณีท่ี 1 เมื่อภาพเคลื่อนไหวท่ีเปน output > 90% ของพ้ืนท่ีภาพท้ังหมดใหใชคาภาพเฉลี่ยแบบ
ปกติ
กรณีท่ี 2 เมื่อภาพเคลื่อนไหวท่ีเปน output < 1% ของพ้ืนท่ีภาพท้ังหมดใหใชคาภาพเฉลี่ยแบบตัด
วัตถุออกไป
เมื่อทําผลท่ีไดเสร็จแลวนําไปแจกแจง output ตามคาของ k
29Motion Detection By Background Substraction
บทท่ี 3 การออกแบบระบบ
3.1 โครงสรางของระบบ IP Camera
รูปภาพ 3-1 โครงสรางของระบบ IP Camera
คือ กลองวีดโีอท่ีตรวจจับรถทางเขาตัวท่ี 1...k IP1 … IPk
คือ คอมพิวเตอรท่ีนํามาประมวลผลตัวท่ี 1...k PC1 …PCk
คือ algorithm ท่ีใชในการประมวลผล A
คือ server ท่ีเก็บขอมูลเฉพาะวิดีโอท่ีประมวลผลมาจาก PC แลว Management Server Database
ขอมูล input ของโปรแกรมนี้เปนไฟลวิดีโอสตรีมซึ่งรับคามาจาก IP Camera (IP1…IPk) ผานเครือขายอินเตอรเน็ต สงขอมูลเขาสู PC หลังจากน้ันเอามาเขากระบวนการคํานวณผลลัพธโดยใช
Motion Detection By Background Substraction 30
เนื่องจากข้ันตอนประมวลผล algorithm จะใชทรัพยากรเปนอยางสูงจึงจําเปนจะตองแบงการทํางานใหกับ PC อื่นๆ
ในสวนของอัลกอริธึมเราจําเปนจะตองทดสอบแตละวิธีใหละเอียดเพื่อใหเราทําการ Implement จากอัลกอริธึมท่ีเราไดเลือกแลวทําการปรับปรุงใหดีข้ึน
เมื่อเสร็จสิ้นการประมวลผล PC แตละตัวจะสง output เขาสู server ทําการจัดเก็บเปนฐานขอมูล ทําให เราจะดูแค output ของโปรแกรมท่ีเปนไฟล clip ท่ีมีเฉพาะสวนของรถวิง่จากไฟลวิดีโอ ซึ่งจะลดเวลาท่ีจะตองดูยอนหลงัและลดทรัพยากรจัดเก็บไดเปนอยางมาก
3.2 Flow Diagram
จากการออกแบบสรุปไดเปน Flow Diagram ของโปรแกรมดังน้ี
ข้ันตอนการทํางานของโปรแกรม เมือ่โปรแกรมเริ่มทํางานจะมีการ Initial System ซึ่งประกาศตัวแปรท่ีจะใชในโปรแกรม กําหนดคาเริ่มตนใหแกตัวแปรตางๆ ตามโคดท่ีจะนําเสนอตอไป หลังจากท่ีผานการ initial System แลว โปรแกรมจะทําการติดตอกับ sever เพื่อติดตอไปยัง IP camera ดวยหมายเลข IP ของกลอง หลังจากน้ันโปรแกรมจะทําการตรวจสอบเงื่อนไขวาตองการจะหยุดการประมวลผลโปรแกรมตอไปหรือไม ถาตองการก็จะหยุดการทํางานของโปรแกรม แตถาไมตองการโปรแกรมก็จะ ทํางานตอไป โดยเริ่มจาก capture ภาพจากท่ีกลองบันทึกไดมาเปนภาพแบบไฟล bitmap เนื่องจาก input ขอมูลเปนวิดีโอสตรีมจําเปนจะตองบันทึกกอนแลวจงึจะนํามาใช จากนั้นทําการจะทําการลดขนาดของภาพ และแปลงเปนภาพแบบขาวเทา เพื่อการคํานวณท่ีรวดเร็วข้ึน โปรแกรมจะนาํภาพท่ีไดจากการลดขนาดและแปลงเปนภาพแบบ Grayscale แลวมาทําการ ประมวลผลคํานวณหาผลลัพธตามอัลกอริทึมท่ีตองการซ่ึงโครงงานน้ีท่ีนี้คือ การทําBackground Subtraction ดวย Running Average อัลกอรทึิม หลังจากท่ีคํานวณหาผลลัพธของพ้ืนหลังดวยอัลกอริทึมแลวก็นํามาหาวัตถุพรอมท้ังจําลองรูปแบบการเคลื่อนไหวของภาพวัตถุโครงรางดวยวิธี Simulate image with MHI เพื่อแสดงผลภาพเคาโครงของวัตถุได
Motion Detection By Background Substraction 31
รูปภาพ 3-2 Flow Diagram การทํางานของโปรแกรม
Motion Detection By Background Substraction 32
บทท่ี 4 รายละเอียดการทํางาน
การทํางานของโปรแกรมตัดพ้ืนหลังเชิงเทคนิค 4.1
1. Initial System
1.1 ทําการสราง Form ข้ึนมา
ทําในสวน method onInitDialog ของ CDialog
CDialog::OnInitDialog(); 1.2 กําหนดตัวแปรของระบบ
// define constant string
#define WCV_NAME "LOADIMAGE"
#define WCV_BKG "BACKGROUND"
#define WCV_OBJ "OBJECT"
#define WCV_FILE_NAME "file1.bmp"
#define WCV_IP "192.168.17.131"
// Initial system variable
IplImage *gray_img, *bkg_img, *acc_img, *obj_img, *result_img;
IplImage *rsize_img,*rsize_acc ,*rsize_bkg;
// Set system variable value
rsize_img = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 3 );
rsize_acc = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 3 );
rsize_bkg = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 3 );
Motion Detection By Background Substraction 33
gray_img = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 1 );
acc_img = cvCreateImage( cvSize(320, 240), IPL_DEPTH_32F, 1 );
obj_img = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 1 );
bkg_img = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 1 );
result_img= cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 3 );
ทําการสรางตัวแปรของภาพ พื้นหลัง วัตถุ และ ภาพแสดงผล ในขนาดความกวาง 320 ความสูง 240 พิกเซล และกําหนดขนาดจํานวน bit และ จํานวน channel
1.3 สรางหนาตางแสดงผล
// Create background and object windows
cvNamedWindow(WCV_BKG);
cvNamedWindow(WCV_OBJ);
สรางสวนแสดงผลของพ้ืนหลังและวัตถุ
2. Connect to Server Program
m_Xmpeg.Connect(WCV_IP);
เริ่มการเช่ือมตอไปยัง Server program โดยใชคา WCV_IP คือ 192.168.17.131
3. Capturing Image Stream
IplImage *img;
m_Xmpeg.SaveImage(WCV_FILE_NAME);
img = cvLoadImage(WCV_FILE_NAME);
เนื่องจาก input ของโปรแกรมเปน stream ดังน้ันเราตองจับภาพเปน realtime เพื่อทําหารโหลดขอมูลภาพมาใชในแตละเฟรมใชหลักการเดียวกับบัฟเฟอร
Motion Detection By Background Substraction 34
4. Resize and Convert to Gray
cvResize(img, rsize_img);
cvReleaseImage(&img);
cvCvtColor( rsize_img, gray_img, CV_BGR2GRAY );
เพื่อการคํานวณภาพท่ีรวดเรว็ยิง่ข้ึนจําเปนตองใชภาพท่ี resize แบบ Gray Scale
5. Calculating with Algorithm
นําคาของภาพท่ี resize แลวมาคํานวนโดยใชวิธี Running Average เพื่อหาคาของพ้ืนหลังเพ่ือนําไปใชในการจําลองระบบ
cvRunningAvg(*img, *acc, alpha, NULL);
cvConvertScale(*acc, *bkg, 1.0, 0.0);
โดยท่ี
alpha = 0.005
acc คือ คาท่ีทดเอาไวเพื่อนํามาใสคาใน bkg พรอมท้ังเปลี่ยนขนาด 1 เทา
6. Silmulate motion with MHI
เปนการจําลองระบบดวยวิธี MHI (Motion History Image) ใน function
update_mhi( rsize_img,bkg_img, result_img, 30 );
โดยท่ี
คือ คา รูปภาพ capture ท่ีทําการ resize แลว rsize_img
bkg_img คือ คาพ้ืนหลังของรูปท่ีทําการคํานวณจาก algorithm แลว
result_img คือ คาของภาพท่ีตองการใหแสดงผลในหนาตาง object
100 คือ คา threshold ท่ีกําหนดไว 1) Initial Variable
// numble of cyclic frame
Motion Detection By Background Substraction 35
const int N = 4;
// ring image buffer
IplImage **buf = 0;
IplImage* silh = 0; //คาของรูปจําลอง output object
CvSeq* seq; //คา segmentation mask
IplImage *mhi = 0; // MHI คา MHI
IplImage *orient = 0; // orientation คามุมองศา
IplImage *mask = 0; // valid orientation mask คา mask ของมุมองศา
IplImage *segmask = 0; // motion segmentation map คา segmentation mask
CvMemStorage* storage = 0; // temporary storage คาหนวยเก็บขอมูลช่ัวคราว 2) Allocating buffer image
buf = (IplImage**)malloc(N*sizeof(buf[0]));
สราง array ของตัวแปร IplImage ตามจํานวน N x buf ตัวแรก
memset( buf, 0, N*sizeof(buf[0]));
จองหนวยความจําใหแก buf จํานวน N x buf ตัวแรก
3) Create buffering cyclic
for( i = 0; i < N; i++ ) {
cvReleaseImage( &buf[i] );
buf[i] = cvCreateImage( size, IPL_DEPTH_8U, 1 );
cvZero( buf[i] );
}
Motion Detection By Background Substraction 36
สราง buffer image N (N = 4) ตัวท่ีมีการ update ตลอดเวลา พรอมท้ังใหคาเริ่มตนเปน 0 จากรูป
รูปภาพ 4-1 ภาพประกอบการทํา frame buffer
Create MHI and Segmentation variable
// create MHI image with 32 bit color 1 channel
mhi = cvCreateImage( size, IPL_DEPTH_32F, 1 );
cvZero( mhi ); // clear MHI at the beginning
orient = cvCreateImage( size, IPL_DEPTH_32F, 1 );
segmask = cvCreateImage( size, IPL_DEPTH_32F, 1 );
Motion Detection By Background Substraction 37
mask = cvCreateImage( size, IPL_DEPTH_8U, 1 );
4) Change image to gray scale buffer
cvCvtColor( img, buf[last], CV_BGR2GRAY ); // convert frame to grayscale
5) Find object and Update MHI
1 cvAbsDiff( buf[idx1], bkg, silh ); // get difference between frames
2 cvThreshold( silh, silh, diff_threshold, 1, CV_THRESH_BINARY ); // and threshold it
3 cvUpdateMotionHistory( silh, mhi, timestamp, MHI_DURATION ); // update MHI
// Note ทํากา on cvAbsDiff() จากคา รหาผลตางของ frame โดยใช functi
buf idx1 – bkg silh
// Note ทําการปรับคา threshold ให object เพื่อการแสดงผลท่ีดีข้ึน โดยใช thresholde = 100
// Note ทําการ update MHI จาก object silh ไปสู mhi ในชวงเวลา 1 ลูกคลื่นของนาฬิกา
6) Convert scale MHI and Calculate Motion Gradian
1 cvCvtScale( mhi, mask, 255./MHI_DURATION,
(MHI_DURATION - timestamp)*255./MHI_DURATION );
cvZero( dst );
2 cvCvtPlaneToPix( mask, 0, 0, 0, dst );
// calculate motion gradient orientation and valid orientation mask 3 cvCalcMotionGradient( mhi, mask, orient, MAX_TIME_DELTA,
MIN_TIME_DELTA, 3 ) 1) ทําการ convert ภาพ MHI ไปเปนภาพ mask 8 bit 2) นําคา mask ไปใสใน dst เพื่อรอการวาด
Motion Detection By Background Substraction 38
3) คํานวณองศา motion gradian จาก MHI ไปใสใน mask จาก MIN_TIME_DELTA ไปสู MAX_TIME_DELTA
7) Create Storage and Segmentation
if( !storage )
storage = cvCreateMemStorage(0);
else
cvClearMemStorage(storage);
// ขณะท่ียังไมมีการสราง storage ก็ใหสรางมิฉะน้ัน จะเคลียร storage
// segment motion: get sequence of motion components
// สราง segment เพื่อเก็บการเคลื่อนไหวโดยรวมของภาพ
seq = cvSegmentMotion( mhi, segmask, storage, timestamp, MAX_TIME_DELTA );
// iterate through the motion components,
for( i = -1; i < seq->total; i++ ) {
// ถาเปนการทํางานรอปแรกใหกําหนดเสนสีขาว มีรัศมี 100 พิกเซลและกลองขนาด 320 x 240
if( i < 0 ) { // case of the whole image
comp_rect = cvRect( 0, 0, size.width, size.height );
color = CV_RGB(255,255,255); //color = white
magnitude = 100;
}
else { // i-th motion
// หา element ตัวท่ี i ของอนุกรมภาพ ( sequence image)
comp_rect = ((CvConnectedComp*)cvGetSeqElem( seq, i ))->rect;
Motion Detection By Background Substraction 39
//ถา ขนาดของ element ตัวท่ี i เล็กมากใหวนรอปตอไป
if( comp_rect.width + comp_rect.height < 50 ) // skip very small components
continue;
// กําหนดสีของเสนเปนสีแดง และมีรัศมี 100 พิกเซล
color = CV_RGB(255,0,0); // color = red
magnitude = 30; // fixed magnitude
} 8) Select Component ROI
// select component ROI
cvSetImageROI( silh, comp_rect );
cvSetImageROI( mhi, comp_rect );
cvSetImageROI( orient, comp_rect );
cvSetImageROI( mask, comp_rect );
นําภาพ silh , mhi , orient , mask ไปใสไวในกลองส่ีเหลี่ยม 9) Draw empty circles
// หาจุดศูนยกลางของภาพ
center = cvPoint( (comp_rect.x + comp_rect.width/2),
(comp_rect.y + comp_rect.height/2) );
// วาดวงกลมมีเฉพาะขอบใหมีสีท่ีระบุ ความหนา 3 pixel รัศมี magnitude x 1.2
cvCircle( dst, center, cvRound(magnitude*1.2), color, 3, CV_AA, 0 );
7. Draw Background and Result
cvShowImage(WCV_BKG, bkg_img);
cvShowImage(WCV_OBJ, result_img);
//สั่งใหโปรแกรมแสดงภาพพืน้หลัง และ ภาพเคารางวัตถุ
Motion Detection By Background Substraction 40
รูปภาพ 4-2 ภาพตนฉบับ
รูปภาพ 4-3 ภาพวัตถุ
Motion Detection By Background Substraction 41
รูปภาพ 4-4 ภาพพ้ืนหลัง
ข้ันตอนวิธีการทํา Running Gaussian Average 4.2
1) Initial Parameter
- กําหนดคา k , α
static double alpha = 0.5;
static int k = 8;
- ทําการสรางรูปท่ีเก็บคา gray scale ของ σ และ μ
IplImage mue = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 1 );
IplImage omega= cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 1 );
Process realtime image
1) Receive output
Motion Detection By Background Substraction 42
- ทําการรับคา output จากเฟรมกอนหนา ไดแกคา μ , σ โดยรับคาจาก function calRGA ท่ีเขียนข้ึนมา
VSAAPI(void) calRGA(IplImage *input ,IplImage *mue, IplImage *omega , IplImage *output)
{
.
.
.
}
2) Compute output
- หาคา Iout | Iin – Iµ | kIσ
if( abs( ((int)(unsigned char)input->imageData[i] -(int)(unsigned char)mue->imageData[i])) >
(k * (int)(unsigned char)omega->imageData[i]) )
output->imageData[i] = (char)-1; //คา -1 เปนสีดํา
else
output->imageData[i] = (char)0; // คา 0 เปนสีขาว
3)Update μ
- หาคา Iµt 1 α Iin 1‐ α Iµt
temp = (alpha * (int)(unsigned char)input->imageData[i]) +
((1 - alpha) * (int)(unsigned char)mue->imageData[i]);
mue->imageData[i] = (char)(int)temp;
4) Update σ
- I σ^2 t 1 α Iin – Iµt 1 2 1‐ α Iσt
Motion Detection By Background Substraction 43
temp = alpha * pow(((int)(unsigned char)input->imageData[i] - (int)(unsigned char)mue->imageData[i]) , 2);
temp += (1 - alpha) * pow(((int)(unsigned char)omega->imageData[i]), 2); 5) Show input / μ / σ / output
#define WCV_INPUT "INPUT"
#define WCV_OUTPUT "OUTPUT"
#define WCV_MUE "MUE"
#define WCV_OMEGA "OMEGA"
cvShowImage(WCV_INPUT, gray_img);
cvShowImage(WCV_MUE, mue_img);
cvShowImage(WCV_OMEGA, omega_img);
cvShowImage(WCV_OUTPUT, output_img);
5) Release Parameter
- ลบ pointer ของ Iin Iout Iσ Iµ ออกจากโปรแกรม
cvReleaseImage(&mue);
cvReleaseImage(&omega)
ผลลัพธของโปรแกรม
กําหนดคา α = 0.5 , k = 8
Motion Detection By Background Substraction 44
รูปภาพ 4-5 ภาพตนฉบับ
รูปภาพ 4-6 ภาพคาเฉลี่ย
Motion Detection By Background Substraction 45
รูปภาพ 4-7 ภาพคาความแปรปรวน
รูปภาพ 4-8 ภาพผลลัพธ
Motion Detection By Background Substraction 46
ข้ันตอนการทํา Erosion / Dilation 4.3
1) Initialization
IplConvKernel* element = 0;
int element_shape = CV_SHAPE_ELLIPSE;
int max_iters = 8;
int erode_dilate_pos = 0;
erode_dilate_pos = max_iters;
source = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 1 );
dest = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 1 );
cvNamedWindow("Erode/Dilate");
cvCreateTrackbar("iterations","Erode/Dilate",&erode_dilate_pos,max_iters*2+1,ErodeDilate);
ทําการกําหนด element shape template โดยใหคารูปราง template เปนวงรี CV_SHAPE_ELLIPE พรอมกับสรางภาพเพ่ือทําสําเนาในการคํานวณ และภาพผลลัพธขนาด 320 x 240 pixel
-
กําหนดคาการวนรอบเริ่มตนเปน 8 และสราง Track Bar เพื่อการแสดงผลของการทํา Erosion / Dilation ในหนาตางของ "Erode/Dilate"
-
2) Processing
int n = erode_dilate_pos - max_iters;
int an = n > 0 ? n : -n;
element = cvCreateStructuringElementEx( an*2+1, an*2+1, an, an, element_shape, 0 );
if( n < 0 )
{
Motion Detection By Background Substraction 47
cvErode(source,dest,element,1);
}
else
{
cvDilate(source,dest,element,1);
}
cvShowImage("Erode/Dilate",dest);
- ทําการสราง template ขนาด (n x 2 )+ 1 รูปวงรี พรอมกับเปรียบเทียบคาของ n ท่ีไดจาก Track bar โดยท่ี
ถา n < 0 ไปทํา function Erode
ถา n > 0 ไปทํา function Dilate
- แสดงผลในหนาตาง "Erode/Dilate" โดยใชภาพ dest
3) Release Parameter
cvReleaseImage(&sourc);
cvReleaseImage(&dest);
cvDestroyWindow("Erode/Dilate");
cvReleaseStructuringElement(&element); - ทําการลบพารามิเตอรของข้ันตอนท้ังหมดไป
Motion Detection By Background Substraction 48
ผลลัพธจากการทํา Erosion / Dilation
รูปภาพ 4-9 ภาพผลลัพธ
รูปภาพ 4-10 ภาพหลังการทํา Erode/Dilate
Motion Detection By Background Substraction 49
4.4 Running Gaussian Average By Selectivity
เขาไปแกการทํางานของ Running Gaussian Average ดังนี้
1) เพิ่มเติมสวน Initialization
static int k1 = 10;
static int k2 = 15;
static int k3 = 5;
IplImage *output2 = 0;
IplImage *output3 = 0;
output2 = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 3 );
output3 = cvCreateImage( cvSize(320, 240), IPL_DEPTH_8U, 3 );
cvNamedWindow("OUTPUT2");
cvNamedWindow("OUTPUT3"); เปนการกําหนดคา K1 , K2 , K3 และสวนแสดงผล output ท่ี 2 และ 3 -
2) เพิ่มเติมสวน Processing
//output 2
if( (unsigned char)omega->imageData[i] > k2)
{
output2->imageData[i*3] = (char)255;
output2->imageData[i*3+1] = (char)0;
output2->imageData[i*3+2] = (char)0;
}
Motion Detection By Background Substraction 50
else
{
output2->imageData[i*3] = (char)0;
output2->imageData[i*3+1] = (char)0;
output2->imageData[i*3+2] = (char)0;
}
//output 3
if( (unsigned char)omega->imageData[i] > k3)
{
output3->imageData[i*3] = (char)0;
output3->imageData[i*3+1] = (char)255;
output3->imageData[i*3+2] = (char)0;
}
else
{
output3->imageData[i*3] = (char)0;
output3->imageData[i*3+1] = (char)0;
output3->imageData[i*3+2] = (char)0;
}
Motion Detection By Background Substraction 51
}
double percentMotion = (cvCountNonZero(output) / (320 * 240) ) * 100;
//Running Gaussian By Selectiviy
if(percentMotion <= 1) // case motion < 1% of total area
{
//find average without object
cvAbsDiff(mue, obj , acc);
cvCopyImage(acc , mue);
}
else if(percentMotion >= 90) // case motion > 90% of total area
{
mue = mue;
}
cvShowImage("OUTPUT2",output2);
cvShowImage("OUTPUT3",output3);
- ทําการหาคาเปอรเซ็นตของวัตถุเทียบจากพื้นท่ีท้ังหมด แลวนํามาตรวจสอบวาอยูในกรณีใดของ Running Gaussian Average By Selectivity พรอมท้ังแจกแจงผลลัพธตามคา k ซ่ึงแสดงผลในแตละหนาตาง
Motion Detection By Background Substraction 52
3) เพิ่มเติมสวน Release Parameter
cvReleaseImage(&output2);
cvReleaseImage(&output3);
cvDestroyWindow("OUTPUT2");
cvDestroyWindow("OUTPUT3");
ผลลัพธจากการทํา Running Gaussian Average By Selectivity
รูปภาพ 4-11 ภาพตนฉบับ
Motion Detection By Background Substraction 53
รูปภาพ 4-12 K1=10
รูปภาพ 4-13 K2 = 20
Motion Detection By Background Substraction 54
รูปภาพ 4-14 K3 = 1
Motion Detection By Background Substraction 55
บทท่ี 5 สรุปผลและขอเสนอแนะ
สรุปผล
1. ศึกษาอัลกอรธิึมหาพื้นหลังสาํหรับวิธี Background Substraction พรอมท้ังเปรียบเทียบขอดีและขอดอยของแตละวิธี
2. ทดสอบระบบกลอง IP Camera จากโปรแกรม capture วดิีโอสตรีมของทางฝง server พรอมท้ังเรียนรูข้ันตอนการทํางานของโปรแกรม
3. เรียนรูการใช Library openCV ท่ีในหัวขอ Background Substraction และ Motion Template
4. ศึกษาวิธีการทํา Motion Template เพื่อทําการหาภาพโครงรางของวัตถุท่ีเคลื่อนไหว
5. ทําความเขาใจ source code ของโปรแกรมฝง client ท่ีมีอยูให
6. implement โปรแกรมในขอ 5 เพื่อหาวัตถุโดยใชวิธี Background Substraction ของอัลกอริธึม Running Average จาก input ของโปรแกรมฝง server
7. นําโปรแกรมในขอ 6 เพื่อหาภาพโครงรางของวัตถุท่ีเคลื่อนไหวโดยวิธี Motion Template
8. implement โปรแกรมในขอ 5 เพื่อหารูผลลพัธโดยใชวิธี Background Substraction ของอัลกอริธึม Running Guassian Average จาก input ของโปรแกรมฝง server
9. ปรับปรุงผลลัพธดวยวิธีของ Morphology Image Processing จาก อัลกอรธิึม Running Guassian Average
10. เพิ่มเติมอัลกอริธึมแบบ Running Guassian Average By Selectivity พรอมท้ังแจกแจงผลลัพธตามคา k
ยิ่งคา k มาก วัตถุท่ีไดจะคมชัด
ยิ่งคา k นอย วตัถุท่ีไดจะมี noise มาก
ปญหาและแนวทางการแกไข 1. Overflow pixel value เปนการแสดงคาของ pixel เกินจากการใชงานจริงเชน
คาของ pixel ณ จุดพิกัด x,y ของเฟรมแรกและเฟรมถัดไปเปน 200 และ 150 เมื่อมีการนําคา 2 คาน้ีมาคูณกันตามสมการ Running Guassain Average จะมีการ overflow เกิดข้ึนถามีการ
Motion Detection By Background Substraction 56
2. คาท่ีคํานวณเปนผลไมตรงกับทฤษฎี เนื่องจากการ casting character ใน image เพื่อนํามา
คํานวณ เชน
temp = (alpha * input->imageData[i]) +
((1 - alpha) * mue->imageData[i]);
mue->imageData[i] = temp;
หลังการ casting ท่ีถูกตองจะเปน
temp = (alpha * (int)(unsigned char)input->imageData[i]) +
((1 - alpha) * (int)(unsigned char)mue->imageData[i]);
mue->imageData[i] = (char)(int)temp;
ท้ังน้ีเนื่องจากคาของ pixel ในตัวแปร sign char มีตาต้ังแต -127 ถึง 127 แตคาท่ีเราใชงานจริงมีคาต้ังแต 0 ถึง 255
3. การหาคา k ท่ีเหมาะสมกับสมการ เนื่องจากคา k เปนคาท่ีเหมาะสมของกราฟรูประฆังคว่ํา ยิ่งคา k มากๆ noise ท่ีไดจะลดลง ในขณะท่ีภาพท่ีไดจะหางไกลจากคาเฉลี่ยเรื่อยๆ
Motion Detection By Background Substraction 57
บรรณานุกรม
1. A robust and computationally ef_cient motion detection algorithm based on background estimation. By A . Manzanera J. C. Richefeu
F-75739 PARIS CEDEX 15
http://www.ensta.fr/_ manzaner
2. M. Piccardi. Background subtraction techniques: a review.
http://www-staff.it.uts.edu.au/¬ massimo/
3. S.-C. Cheung and C. Kamath. Robust techniques for background
subtraction in urban traf_c video. In Proc. SPIE
Video Communications and Image Processing, San Jose -
CA, 2004.
4. A. Elgammal, D. Harwood, and L. Davis. Non-parametric
Model for Background Subtraction. In Proc. IEEE European
Conference on Computer Vision, Dublin - Ireland,
2000.
5. Open Source Computer Vision Library Reference Manual
Copyright © 1999-2001 Intel Corporation
All Rights Reserved
Issued in U.S.A.
Order Number: TBD
World Wide Web: http://developer.intel.com
Motion Detection By Background Substraction 58
ดัชนฟีงกชัน
CVAPI(IplImage*) cvCreateImage( CvSize size, int depth, int channels )
size คือ คาของขนาดเฟรมของภาพท้ังความยาวและความสูง
depth คือ คาของจํานวนบิตตอชาเนลของจุดส ี
channel คือ จํานวนชาเนล
รายละเอียด
เปนฟงกชันการสรางภาพข้ึนมากําหนดขนาดเฟรม คาของจํานวนบิตตอชาเนลของจุดสี และ จํานวนชาเนล
CV_INLINE CvSize cvSize( int width, int height )
width คือ คาของความกวางของเฟรม
height คือ คาของความกวางของเฟรม
รายละเอียด
เปนฟงกชันการสรางขนาดเฟรมของภาพข้ึนมา
CVAPI(int) cvNamedWindow( const char* name )
name คือ ช่ือของหนาตาง
รายละเอียด
เปนฟงกชันการหนาตางสําหรบัแสดงภาพ
CVAPI(void) cvShowImage( const char* name, const CvArr* image )
name คือ ช่ือของหนาตาง
image คือ คาของภาพ
รายละเอียด
เปนฟงกชันการแสดงผลหนาตางท่ีใชสําหรับแสดงภาพ
Motion Detection By Background Substraction 59
CVAPI(IplImage*) cvLoadImage( const char* filename)
filename คือ ช่ือของไฟลภาพท่ีจะโหลดมาใช
รายละเอียด
เปนฟงกชันท่ีจะโหลดภาพมาใช
CVAPI(void) cvCvtColor( const CvArr* src, CvArr* dst, int code )
src คือ ภาพ input
dst คือ ภาพ output
code คือ รหัสสําหรบัการแปลงสี
รายละเอียด
เปนฟงกช่ันท่ีใชสําหรับแปลงสีจากภาพสีเปนขาวดํา
CVAPI(void) cvRunningAvg( const CvArr* image, CvArr* acc, double alpha,
const CvArr* mask CV_DEFAULT(NULL) )
image คือ ภาพ input
acc คือ ภาพ output
alpha คือ คาของอัลฟาท่ีใชสําหรับคํานวนสูตร
mask คือ คา mask ปกติเปน 0
รายละเอียด
เปนฟงกช่ันท่ีใชสําหรับหาพื้นหลังของภาพดวยวิธี Running Average
CVAPI(void) cvAbsDiff( const CvArr* src1, const CvArr* src2, CvArr* dst )
Motion Detection By Background Substraction 60
src1 คือ ภาพ input1
src2 คือ ภาพ input2
dst คือ ภาพ output
รายละเอียด
เปนฟงกช่ันท่ีใชสําหรับหาหาผลตางของภาพ input 1 และ input 2
CVAPI(void) cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi,
double timestamp, double duration );
silhouette คือ ภาพโครงราง
mhi คือ ภาพ MHI
timestamp คือ เวลาท่ีผานไปต้ังแตเริ่มโปรแกรม
duration คือ ชวงเวลาท่ีตองการ
รายละเอียด
เปนฟงกช่ันท่ีใชการทํา Update MHI
CVAPI(void) cvCalcMotionGradient( const CvArr* mhi, CvArr* mask, CvArr* orientation,
double delta1, double delta2,
int aperture_size CV_DEFAULT(3)))
mhi คือ ภาพ MHI
mask คือ คา mask
orientation คือ คาองศา
delta1 คือ คาเวลาท่ีเปลี่ยนแปลงสูงสุด
delta2 คือ คาเวลาท่ีเปลี่ยนแปลงสูงสุด
aperture_size คือ ขนาดของอนุพันธ ปกติจะเปน 3
Motion Detection By Background Substraction 61
Motion Detection By Background Substraction 62
รายละเอียด
เปนฟงกช่ันท่ีใชการคํานวณ Motion Gradient