ธุรกิจของฉันคือแฟรนไชส์ การให้คะแนน เรื่องราวความสำเร็จ ไอเดีย การทำงานและการศึกษา
ค้นหาไซต์

การประยุกต์ใช้วิธีการไหลของแสงเพื่อประมาณค่าการกระจัดของภาพ การสร้างกระแสไหลเชิงแสง กระแสหมุนวนของบทความ วิธีทางแสง

ภาพความสว่างเคลื่อนที่ไปพร้อมกับวัตถุที่สังเกตได้ การไหลของแสงคือการเคลื่อนไหวที่ชัดเจนของภาพที่มีความสว่าง ตามหลักการแล้ว การไหลของแสงจะสอดคล้องกับสนามการเคลื่อนไหว แต่เราจะแสดงด้านล่างว่าไม่ได้เป็นเช่นนั้นเสมอไป

ข้าว. 12.2. การไหลของแสงที่ไม่ตรงกับสนามการเคลื่อนที่เสมอไป a - ทรงกลมเรียบหมุนภายใต้การส่องสว่างคงที่ - ภาพไม่เปลี่ยนแปลงแม้ว่าสนามการเคลื่อนไหวจะไม่เป็นศูนย์ก็ตาม b - ทรงกลมที่อยู่นิ่งถูกส่องสว่างโดยแหล่งกำเนิดที่กำลังเคลื่อนที่ - การกระจายการส่องสว่างของภาพจะเปลี่ยนไปแม้ว่าสนามการเคลื่อนไหวจะเป็นศูนย์ก็ตาม

ลองพิจารณาทรงกลมที่เป็นเนื้อเดียวกันในอุดมคติที่หมุนอยู่หน้าเลนส์ของระบบภาพ (รูปที่ 12.2, a) เนื่องจากพื้นผิวโค้ง การเปลี่ยนแปลงเชิงพื้นที่ของความสว่างจะถูกสังเกตในภาพของทรงกลม อย่างไรก็ตาม รูปแบบความสว่างนี้จะไม่เคลื่อนที่ไปตามพื้นผิว และภาพก็ไม่เปลี่ยนแปลงเมื่อเวลาผ่านไป ในกรณีนี้ ฟลักซ์แสงจะเป็นศูนย์ทุกที่ แม้ว่าสนามการเคลื่อนที่จะไม่ใช่ศูนย์ก็ตาม ตอนนี้ให้พิจารณาทรงกลมที่อยู่นิ่งซึ่งส่องสว่างโดยแหล่งกำเนิดแสงที่กำลังเคลื่อนที่ (รูปที่ 12.2, b) ความสว่างในภาพจะเปลี่ยนไปตามการเคลื่อนไหวของแหล่งสัญญาณ ในกรณีนี้ การไหลของแสงเห็นได้ชัดว่าไม่เป็นศูนย์ แม้ว่าสนามการเคลื่อนไหวจะเป็นศูนย์ทุกที่ก็ตาม การสะท้อนและเงาแบบพิเศษเป็นตัวอย่างอื่นที่การไหลของแสงไม่ตรงกับสนามการเคลื่อนที่

เราเข้าถึงการไหลของแสงได้เท่านั้น และเราจะถือว่าในกรณีปกติ การไหลของแสงไม่ได้แตกต่างจากสนามการเคลื่อนที่มากนัก ซึ่งช่วยให้เราสามารถประมาณการเคลื่อนไหวสัมพัทธ์โดยพิจารณาจากการเปลี่ยนแปลงของภาพเมื่อเวลาผ่านไป

เราหมายถึงอะไรโดยการเคลื่อนไหวที่ชัดเจนของรูปแบบความสว่าง? ลองพิจารณาจุด P บนภาพที่มีความสว่าง E ในขณะนี้ (รูปที่ 12.3) จุด P ของภาพจะตรงกับจุดใดในขณะนั้น กล่าวคือ ภาพความสว่างเคลื่อนที่ในช่วงเวลานี้อย่างไร โดยปกติในบริเวณใกล้จุด P จะมีอยู่มากมาย

จุดที่มีความสว่างเท่ากัน E หากในส่วนของภาพเราสนใจความสว่างเปลี่ยนแปลงอย่างต่อเนื่อง จุด P จะอยู่บนเส้นความสว่างเท่ากัน C ในขณะนี้ มันจะสอดคล้องกับเส้นความสว่างเท่ากัน C ด้วย ค่า E เท่ากัน อย่างไรก็ตาม อะไรคือความสอดคล้องระหว่างจุดของเส้น C และ C? คำถามนี้ไม่ใช่เรื่องง่ายที่จะตอบ เนื่องจากรูปร่างของเส้นนี้มักจะเปลี่ยนแปลงเมื่อเคลื่อนที่

ดังนั้นเราจึงสังเกตว่าการไหลของแสงในภาพที่เปลี่ยนแปลงนั้นถูกกำหนดอย่างคลุมเครือโดยข้อมูลท้องถิ่น เรามาอธิบายเรื่องนี้ด้วยอีกตัวอย่างหนึ่ง ลองพิจารณาขอบเขตของความสว่างที่สม่ำเสมอในภาพซึ่งไม่เปลี่ยนแปลงเมื่อเวลาผ่านไป “เป็นไปได้มากที่สุด” ในกรณีนี้คือฟลักซ์แสงเป็นศูนย์ ที่จริงแล้ว ภายในจุดที่เป็นเนื้อเดียวกัน เราสามารถกำหนดความเร็วใดๆ ก็ตามที่เราต้องการให้กับจุดนั้นได้ แม้ว่าเห็นได้ชัดว่าเราต้องการคำอธิบายที่ง่ายที่สุดสำหรับการเปลี่ยนแปลงของภาพที่สังเกตได้ (ในกรณีนี้ คือ ไม่มีการเปลี่ยนแปลงดังกล่าว)

ให้เป็นแสงสว่าง ณ จุดใดจุดหนึ่งในภาพ ณ เวลานั้น จากนั้น ถ้า และ ส่วนประกอบ y ของเวกเตอร์การไหลเชิงแสง ณ จุดนี้ เราสามารถคาดหวังได้ว่าการส่องสว่างจะเท่ากัน ณ จุดนี้ ณ จุดที่ กล่าวอีกนัยหนึ่ง สำหรับช่วงเวลาสั้นๆ ข้อจำกัดเดียวนี้ไม่เพียงพอที่จะทำให้ชัดเจน กำหนดสิ่งที่ไม่ทราบทั้งสอง และ และ V. เป็นที่ชัดเจนว่าเราต้องการใช้ประโยชน์จากข้อเท็จจริงที่ว่าสนามการเคลื่อนที่มีความต่อเนื่องเกือบทุกที่

หากความสว่างเปลี่ยนแปลงอย่างราบรื่น จากนั้นเราสามารถขยายด้านซ้ายมือของสมการออกเป็นอนุกรมเทย์เลอร์ และจากตรงนี้จะได้

โดยที่ มีเงื่อนไขของลำดับความเล็กที่สูงขึ้นเริ่มต้นจาก

ข้าว. 12.3. การเคลื่อนไหวที่ชัดเจนของรูปแบบความสว่าง

ไม่ใช่เรื่องง่ายที่จะตัดสินใจว่าจุด P บนเส้นสีเทา C ของภาพที่สองตรงกับจุด P ที่กำหนดบนเส้นความสว่าง C ของภาพแรก

ข้าว. 12.4. ข้อมูลท้องถิ่นเกี่ยวกับการไล่ระดับความสว่างและอัตราการเปลี่ยนแปลงในช่วงเวลาหนึ่ง ซึ่งกำหนดข้อจำกัดเพียงข้อเดียวในองค์ประกอบของเวกเตอร์การไหลของแสง จำเป็นต้องกำหนดความเร็วการไหลเป็นเส้นตรงที่ตั้งฉากกับทิศทางของการไล่ระดับความสว่าง เราสามารถระบุองค์ประกอบที่มุ่งไปตามการไล่ระดับความสว่างเท่านั้น ไม่มีใครรู้เกี่ยวกับองค์ประกอบของความเร็วการไหลในทิศทางตั้งฉาก

จากวินาที มาลดหารด้วยแล้วไปให้สุดที่แล้วเราก็จะได้

การไหลของแสงเป็นเทคโนโลยีที่ใช้ในคอมพิวเตอร์วิทัศน์ในด้านต่างๆ เพื่อกำหนดการเลื่อน การแบ่งส่วน การเลือกวัตถุ และการบีบอัดวิดีโอ อย่างไรก็ตาม หากเราต้องการนำไปใช้อย่างรวดเร็วในโครงการของเรา โดยได้อ่านเกี่ยวกับมันใน Wikipedia หรือที่อื่น แล้วเป็นไปได้มากว่าเราจะสะดุดอย่างรวดเร็วกับความจริงที่ว่ามันทำงานได้ไม่ดีมากและล้มเหลวเมื่อพิจารณาการเปลี่ยนแปลงของลำดับของ 1-2 พิกเซล (อย่างน้อยก็เป็นเช่นนั้นสำหรับฉัน) ถ้าอย่างนั้นเรามาดูการใช้งานแบบสำเร็จรูปใน OpenCV กันดีกว่า มีการใช้งานโดยใช้วิธีการต่าง ๆ และไม่มีความชัดเจนเลยว่าทำไมตัวย่อ PyrLK ถึงดีกว่าหรือแย่กว่าการกำหนด Farneback หรืออะไรทำนองนั้นและคุณจะต้องเข้าใจความหมายของพารามิเตอร์ซึ่งมีอยู่มากมายในบางส่วน การใช้งาน ยิ่งไปกว่านั้น สิ่งที่น่าสนใจก็คืออัลกอริธึมเหล่านี้ใช้งานได้ ไม่เหมือนที่เราเขียนเอง ความลับคืออะไร?

การไหลของแสงคืออะไร

การไหลของแสง (OP) คือภาพของการเคลื่อนไหวที่ชัดเจนซึ่งแสดงถึงการเคลื่อนตัวของแต่ละจุดระหว่างสองภาพ โดยพื้นฐานแล้วมันแสดงถึงสนามความเร็ว (เนื่องจากการเปลี่ยนแปลงจนถึงขนาดจะเทียบเท่ากับความเร็วชั่วขณะ) สาระสำคัญของ OP คือในแต่ละจุดในภาพจะพบการเปลี่ยนแปลง (dx, dy) เพื่อให้จุดบนภาพที่สองสอดคล้องกับจุดเดิม วิธีพิจารณาความสอดคล้องของคะแนนเป็นคำถามแยกต่างหาก ในการทำเช่นนี้ คุณจะต้องใช้ฟังก์ชันจุดบางประเภทที่ไม่เปลี่ยนแปลงอันเป็นผลมาจากการกระจัด โดยปกติจะถือว่าจุดหนึ่งยังคงความเข้มของมันไว้ (เช่น ความสว่างหรือสีสำหรับภาพสี) แต่จุดที่รักษาขนาดของการไล่ระดับสี, Hessian, ขนาดหรือปัจจัยกำหนดของมัน, Laplacian และคุณลักษณะอื่นๆ ถือว่าเหมือนกัน . แน่นอนว่าการรักษาความเข้มจะล้มเหลวหากการส่องสว่างหรือมุมตกกระทบของแสงเปลี่ยนไป อย่างไรก็ตาม หากเรากำลังพูดถึงสตรีมวิดีโอ เป็นไปได้มากว่าแสงจะไม่เปลี่ยนแปลงมากนักระหว่างสองเฟรม หากเพียงเพราะช่วงเวลาสั้น ๆ ผ่านไประหว่างเฟรมเหล่านั้น ดังนั้นความเข้มจึงมักถูกใช้เป็นฟังก์ชันที่ถูกสงวนไว้ที่จุดหนึ่ง

จากคำอธิบายนี้ เราสามารถสร้างความสับสนให้กับ OP กับการค้นหาและการเปรียบเทียบจุดคุณลักษณะได้ แต่สิ่งเหล่านี้ต่างออกไป สาระสำคัญของการไหลของแสงก็คือ มันไม่ได้มองหาจุดพิเศษใด ๆ แต่พยายามพิจารณาว่าจุดใดเปลี่ยนไปตามพารามิเตอร์ของภาพ

มีสองตัวเลือกในการคำนวณการไหลของแสง: หนาแน่น (หนาแน่น) และแบบเลือก (เบาบาง) สตรีมแบบกระจายจะคำนวณการเปลี่ยนแปลงของจุดที่กำหนดแต่ละจุด (เช่น จุดที่เลือกโดยตัวตรวจจับฟีเจอร์บางตัว) สตรีมแบบหนาแน่นจะคำนวณการเปลี่ยนแปลงของจุดภาพทั้งหมด โดยปกติแล้ว สตรีมแบบเลือกจะถูกคำนวณเร็วกว่า แต่สำหรับอัลกอริธึมบางตัวจะไม่ได้มีความแตกต่างกัน ใหญ่มากและสำหรับงานบางอย่างจำเป็นต้องค้นหาโฟลว์ในทุกจุดของภาพ

สำหรับกรณีที่เสื่อมลง สามารถใช้วิธีที่ง่ายกว่าในการพิจารณาการเปลี่ยนแปลงได้ โดยเฉพาะอย่างยิ่ง หากจุดภาพทั้งหมดมีการเลื่อนเท่ากัน (ภาพทั้งหมดถูกเลื่อน) ก็สามารถใช้วิธีความสัมพันธ์ของเฟสได้: คำนวณการแปลงฟูริเยร์สำหรับทั้งสองภาพ ค้นหาการบิดเบี้ยวของระยะของภาพเหล่านั้น แล้วใช้เพื่อกำหนดการเปลี่ยนแปลง ( ดูที่ en.wikipedia.org /wiki/Phase_correlation) คุณยังสามารถใช้การจับคู่แบบบล็อก: ค้นหาการเปลี่ยนแปลงที่ลดบรรทัดฐานของความแตกต่างระหว่างรูปภาพในหน้าต่างให้เหลือน้อยที่สุด ในรูปแบบบริสุทธิ์ อัลกอริธึมดังกล่าวจะทำงานเป็นเวลานาน และไม่เสถียรต่อการหมุนและการบิดเบือนอื่นๆ วิกิพีเดียภาษาอังกฤษแสดงรายการอัลกอริธึมที่ระบุไว้เป็นตัวเลือกต่างๆ สำหรับการคำนวณการไหลของแสง แต่ดูเหมือนว่าจะไม่ถูกต้องสำหรับฉัน เนื่องจากอัลกอริธึมเหล่านี้สามารถใช้เพื่อวัตถุประสงค์อื่นและไม่สามารถแก้ปัญหานี้ได้ทั้งหมด เราจะเรียกวิธีการตามลักษณะเฉพาะของการไหลของแสงของภาพ (สิ่งที่เรียกว่าวิธีการเชิงอนุพันธ์ในวิกิพีเดียภาษาอังกฤษ)

วิธีมาตรฐาน (วิธีลูคัส-คานาเดะ)

คำอธิบายทางคณิตศาสตร์ของอัลกอริทึมมีรายละเอียดเพียงพอในบทความนี้ แต่จะกล่าวถึงเฉพาะแง่มุมทางทฤษฎีเท่านั้น

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

อนุญาต – ความเข้ม ณ จุดใดจุดหนึ่ง (x, y) ในภาพแรก (เช่น ที่เวลา t) ในภาพที่สอง จุดนี้เคลื่อนที่ไป (dx, dy) ในขณะที่เวลา dt ผ่านไป จากนั้นเราให้ Taylor ขยายฟังก์ชันความเข้มไปที่เทอมแรก (ต่อมาจะกล่าวถึงว่าทำไมถึงเทอมแรกเท่านั้น) นี่คือ อนุพันธ์บางส่วนเกี่ยวกับพิกัดและเวลา นั่นคือโดยพื้นฐานแล้วคือการเปลี่ยนแปลงความสว่างที่จุด (x, y) ระหว่างสองเฟรม

เราเชื่อว่าจุดนั้นยังคงความเข้มข้นอยู่ ซึ่งหมายถึง
เราได้สมการหนึ่งที่มีค่าไม่ทราบสองตัว (dx และ dy) ซึ่งหมายความว่าการแก้โจทย์นั้นไม่เพียงพอ กล่าวคือ สมการนี้เพียงอย่างเดียวจะใช้ได้ไม่ไกล

วิธีแก้ปัญหาที่ง่ายที่สุดคืออัลกอริธึมลูคัส-คานาเดะ ในภาพของเรา เรามีวัตถุที่มีขนาดใหญ่กว่า 1 พิกเซล ซึ่งหมายความว่าจุดอื่นๆ จะมีการเปลี่ยนแปลงที่ใกล้เคียงกันโดยประมาณ ซึ่งเป็นไปได้มากว่าในบริเวณใกล้กับจุดปัจจุบัน ดังนั้นเราจึงใช้หน้าต่างรอบจุดนี้และลดข้อผิดพลาดทั้งหมดให้เหลือน้อยที่สุด (โดยวิธีกำลังสองน้อยที่สุด) โดยกระจายค่าสัมประสิทธิ์การถ่วงตามแบบเกาส์เซียน นั่นคือเพื่อให้พิกเซลที่ใกล้กับพิกเซลที่อยู่ระหว่างการศึกษามากที่สุดมีน้ำหนักมากที่สุด หลังจากการแปลงที่ง่ายที่สุด เราจะได้ระบบสมการ 2 สมการโดยไม่ทราบค่า 2 รายการ:

ดังที่ทราบ ระบบนี้ไม่ได้มีคำตอบเฉพาะเสมอไป (แม้ว่าจะบ่อยมากก็ตาม) ถ้าดีเทอร์มิแนนต์ของระบบเท่ากับศูนย์ ก็จะไม่มีคำตอบหรือจำนวนอนันต์ ปัญหานี้เรียกว่าปัญหารูรับแสง - เลื่อนความคลุมเครือด้วยขอบเขตการมองเห็นที่จำกัดสำหรับภาพเป็นระยะ มันสอดคล้องกับกรณีที่ชิ้นส่วนของภาพซึ่งมีวงจรบางอย่างตกไปอยู่ในขอบเขตการมองเห็น ที่นี่แม้แต่บุคคลก็ไม่สามารถระบุได้อย่างชัดเจนว่าภาพเปลี่ยนไปตรงไหน ปัญหาคือเนื่องจากเสียงรบกวนในสถานการณ์ที่ไม่ชัดเจน เราจะไม่ได้รับปัจจัยที่เป็นศูนย์ แต่เป็นค่าที่เล็กมาก ซึ่งมักจะนำไปสู่ค่าการเปลี่ยนแปลงที่ใหญ่มากซึ่งไม่มีความสัมพันธ์กับความเป็นจริงเป็นพิเศษ ดังนั้นในขั้นตอนหนึ่ง คุณเพียงแค่ต้องตรวจสอบว่าปัจจัยกำหนดของระบบมีขนาดเล็กเพียงพอหรือไม่ และหากเป็นเช่นนั้น ไม่ต้องพิจารณาจุดดังกล่าวหรือทำเครื่องหมายว่าผิดพลาด

ทำไมมันไม่ทำงาน?
ถ้าเราหยุดที่ขั้นตอนนี้และใช้อัลกอริธึมนี้ มันจะทำงานได้สำเร็จ แต่เฉพาะในกรณีที่การเลื่อนระหว่างรูปภาพที่อยู่ติดกันมีขนาดเล็กมาก ตามลำดับ 1 พิกเซล และถึงแม้จะไม่เสมอไปก็ตาม (ในการวิเคราะห์คุณภาพ ลำดับสังเคราะห์ที่มีการเลื่อนสัมพัทธ์ต่างกันได้ถูกสร้างขึ้น และการเปลี่ยนแปลงนี้สามารถแสดงด้วยจำนวนพิกเซลที่ไม่ใช่จำนวนเต็ม จากนั้นภาพที่ได้จะถูกแก้ไขตามนั้น) เมื่อถึงกะ 2 พิกเซล ข้อผิดพลาดจะมีขนาดใหญ่ และถ้ามากกว่า 3 ผลโดยทั่วไปจะไม่เพียงพอ เกิดอะไรขึ้น?

ที่นี่คณิตศาสตร์กำหนดเรา เธอปลูกฝังให้เรารู้สึกว่าการทำงานทั้งหมดรอบตัวเรามีความต่อเนื่องและหลายครั้งสามารถแยกแยะได้ โดยทั่วไป ที่สถาบันนี้ เราถูกสอนให้เขียนการประมาณฟังก์ชันในบริเวณใกล้จุดหนึ่งโดยใช้สูตรเทย์เลอร์ และเราใช้มันอย่างไร้เหตุผลและสนุกสนานในทุกที่ ทีนี้ลองคิดถึงความหมายทางกายภาพของอนุพันธ์ในที่นี้ดู? เราต้องการใช้มันเพื่อกำหนดการเปลี่ยนแปลงค่าของฟังก์ชันในย่านที่มีขอบเขตจำกัดของจุด และอนุพันธ์จะให้แนวคิดเกี่ยวกับย่านใกล้เคียงที่เล็กที่สุด หากต้องการขยายพื้นที่ใกล้เคียงนี้ อาจเป็นไปได้ที่จะเพิ่มลำดับอนุพันธ์ที่สูงขึ้นให้กับส่วนขยายของ Taylor แต่จะนำไปสู่ความไม่เชิงเส้นในระบบ ซึ่งจะทำให้แก้ไขได้ยากขึ้นมาก และข้อดีจะเป็นที่น่าสงสัย โดยเฉพาะอย่างยิ่งเมื่อ ในทางปฏิบัติเราไม่ได้เกี่ยวข้องกับฟังก์ชันที่สามารถหาอนุพันธ์ได้หลายตัวอย่างต่อเนื่อง แต่โดยทั่วไปแล้วไม่ชัดเจนว่าฟังก์ชันที่ไม่ต่อเนื่องคืออะไร ดังนั้นจึงมีเหตุผลมากกว่าที่จะมองหาฟังก์ชัน g(x) ซึ่งในกรณีที่แยกกันของเรา f(x) + g(x) = f(x+1), f(x) + 2g(x) = f(x) จะให้ค่าที่แม่นยำที่สุดเท่าที่จะเป็นไปได้คือ +2), f(x) - g(x) = f(x-1) เป็นต้น ดังนั้น ในกรณีนี้ เราไม่ต้องการอนุพันธ์ แต่ต้องมีฟังก์ชันเชิงเส้นบางตัวที่ อยู่ใกล้กับจุดของฟังก์ชันเดิมมากที่สุด การคำนวณทางคณิตศาสตร์อย่างง่ายนำไปสู่การแก้ปัญหา , ที่ไหน - หากเราสร้างอนุพันธ์โดยใช้จุดใกล้เคียงจุดหนึ่งในแต่ละด้าน เราก็โชคดี ในกรณีนี้ สูตรเกิดขึ้นพร้อมกับสูตรในการคำนวณอนุพันธ์โดยประมาณ: g(x) = (f(x+1) – f(x- 1)) / 2 โดยทั่วไปใน OpenCV เมื่อคำนวณการไหลของแสงของ Lucas-Kanade จะใช้สูตรนี้อย่างแน่นอน เราจะกลับมาที่สิ่งนี้ในภายหลัง แต่ถ้าคุณได้คะแนนมากขึ้น สูตรจะแตกต่างอย่างสิ้นเชิงจากแผนผลต่างแบบคลาสสิกสำหรับอนุพันธ์อันดับ 1

แน่นอนว่าหากเราสร้างฟังก์ชันนี้ เช่น การใช้จุดที่อยู่ใกล้เคียง 3 จุดทางซ้ายและขวาของจุดเดิม มันก็ไม่ได้ขึ้นอยู่กับจุดที่อยู่ไกลออกไปแต่อย่างใด และหากเราเลื่อนมากกว่า 3 จุด คะแนนเราก็มักจะได้รับผลลัพธ์ที่ไม่เพียงพอ และยิ่งจำนวนจุดที่เราสร้างฟังก์ชันนี้มากขึ้น ค่าเบี่ยงเบนเฉลี่ยของเส้นผลลัพธ์จากจุดที่ใช้ก็จะยิ่งมากขึ้น - อีกครั้งเนื่องจากเราไม่มีภาพที่แปรผันเชิงเส้น แต่ใครจะรู้ว่าเป็นประเภทใด ในทางปฏิบัติ การเลื่อนพิกเซลมากกว่า 2 พิกเซลทำให้เกิดข้อผิดพลาดขนาดใหญ่ไม่เพียงพอ ไม่ว่าเราจะทำกี่จุดก็ตาม

จุดอ่อนอีกประการหนึ่งของอัลกอริธึมก็คือ อีกครั้งที่เราไม่ได้จัดการกับฟังก์ชันต่อเนื่องที่ราบรื่น แต่กับฟังก์ชันที่กำหนดเองและแม้แต่ฟังก์ชันที่ไม่ต่อเนื่องกัน ดังนั้นในบางส่วนของภาพ ความเข้มอาจ "กระโดด" โดยไม่มีรูปแบบที่ชัดเจนเลย เช่น ที่ขอบเขตของวัตถุ หรือเนื่องจากสัญญาณรบกวน ในกรณีนี้ ไม่มีฟังก์ชัน g(x) ใดที่สามารถอธิบายการเปลี่ยนแปลงในภาพในบริเวณใกล้กับจุดได้อย่างแม่นยำเพียงพอ เพื่อต่อสู้กับสิ่งนี้ (อย่างน้อยบางส่วน) ขอแนะนำให้ละเลงภาพต้นฉบับและจะมีประโยชน์ในการละเลงค่อนข้างแรงนั่นคือจะดีกว่าถ้าใช้ไม่ใช่การเบลอแบบเกาส์เซียนที่ทุกคนชื่นชอบ (โดยเฉลี่ยด้วยค่าสัมประสิทธิ์การถ่วงน้ำหนัก) แต่เป็นเพียงตัวกรองกล่อง (ค่าเฉลี่ยสม่ำเสมอเหนือหน้าต่าง ) และหลายครั้งติดต่อกัน ความเรียบเนียนของภาพมีความสำคัญต่อเรามากกว่ารายละเอียด

อย่างไรก็ตาม มาตรการเหล่านี้ไม่ได้ช่วยเราจากการจำกัดการเปลี่ยนแปลงที่ตรวจพบไว้ที่ 2-3 พิกเซลด้วย อย่างไรก็ตาม ใน OpenCV 1.0 มีการนำการไหลของแสงมาใช้และทำงานได้ภายใต้สภาวะที่เหมาะสมและในกะที่น้อยมากเท่านั้น

จะทำอย่างไร?
โดยสรุป ลูคัส-คานาเดะตามปกติสามารถระบุการเปลี่ยนแปลงเล็กๆ น้อยๆ ได้ดี โดยที่รูปภาพจะคล้ายกับการประมาณเชิงเส้น เพื่อต่อสู้กับสิ่งนี้ เราจะใช้เทคนิค CV มาตรฐาน – แบบหลายสเกล: เราจะสร้าง “ปิรามิด” ของรูปภาพที่มีขนาดต่างกัน (เกือบทุกครั้งจะปรับขนาด 2 เท่าในแต่ละแกน ซึ่งง่ายกว่าในการคำนวณ) และดำเนินการผ่านพวกมัน ด้วยการไหลของแสงจากภาพที่เล็กกว่าไปยังภาพที่ใหญ่กว่า ดังนั้นการเปลี่ยนแปลงเล็กน้อยที่ตรวจพบในภาพขนาดเล็กจะสอดคล้องกับการเปลี่ยนแปลงขนาดใหญ่ในภาพขนาดใหญ่ ในภาพที่เล็กที่สุด เราตรวจพบการเปลี่ยนแปลงไม่เกิน 1-2 พิกเซล และการย้ายจากสเกลที่เล็กลงไปสู่สเกลที่ใหญ่กว่า เราใช้ผลลัพธ์จากขั้นตอนก่อนหน้าและปรับแต่งค่าการเปลี่ยนแปลง ใน OpenCV จะถูกนำไปใช้โดยฟังก์ชัน calcOptFlowPyrLK การใช้อัลกอริธึมพีระมิดนี้ทำให้เราไม่ต้องกังวลกับการคำนวณเชิงเส้น การประมาณค่าหลายจุด: ง่ายกว่าในการหาระดับของปิรามิดมากขึ้นและในแต่ละระดับจะใช้การประมาณค่าฟังก์ชันนี้อย่างคร่าวๆ ดังนั้น OpenCV จึงคำนวณเพียงสองจุดที่อยู่ติดกัน ดังนั้น ที่เกี่ยวข้องกับการใช้อัลกอริทึมนี้ ข้อสรุปของเราเกี่ยวกับข้อได้เปรียบของฟังก์ชันการประมาณเหนืออนุพันธ์กลับไร้ประโยชน์: สำหรับจุดอ้างอิงจำนวนดังกล่าว อนุพันธ์เป็นฟังก์ชันการประมาณที่ดีที่สุด

มีอันไหนอีกบ้างคะ?

อัลกอริธึมนี้ไม่ใช่ตัวเลือกเดียวสำหรับการคำนวณการไหลของแสง ใน OpenCV นอกเหนือจากโฟลว์ของ Lucas-Kanade แล้ว ยังมีโฟลว์ Farneback และ SimpleFlow และอัลกอริทึม Horn–Shunck ก็มักถูกอ้างถึงเช่นกัน

วิธี ฮอร์น-ชุงค์มีลักษณะเป็นสากลมากกว่าวิธีลูคัส-คานาเดะ ขึ้นอยู่กับสมมติฐานที่ว่าการไหลของแสงจะค่อนข้างราบรื่นทั่วทั้งภาพ จากสมการเดียวกันนี้ ขอเสนอให้ย้ายไปยังฟังก์ชัน นั่นคือ เพื่อเพิ่มข้อกำหนดว่าไม่มีการเปลี่ยนแปลงอย่างกะทันหันในการเปลี่ยนแปลงด้วยค่าสัมประสิทธิ์การถ่วงน้ำหนัก α การลดฟังก์ชันนี้ลงทำให้เรามีระบบสมการสองสมการ:

ในสมการเหล่านี้ เสนอให้คำนวณ Laplacian โดยประมาณ: – ผลต่างกับค่าเฉลี่ย เราได้รับระบบสมการซึ่งเราเขียนสำหรับแต่ละพิกเซลและแก้ระบบโดยรวมซ้ำ ๆ :

ในอัลกอริธึมนี้ พวกเขายังแนะนำให้ใช้หลายสเกล และแนะนำให้ปรับขนาดรูปภาพไม่ 2 เท่า แต่คูณ 0.65

อัลกอริทึมนี้ถูกนำมาใช้ใน OpenCV เวอร์ชันแรก แต่ถูกละทิ้งในภายหลัง

ฟาร์เนแบ็คเสนอให้ประมาณการเปลี่ยนแปลงความเข้มในบริเวณใกล้เคียงโดยใช้รูปแบบกำลังสอง: I = xAx + bx + c ด้วยเมทริกซ์สมมาตร A (อันที่จริง เมื่อพิจารณาการขยายตัวของเทย์เลอร์จนถึงเทอมแรก เราจึงใช้การประมาณเชิงเส้น I = bx + c นั่นคือตอนนี้เราเพิ่งตัดสินใจเพิ่มความแม่นยำของการประมาณ) หากภาพเคลื่อนที่ภายในย่านนี้ เราก็แทนที่ส่วนขยายกำลังสอง เปิดวงเล็บ เราจะได้


.

ตอนนี้เราสามารถคำนวณค่าของ A, b, c ในรูปภาพทั้งสองได้ จากนั้นระบบนี้จะซ้ำซ้อนเมื่อเทียบกับ d (สมการแรกทำให้เกิดความสับสนเป็นพิเศษ) และโดยทั่วไป d สามารถหาได้จากสมการที่สอง: - เราต้องใช้การประมาณดังต่อไปนี้: - ให้เราแสดงถึงความเรียบง่ายด้วย แล้วเราจะได้เพียง .

เพื่อชดเชยเสียงรบกวนระหว่างการคำนวณ เรากลับไปสู่สมมติฐานอีกครั้งว่าในบริเวณใกล้เคียงกับจุดที่กำลังศึกษา ทุกจุดจะมีการเปลี่ยนแปลงที่เหมือนกันไม่มากก็น้อย ดังนั้นเราจึงรวมข้อผิดพลาดบนหน้าต่างเข้ากับค่าสัมประสิทธิ์การถ่วงน้ำหนักแบบเกาส์เซียนอีกครั้ง และค้นหาเวกเตอร์ d ที่ลดความคลาดเคลื่อนทั้งหมดนี้ให้เหลือน้อยที่สุด จากนั้นเราจะได้รับค่าที่เหมาะสมที่สุดและข้อผิดพลาดขั้นต่ำที่สอดคล้องกัน นั่นคือ เราจำเป็นต้องคำนวณแต่ละจุด เฉลี่ยเหนือหน้าต่าง กลับด้านเมทริกซ์ และรับผลลัพธ์ ดังนั้นผลิตภัณฑ์เหล่านี้สามารถคำนวณได้สำหรับทั้งภาพและสามารถใช้ค่าที่คำนวณไว้ล่วงหน้าสำหรับจุดต่าง ๆ ได้นั่นคือนี่เป็นกรณีที่สมเหตุสมผลในการคำนวณการไหลที่หนาแน่น

ตามปกติแล้ว อัลกอริธึมนี้มีการแก้ไขและปรับปรุงหลายประการ โดยหลักแล้วอนุญาตให้ใช้ข้อมูลนิรนัยที่รู้จัก ซึ่งเป็นการประมาณเบื้องต้นของโฟลว์ และอีกครั้ง เป็นแบบหลายสเกล

พื้นฐานของวิธีการ ซิมเพิลโฟลว์แนวคิดต่อไปนี้มีอยู่: หากเรายังไม่ทราบวิธีการกำหนดการเปลี่ยนแปลงที่ใหญ่กว่าขนาดของหน้าต่างที่เราค้นหาอนุพันธ์ แล้วทำไมต้องกังวลกับการคำนวณอนุพันธ์เลย มาหาจุดที่คล้ายกันที่สุดในหน้าต่างกัน! และเพื่อแก้ไขความคลุมเครือและชดเชยสัญญาณรบกวน เราคำนึงว่าการไหลนั้นต่อเนื่องและใกล้กับจุดที่กำหนด ทุกจุดมีการเปลี่ยนแปลงเกือบเท่ากัน และเราจะแก้ไขปัญหาเกี่ยวกับขนาดหน้าต่างอีกครั้งผ่านการปรับขนาดหลายขนาด

อัลกอริธึมที่เคร่งครัดยิ่งขึ้นมีลักษณะดังนี้: สำหรับทุกจุดในหน้าต่างจะมีฟังก์ชัน "พลังงาน" ที่รับผิดชอบ (โดยมีการพึ่งพาลอการิทึมผกผัน) สำหรับความน่าจะเป็นที่จุดเริ่มต้นจะเปลี่ยนไปยังจุดนี้: . ถัดไปจะพิจารณาการบิดของพลังงานนี้ด้วยหน้าต่างเกาส์เซียนและพบค่า (dx,dy) ที่ย่อฟังก์ชันนี้ให้เหลือน้อยที่สุด เพื่อให้ได้ความแม่นยำของพิกเซลย่อย จะมีการพิจารณาพื้นที่ใกล้เคียงเล็กๆ ของจุดที่เหมาะสมที่สุดที่พบ (dx,dy) และหาจุดสูงสุดของฟังก์ชันพลังงานซึ่งเป็นจุดสูงสุดของพาราโบลาลอยด์ และดังที่ได้กล่าวไปแล้ว ขั้นตอนนี้ดำเนินการกับปิรามิดของภาพที่ปรับขนาดแล้ว อัลกอริธึมของพวกเขายังเสนอวิธีการที่ชาญฉลาดในการเร่งการคำนวณ แต่ผู้ที่สนใจจะคิดออกเอง สิ่งที่สำคัญสำหรับเราคือด้วยเหตุนี้ อัลกอริธึมนี้ (ตามทฤษฎี) ค่อนข้างเร็วและมีความแม่นยำที่ดี และไม่มีปัญหาเช่นเดียวกับครั้งก่อน ๆ ยิ่งมีการเปลี่ยนแปลงมากเท่าไรก็ยิ่งตรวจพบได้แย่ลงเท่านั้น

จะเป็นอย่างไรถ้าเราไม่จริงจัง?

กล่าวไว้ข้างต้นว่าความสอดคล้องระหว่างจุดสามารถกำหนดได้ด้วยปริมาณที่ต่างกัน แล้วเหตุใดเราจึงพิจารณาเฉพาะความเข้มข้นเท่านั้น แต่เนื่องจากค่าอื่นๆ สามารถลดลงได้: เราเพียงกรองรูปภาพด้วยตัวกรองที่เหมาะสม และป้อนรูปภาพที่กรองไปยังอินพุตของอัลกอริทึมที่อธิบายไว้ข้างต้น ดังนั้น หากคุณต้องการใช้โฟลว์แบบออปติคัล ก่อนอื่นให้คิดว่าคุณลักษณะของภาพใดที่จะมีเสถียรภาพมากที่สุดในสภาวะของคุณ และดำเนินการกรองที่เหมาะสมเพื่อให้อินพุตของอัลกอริทึมไม่ใช่ความเข้ม แต่เป็นคุณลักษณะนี้

ฝึกฝน

เรามาลองใช้อัลกอริธึมที่ OpenCV เสนอให้เราในทางปฏิบัติ

ที่นี่คุณสามารถดำเนินการศึกษาที่แตกต่างกันมากมายเกี่ยวกับแต่ละอัลกอริธึม พารามิเตอร์ที่แตกต่างกัน การเปลี่ยนแปลงลำดับอินพุต - ด้วยการเปลี่ยนแปลง การหมุน การแปลงโปรเจ็กต์ที่แตกต่างกัน ส่วนต่างๆ ที่มีสัญญาณรบกวนที่แตกต่างกัน ฯลฯ การดำเนินการทั้งหมดนี้ใช้เวลานานและขนาดของรายงานจะ เกินกว่าบทความนี้ ดังนั้น ในที่นี้ ฉันขอเสนอให้จำกัดตัวเองอยู่เพียงกรณีง่ายๆ ของภาพคู่ขนานที่ขยับตามระยะทางคงที่และการวางสัญญาณรบกวนเล็กน้อย สิ่งนี้จะช่วยให้คุณเข้าใจในแง่ทั่วไปเกี่ยวกับวิธีการเรียกใช้อัลกอริธึมและอันไหนที่เจ๋งกว่า

ไวยากรณ์ของขั้นตอนต่างๆ ได้รับการอธิบายโดยละเอียดในหน้าพร้อมกับคู่มือนี้ ฉันจะให้คำแปลสรุปพร้อมความคิดเห็นของฉัน

Lucas-Kanade แบบคลาสสิกถูกนำมาใช้กับปิรามิดในขั้นตอน calcOpticalFlowPyrLK อัลกอริธึมจะคำนวณการไหลแบบกระจาย นั่นคือ สำหรับชุดของจุดที่กำหนดในภาพแรก มันจะประมาณตำแหน่งของพวกเขาในภาพที่สอง พารามิเตอร์อินพุตค่อนข้างชัดเจน: รูปภาพอินพุตสองรูป, ชุดอินพุตและเอาต์พุตของจุด, สถานะ - เวกเตอร์เอาต์พุตที่ระบุว่าพบจุดที่เกี่ยวข้องสำเร็จหรือไม่, ผิดพลาด - เวกเตอร์เอาต์พุตของข้อผิดพลาดโดยประมาณของจุดที่เกี่ยวข้อง, WinSize - ขนาดของหน้าต่างที่เกิดค่าเฉลี่ยแบบเกาส์ ฉันเอา 21x21 และทำงานได้ดี maxLevel – จำนวนเลเยอร์ในปิรามิดลบหนึ่ง นั่นคือจำนวนของเลเยอร์สุดท้าย ฉันเอา 5 เกณฑ์ – เงื่อนไขสำหรับการออก กระบวนการวนซ้ำในการพิจารณาการเปลี่ยนแปลง (การลดข้อผิดพลาดให้น้อยที่สุดทำซ้ำ) – ฉันปล่อยให้พารามิเตอร์นี้เป็นค่าเริ่มต้น แฟล็ก – แฟล็กเพิ่มเติม ตัวอย่างเช่น คุณสามารถใช้การประมาณโฟลว์เริ่มต้นหรือเลือกวิธีการประมาณค่าข้อผิดพลาด minEigThreshold – เกณฑ์การไล่ระดับสี ค่าด้านล่างซึ่งเมทริกซ์ถือเป็นเอกพจน์ ฉันปล่อยไว้ตามค่าเริ่มต้น ตั้งแต่ OpenCV 2.4.1 สามารถใช้พีระมิดที่คำนวณไว้ล่วงหน้าของรูปภาพที่ปรับขนาดแล้วในการคำนวณโฟลว์ได้

ผลลัพธ์ของงานคือตรวจจับทั้งกะเล็กและใหญ่ได้สำเร็จและเสถียร ทนทานต่อเสียงรบกวนที่ค่อนข้างใหญ่ เวลาทำงานประมาณ 10 ms สำหรับ 400 จุดด้วยปิรามิด 5 ชั้น (บนคอร์ i7 950)

อย่างไรก็ตาม อัลกอริธึมนี้ยังใช้กับ GPU (CUDA) ทั้งเวอร์ชันหนาแน่นและเบาบาง

โฟลว์ Farneback ถูกนำมาใช้โดยขั้นตอน calcOpticalFlowFarneback ซึ่งโฟลว์หนาแน่นจะถูกคำนวณ นั่นคือ การเปลี่ยนแปลงของแต่ละจุด พารามิเตอร์: รูปภาพอินพุต, สตรีมเอาต์พุตในรูปแบบของเมทริกซ์ลอยสองช่องสัญญาณ, pyr_scale กำหนดอัตราส่วนขนาดระหว่างชั้นของปิรามิด, ระดับ – จำนวนระดับในปิรามิด, ขนาด Winsize – ขนาดของหน้าต่างที่มีค่าเฉลี่ย ดำเนินการ, การวนซ้ำ – จำนวนการวนซ้ำในแต่ละระดับ, poly_n – ขนาดของพหุนามที่ใช้ประมาณค่าของ A และ b, poly_sigma – ซิกม่าของ Gaussian blur เมื่อปรับอนุพันธ์ให้เรียบ ค่าพารามิเตอร์ที่แนะนำ มีการระบุไว้ในคู่มือ แฟล็ก – แฟล็กเพิ่มเติม ตัวอย่างเช่น คุณสามารถใช้การประมาณเบื้องต้นของการไหลหรือค่าเฉลี่ยเหนือหน้าต่าง

อัลกอริธึมนี้มีความเสถียรน้อยกว่ามาก (ตามการสังเกตของฉัน) มันพลาดได้ง่ายกว่าในรูปภาพที่ค่อนข้างสม่ำเสมอ (เห็นได้ชัดว่าปัญหาคือการไม่มีการกรองจุดที่ไม่สำเร็จ) และตรวจไม่พบการเปลี่ยนแปลงขนาดใหญ่ได้ดี มันใช้งานได้สำหรับฉันใน 600 มิลลิวินาทีบนรูปภาพขนาด 512x512

โฟลว์ SimpleFlow ใช้ขั้นตอน calcOpticalFlowSF (อีกครั้ง โฟลว์หนาแน่นจะถูกคำนวณ) และมีพารามิเตอร์ลึกลับมากมายที่ไม่มีค่าเริ่มต้น และโดยทั่วไป ในขณะนี้ ข้อมูลบนเพจได้รับการจัดเตรียมไว้อย่างกระชับมาก ลองคิดดูสิ 3 ภาพแรกเป็นภาพอินพุตและเอาต์พุตสองช่องสัญญาณ เลเยอร์ – จำนวนเลเยอร์ในปิรามิด ซึ่งก็คือจำนวนครั้งที่เราปรับขนาดภาพต้นฉบับ averaging_block_size - ขนาดของหน้าต่างที่เราคำนวณฟังก์ชันพลังงานพิกเซล max_flow - การเปลี่ยนแปลงสูงสุดที่เราต้องการกำหนดในแต่ละขั้นตอน โดยพื้นฐานแล้วจะถูกกำหนดโดยขนาดหน้าต่าง (แม้ว่าจะยังไม่ชัดเจนว่าทำไมจึงเป็น int) คุณสามารถหยุดที่นี่หรือจะตั้งค่าพารามิเตอร์เพิ่มเติมอีกสองสามอย่างก็ได้ ซึ่งความหมายของบางส่วนก็หายไปจากฉัน

ไซต์นำเสนอตัวอย่างการใช้งานซึ่งมีการเปิดใช้งานด้วยพารามิเตอร์ต่อไปนี้: calcOpticalFlowSF(frame1, frame2, flow, 3, 2, 4, 4.1, 25.5, 18, 55.0, 25.5, 0.35, 18, 55.0, 25.5 , 10) ;

อัลกอริทึมของฉันทำงานช้ากว่าคนอื่นๆ มาก ประมาณ 9-12 วินาทีต่อรูปภาพขนาด 512x512 ผลลัพธ์ของงานดูเป็นไปได้มากกว่า Farneback อย่างน้อยที่สุดการเปลี่ยนแปลงของภาพที่สม่ำเสมอก็ถูกกำหนดได้ดีกว่า และทำงานได้ดีขึ้นอย่างเห็นได้ชัดกับการเปลี่ยนแปลงขนาดใหญ่

ข้อสรุป

หากคุณต้องการใช้การไหลแบบออปติคอลที่ไหนสักแห่ง ก่อนอื่นให้พิจารณาว่าคุณต้องการหรือไม่ เนื่องจากคุณมักจะใช้วิธีที่ง่ายกว่านี้ได้ การดำเนินการปรับใช้โฟลว์ด้วยตัวเองนั้นคุ้มค่าที่จะคิดไม่กี่ครั้ง: แต่ละอัลกอริธึมมีลูกเล่น รายละเอียดปลีกย่อย และการเพิ่มประสิทธิภาพมากมาย ไม่ว่าคุณจะทำอะไรก็ตาม มันคงจะทำงานได้ดีกว่าใน OpenCV (สมมติว่ามันอยู่ที่นั่นแน่นอน) ยิ่งไปกว่านั้น พวกเขาใช้ประโยชน์จากการปรับแต่งลอจิคัลและฮาร์ดแวร์อย่างเต็มที่ เช่น การใช้คำสั่ง SSE, มัลติเธรด, ความสามารถในการคำนวณด้วย CUDA หรือ OpenCL เป็นต้น หากคุณเพียงแค่ต้องคำนวณการเปลี่ยนแปลงของชุดจุดบางจุด (เช่น สตรีมแบบกระจาย) คุณก็ สามารถใช้ฟังก์ชัน calcOpticalFlowPyrLK ได้อย่างปลอดภัย ทำงานได้ดี เชื่อถือได้ และค่อนข้างเร็ว ในการคำนวณการไหลหนาแน่น ควรใช้ฟังก์ชัน calcOpticalFlowSF แต่จะช้ามาก หากประสิทธิภาพเป็นสิ่งสำคัญ ให้ calcOpticalFlowFarneback แต่คุณยังต้องตรวจสอบให้แน่ใจว่าผลลัพธ์ของงานจะเหมาะกับคุณ

เพิ่มแท็ก

1 Agafonov V.Y. 1

Agafonov Vladislav Yuryevich - นักศึกษาระดับบัณฑิตศึกษาของภาควิชา "การออกแบบโดยใช้คอมพิวเตอร์ช่วยและระบบการออกแบบการค้นหา", มหาวิทยาลัยเทคนิคแห่งรัฐโวลโกกราด,

โวลโกกราด คำอธิบายประกอบ:บทความนี้กล่าวถึงสองวิธีในการค้นหาค่าชดเชยระหว่างรูปภาพในสตรีมวิดีโอ วิธีแรกขึ้นอยู่กับการลดข้อผิดพลาดให้เหลือน้อยที่สุดโดยใช้วิธีกำลังสองน้อยที่สุดในการค้นหาการกระจัดของจุดสำคัญในภาพ แนวทางที่สองอิงจากการประมาณพื้นที่บางส่วนของแต่ละพิกเซลด้วยพหุนามกำลังสอง ซึ่งสามารถนำมาใช้ในการประมาณค่าการเคลื่อนไหวได้เป็นอย่างดี มีการอธิบายขั้นตอนหลักของการนำวิธีการไปใช้ ชุดทดสอบรูปภาพถูกจัดทำขึ้นโดยคำนึงถึงลักษณะเฉพาะของงาน นำเสนอผลการทดสอบเหล่านี้

คำสำคัญ: การประมวลผลภาพ การค้นหาการแทนที่รูปภาพ

การประยุกต์ใช้วิธีการไหลของแสงเพื่อประมาณค่าการเปลี่ยนภาพ

Agafonov V.U. 1

1 Agafonov Vladislav Urevich - นักศึกษาระดับบัณฑิตศึกษาของแผนก "ระบบการออกแบบโดยใช้คอมพิวเตอร์ช่วยและการออกแบบการค้นหา"

มหาวิทยาลัยเทคนิคแห่งรัฐโวลโกกราด, โวลโกกราด

เชิงนามธรรม: ในบทความนี้ จะอธิบายวิธีการประมาณค่าการเลื่อนของภาพไว้ วิธีแรกขึ้นอยู่กับการลดข้อผิดพลาดกำลังสองเฉลี่ยให้เหลือน้อยที่สุดเมื่อค้นหาการกระจัดของจุดสำคัญของรูปภาพ แนวทางที่สองขึ้นอยู่กับการประมาณพื้นที่ใกล้เคียงของทั้งสองเฟรมโดยใช้พหุนามกำลังสอง ซึ่งสามารถทำได้อย่างมีประสิทธิภาพโดยใช้การแปลงส่วนขยายพหุนาม มีการอธิบายขั้นตอนหลักของการนำวิธีการเหล่านี้ไปใช้ ชุดทดสอบรูปภาพจัดทำขึ้นโดยคำนึงถึงลักษณะเฉพาะของปัญหา มีการนำเสนอผลงาน

คำสำคัญ: การประมวลผลภาพ การประมาณค่าการเปลี่ยนภาพ

ยูดีซี 004.932.2

การแนะนำ

เมื่อแก้ไขปัญหาการมองเห็นของคอมพิวเตอร์ ปัญหาในการประมาณการเคลื่อนไหวของวัตถุในเฟรมหรือการกระจัดของสองเฟรมติดต่อกันในสตรีมวิดีโอมักเกิดขึ้น การประมาณค่าพารามิเตอร์การเคลื่อนไหวของฉากในเฟรมอย่างแม่นยำเป็นปัจจัยสำคัญสำหรับอัลกอริธึมจำนวนมาก ดังนั้นวิธีการตรวจจับการเคลื่อนไหวจึงต้องมีความแม่นยำระดับพิกเซลย่อย

มีหลายวิธีในการประมาณค่าการกระจัดของภาพ สิ่งสำคัญคือ: การระบุคุณสมบัติหลักในภาพ ตามด้วยการเปรียบเทียบจุดสำคัญ กำหนดความสัมพันธ์เฟสของการแสดงความถี่ของสัญญาณภาพและการไหลของแสง อย่างหลังในรูปแบบหลักไม่ได้ใช้เพื่อค้นหาการกระจัดของรูปภาพ แต่ใช้เพื่อกำหนดความเคลื่อนไหวในภาพ ดังนั้นการไหลของแสงจึงถูกนำมาใช้ในระบบสำหรับการตรวจจับและติดตามวัตถุ

การไหลของแสงคือรูปแบบของการเคลื่อนไหวที่ชัดเจนของวัตถุ พื้นผิว หรือขอบของฉากที่เกิดจากการเคลื่อนไหวสัมพัทธ์ของผู้สังเกตการณ์ (ตาหรือกล้อง) ที่สัมพันธ์กับฉาก อัลกอริธึมตามการไหลของแสง เช่น การตรวจจับการเคลื่อนไหว การแบ่งส่วนวัตถุ และการเข้ารหัสการเคลื่อนไหว ใช้การเคลื่อนไหวของวัตถุ พื้นผิว และขอบนี้

ในงานนี้จะมีการพิจารณาสองวิธี วิธีหนึ่งช่วยให้คุณได้รับการชดเชยสำหรับจุดสำคัญแต่ละจุด และวิธีที่สอง - สำหรับแต่ละพิกเซล

การไหลของแสงโดยวิธีลูคัส-คานาเดะ

แนวคิดพื้นฐานของวิธีนี้คือการถือว่าค่าพิกเซลย้ายจากเฟรมหนึ่งไปยังเฟรมถัดไปโดยไม่มีการเปลี่ยนแปลง:

ที่ไหน. โดยไม่สนใจเทอมที่เหลือเราจะได้สูตรสำหรับการประมาณ ????:

โดยจะกำหนดออฟเซ็ต ตามสมมติฐานที่เราทำไว้เราได้รับสิ่งนั้น จากนั้นเราเขียนสมการ (4) เป็น

ปรากฎว่าผลรวมของอนุพันธ์บางส่วนเป็นศูนย์ อย่างไรก็ตาม เนื่องจากเรามีสมการเดียวและไม่ทราบค่าสองค่า เราจึงต้องกำหนดเงื่อนไขเพิ่มเติม วิธีหนึ่งที่พบบ่อยคือกำหนดข้อจำกัดเกี่ยวกับพิกเซลใกล้เคียง สมมติว่าพิกเซลข้างเคียงเคลื่อนที่เท่ากัน แน่นอนว่าไม่สามารถมีออฟเซ็ตที่ตอบสนองทุกพิกเซลได้ ดังนั้นเราจึงลดข้อผิดพลาดให้เหลือน้อยที่สุดโดยใช้วิธีกำลังสองน้อยที่สุด

โดยที่คือเมทริกซ์สมมาตร เป็นเวกเตอร์ และเป็นสเกลาร์ ค่าสัมประสิทธิ์คำนวณโดยใช้กำลังสองน้อยที่สุดแบบถ่วงน้ำหนักสำหรับค่าสัญญาณในย่านใกล้เคียงที่กำหนด ฟังก์ชันการถ่วงน้ำหนักประกอบด้วยสององค์ประกอบที่เรียกว่าความแน่นอนและการบังคับใช้ ความแน่นอนสัมพันธ์กับค่าของสัญญาณตามค่าในพื้นที่ใกล้เคียง การบังคับใช้จะกำหนดการมีส่วนร่วมของคะแนนตามตำแหน่งในบริเวณใกล้เคียง โดยปกติแล้วจุดศูนย์กลางจะมีน้ำหนักมากที่สุด น้ำหนักของจุดที่เหลือจะลดลงในทิศทางในแนวรัศมี เนื่องจากภาพถูกขยายเป็นพหุนามกำลังสองในพื้นที่ใกล้เคียงบางแห่ง จึงจำเป็นต้องเข้าใจว่าพหุนามมีพฤติกรรมอย่างไรด้วยการกระจัดในอุดมคติ ให้พหุนามกำลังสองของรูปแบบ:

การเท่ากันค่าสัมประสิทธิ์ที่สอดคล้องกันของพหุนามกำลังสองที่เรามี:

สิ่งนี้เป็นจริงสำหรับสัญญาณใดๆ

เห็นได้ชัดว่าสมมติฐานที่ว่าสัญญาณสามารถแสดงด้วยพหุนามเดี่ยวนั้นค่อนข้างไม่สมจริง อย่างไรก็ตาม สามารถใช้ความสัมพันธ์ (10) กับสัญญาณจริงได้ แม้ว่าข้อผิดพลาดจะเกิดขึ้นก็ตาม คำถามหลักคือข้อผิดพลาดมีขนาดเล็กเพียงพอสำหรับอัลกอริธึมที่จะเป็นประโยชน์หรือไม่

ให้เราแทนที่การแทนค่าพหุนามสากลด้วยค่าท้องถิ่น มาคำนวณค่าสัมประสิทธิ์พหุนามสำหรับรูปภาพแรกและรูปภาพที่สองกัน ตาม (9) ควรจะเป็นเช่นนั้น แต่ในทางปฏิบัติจะใช้การประมาณ:

โดยที่สะท้อนถึงการแทนที่การกระจัดทั่วโลกด้วยการกระจัดที่แตกต่างกันในเชิงพื้นที่

ในทางปฏิบัติ สมการ (11) สามารถแก้ได้ทีละองค์ประกอบ แต่ผลลัพธ์ออกมามีเสียงรบกวนมากเกินไป ในทางกลับกัน มีการสันนิษฐานว่าขอบเขตการกระจัดเปลี่ยนแปลงช้าๆ เพื่อให้เราสามารถรวมข้อมูลโดยใช้พิกเซลข้างเคียงได้ ดังนั้นเราจึงพยายามค้นหาความพึงพอใจ (11) ในบริเวณใกล้เคียงหรือเป็นทางการมากขึ้น:

ปัญหาหลักของวิธีนี้คือการสันนิษฐานว่าพหุนามเหมือนกัน ยกเว้นออฟเซ็ต เนื่องจากการขยายพหุนามเฉพาะที่ของพหุนามจะเปลี่ยนไปตามสภาพแวดล้อม สิ่งนี้จะทำให้เกิดข้อผิดพลาดใน (11) สำหรับการกระจัดเล็ก ๆ สิ่งนี้ไม่สำคัญ แต่เมื่อการกระจัดเพิ่มขึ้น ข้อผิดพลาดก็จะเพิ่มขึ้น หากเรามีความรู้นิรนัยเกี่ยวกับอคติ เราสามารถเปรียบเทียบพหุนามสองตัวได้: อันแรกใน, อันที่สองใน โดยที่นี่คืออคติก่อนหน้า โดยปัดเศษเป็นค่าจำนวนเต็ม ด้วยวิธีนี้เราสามารถดำเนินการวิธีการซ้ำได้ อคติก่อนหน้าที่ดีกว่าหมายถึงอคติที่ค่อนข้างเล็ก ซึ่งจะเพิ่มโอกาสในการประมาณค่าอคติที่แท้จริงได้ดียิ่งขึ้น

การประยุกต์วิธีการไหลของแสงกับปัญหาการค้นหาการกระจัดของภาพ

เพื่อทดสอบวิธีการเหล่านี้ ได้ทำการทดสอบกับชุดข้อมูลปลอม เช่น ได้รับโดยใช้เครื่องกำเนิดภาพเอนเอียง เพื่อให้ได้พิกเซลย่อย พื้นที่ที่มีการเลื่อนเล็กน้อยสัมพันธ์กันจะถูกตัดออกจากภาพต้นฉบับ หลังจากนั้น รูปภาพทดสอบที่ได้จะถูกบีบอัดหลายครั้ง ข้อมูลบางส่วนจึงหายไป และการกระจัดก็ลดลงเหลือพิกเซลย่อย

สำหรับวิธีลูคัส-คานาเดะ จำเป็นต้องเลือกประเด็นสำคัญหลายประเด็น โดยจะต้องพบการกระจัด เพื่อจุดประสงค์นี้จึงใช้วิธีการค้นหาขอบเขตและมุมแบบคลาสสิก หลังจากได้รับการกระจัดของแต่ละจุดแล้ว จำเป็นต้องหาค่าเฉลี่ยผลลัพธ์ที่ได้

สำหรับวิธี Farneback ก็เพียงพอที่จะเฉลี่ยค่าการกระจัดในแต่ละพิกเซลแล้ว

การทดลองดำเนินการกับตัวอย่างคู่ทดสอบ 20 คู่ และคำนวณค่าเบี่ยงเบนมาตรฐานสำหรับแต่ละวิธี

OP ลูคัส-แคนาดา

โอพี ฟาร์เนบาก้า

ตารางที่ 1 - ค่าเบี่ยงเบนมาตรฐานของการกระจัด

จากผลการทดลองจะเห็นได้ว่าทั้งสองวิธีประมาณการการกระจัดของภาพด้วยความแม่นยำสูง ผลลัพธ์ของวิธีการของ Farneback จะแสดงผลลัพธ์ที่แย่กว่า เนื่องจากวิธีนี้จะประมาณการกระจัดของพิกเซลทั้งหมด และอาจทำให้เกิดข้อผิดพลาดในส่วนที่มีสีเดียวของภาพ

แต่ละวิธีมีข้อดีและข้อเสีย รวมถึงขอบเขตและข้อจำกัดในตัวเอง วิธีลูคัส-คานาเดะใช้การไหลของแสงแบบกระจัดกระจายและ

สามารถบรรลุความแม่นยำของพิกเซลย่อยได้ แต่ด้วยการเคลื่อนที่แบบไม่ขนานกับระนาบ ปัญหาอีกประการหนึ่งก็เกิดขึ้น: จะประเมินการกระจัดของจุดที่ไม่สำคัญได้อย่างไร แนวทางแรกคือการสร้างแผนภาพโวโรนอยสำหรับระนาบภาพโดยมีประเด็นสำคัญที่กำหนด แนวทางนี้ตั้งอยู่บนสมมติฐานว่าพื้นที่ที่อยู่ใกล้กับจุดสำคัญเคลื่อนที่ในลักษณะเดียวกับจุดสำคัญ โดยทั่วไปสิ่งนี้ไม่เป็นความจริงเสมอไป ในทางปฏิบัติ จุดสำคัญส่วนใหญ่จะเน้นที่วัตถุที่มีรายละเอียด ดังนั้นการกระจัดของพื้นที่สีทึบจะมีข้อผิดพลาดอย่างมาก วิธีที่สองคือค้นหาความคล้ายคลึงกันของภาพสองภาพ วิธีแก้ปัญหานี้ยังได้รับผลกระทบจากการประมาณค่าการกระจัดที่ขอบของภาพอย่างไม่ถูกต้องอีกด้วย

ข้อดีของวิธีการไหลของแสง Farneback คือสามารถพบการกระจัดของแต่ละพิกเซล อย่างไรก็ตาม วิธีนี้ยังทำให้เกิดข้อผิดพลาดกับวัตถุเป็นระยะและมีพื้นผิวไม่ชัดเจน แต่ช่วยให้เราประเมินการเคลื่อนที่ที่ไม่ใช่ระนาบขนานได้

บทสรุป

บทความนี้กล่าวถึงวิธีการประมาณค่าการกระจัดของภาพตามวิธีการไหลของแสง การบังคับใช้วิธีการได้รับการพิสูจน์แล้วและนำเสนอผลลัพธ์ของการวิเคราะห์เปรียบเทียบ การศึกษาทดลองวิธีการต่างๆ แสดงให้เห็นว่าวิธีการนี้มีความแม่นยำสูงและสามารถใช้ในการประมาณค่าพารามิเตอร์การเคลื่อนไหวของฉากได้

อ้างอิง/ อ้างอิง

  1. Fleet D., Weiss Y. การประมาณค่าการไหลด้วยแสง // คู่มือแบบจำลองทางคณิตศาสตร์ในคอมพิวเตอร์วิทัศน์ - Springer US, 2006. - หน้า 237-257.
  2. Farnebäck G. การประมาณค่าการเคลื่อนที่แบบสองเฟรมโดยอาศัยการขยายพหุนาม // การวิเคราะห์รูปภาพ - พ.ศ. 2546. - หน้า 363-370.

นี่คือการแสดงร่องรอยการเคลื่อนไหวของวัตถุ พื้นผิว และขอบของฉากที่มองเห็นได้ ซึ่งสังเกตได้เมื่อมีการเคลื่อนไหวสัมพันธ์กันระหว่างผู้สังเกตการณ์ (เช่น ดวงตาของมนุษย์หรือกล้อง) และฉากนั้น

แนวคิดเรื่องการไหลของแสงถูกเสนอโดยนักจิตวิทยาชาวอเมริกัน เจมส์ เจ. กิบสัน ในคริสต์ทศวรรษ 1940 เพื่ออธิบายสิ่งเร้าทางการมองเห็น (สัญญาณ) ที่เกิดขึ้นในสัตว์ที่เคลื่อนที่ในอวกาศโดยสัมพันธ์กับสภาพแวดล้อมของพวกมัน

James Gibson เน้นย้ำถึงความสำคัญของการไหลของแสงสำหรับความสามารถในการรับรู้ ความสามารถในการแยกแยะข้อจำกัด และโอกาสในการดำเนินการในสภาพแวดล้อม ผู้ติดตามหุ่นยนต์ของกิ๊บสันและแนวทางทางนิเวศวิทยาของเขาในด้านจิตวิทยาในเวลาต่อมาสามารถแสดงบทบาทของตัวกระตุ้นการไหลของแสงในการรับรู้การเคลื่อนไหวของผู้สังเกตการณ์ที่สัมพันธ์กับโลกโดยรอบ การรับรู้รูปร่าง ระยะห่าง และการเคลื่อนที่ของวัตถุโดยรอบ และการควบคุมการเคลื่อนไหว

เมื่อเร็วๆ นี้ วิทยาการหุ่นยนต์ได้เลือกใช้คำศัพท์การไหลด้วยแสงเพื่อรวมเทคนิคที่เกี่ยวข้องสำหรับการประมวลผลภาพและการควบคุมการนำทาง เช่น การตรวจจับการเคลื่อนไหว การแบ่งส่วนวัตถุ ข้อมูลการสัมผัสเวลา การคำนวณการขยายโฟกัส ความส่องสว่าง การเข้ารหัสชดเชยการเคลื่อนไหว และสเตอริโอ การวัดความแตกต่าง

เมื่อเร็วๆ นี้ คำว่าการไหลของแสงได้รับความร่วมมือจากนักวิทยาการหุ่นยนต์เพื่อรวมเทคนิคที่เกี่ยวข้องสำหรับการประมวลผลภาพและการควบคุมการนำทาง เช่น การตรวจจับการเคลื่อนไหว การแบ่งส่วนวัตถุ ข้อมูลเวลาในการสัมผัส จุดเน้นของการคำนวณการขยาย ความส่องสว่าง การเข้ารหัสการชดเชยการเคลื่อนไหว และ การวัดความไม่เท่าเทียมกันของสเตอริโอ

การคำนวณ

ลำดับของภาพที่เรียงลำดับทำให้สามารถประมาณการเคลื่อนไหวได้ ไม่ว่าจะเป็นความเร็วของภาพทันที หรือเป็นค่าแยกของการกระจัดของภาพ มีสื่อการสอนในรูปแบบของบทเรียนเกี่ยวกับวิธีการไหลของแสงตามการไล่ระดับสี นักวิจัยยังได้วิเคราะห์การเปรียบเทียบเทคนิคการไหลของแสงต่างๆ และวิเคราะห์ความแม่นยำและความถี่ของการวัด

วิธีการคำนวณการเคลื่อนที่ด้วยแสงจะพยายามประมาณการเคลื่อนไหวระหว่างเฟรมภาพสองเฟรมที่เห็นในช่วงเวลาหนึ่ง ทีและในแต่ละตำแหน่งวอเซล วิธีการดังกล่าวเรียกว่าดิฟเฟอเรนเชียลเนื่องจากขึ้นอยู่กับการประมาณค่าเฉพาะของอนุกรมเทย์เลอร์สำหรับสัญญาณภาพ กล่าวคือ ใช้อนุพันธ์บางส่วนเกี่ยวกับพิกัดเชิงพื้นที่และพิกัดเวลา

สำหรับกรณีมิติ 2D+ ที(เหมือนกันสำหรับ 3D หรือ ไม่มีกรณี) ตำแหน่งของว็อกเซลที่มีความเข้มที่จะเคลื่อนที่ต่อไป และระหว่างสองเฟรมภาพ และด้วยข้อจำกัดที่ตามมา ความสม่ำเสมอของความสว่างข้อจำกัดด้านความมั่นคง) สามารถเขียนได้:

สมมติว่าการเคลื่อนไหวไม่มีนัยสำคัญ เมื่อคำนวณการประมาณภาพโดยใช้อนุกรม Taylor เราจะได้:

… (สมาชิกลำดับที่สูงกว่า)

จากสมการเหล่านี้มีดังนี้:

ส่งผลให้

โดยที่สิ่งเหล่านี้คือส่วนประกอบและความเร็วหรือการไหลของแสง และเป็นอนุพันธ์ของภาพในทิศทางที่สอดคล้องกัน และสามารถเขียนเพิ่มเติมเพื่อหาอนุพันธ์ได้

ดังนั้น:

สมการที่มีไม่ทราบค่าสองตัวนี้ไม่สามารถแก้ไขได้เช่นนี้ สิ่งนี้เรียกว่า ปัญหารูรับแสง (ไดอะแฟรม)อัลกอริธึมการไหลของแสง ในการคำนวณการไหลของแสง จำเป็นต้องใช้ชุดสมการอื่น โดยระบุตามเงื่อนไขเพิ่มเติมบางประการ วิธีการคำนวณการไหลเชิงแสงทั้งหมดจะมีเงื่อนไขเพิ่มเติมสำหรับการประมาณการไหลจริง

เซ็นเซอร์วัดการไหลของแสง

เซ็นเซอร์วัดการไหลแบบออปติคัลเป็นเซ็นเซอร์วิชันที่สามารถวัดการไหลของแสงหรือการเคลื่อนไหวของภาพ และสร้างผลการวัดตามการไหลของแสง เซ็นเซอร์ดังกล่าวมีการกำหนดค่าที่แตกต่างกันมากมาย นี่อาจเป็นเซ็นเซอร์ภาพที่เชื่อมต่อกับโปรเซสเซอร์ซึ่งโปรแกรมอัลกอริธึมการไหลของแสงถูกตั้งโปรแกรมไว้ การกำหนดค่าอีกอย่างหนึ่งใช้ชิปวิชันซิสเต็มที่ออกแบบมาเป็นวงจรรวมที่มีทั้งเซ็นเซอร์และโปรเซสเซอร์บนชิปตัวเดียวในอุปกรณ์ขนาดกะทัดรัด ตัวอย่างนี้คือเซ็นเซอร์ออปติคัลเมาส์ทั่วไปที่ใช้ในเมาส์ออปติคัล ในบางกรณี วงจรคำนวณที่ใช้วงจรสัญญาณผสมแอนะล็อกสามารถใช้เพื่อคำนวณการไหลของแสงอย่างรวดเร็วโดยสิ้นเปลืองกระแสไฟน้อยที่สุด

การวิจัยด้านหนึ่งในปัจจุบันคือการใช้เทคนิคทางวิศวกรรมนิวโรมอร์ฟิกเพื่อใช้วงจรที่รับรู้การไหลของแสงและสามารถใช้เป็นเซ็นเซอร์ออปติคัลได้ วงจรดังกล่าวนำแนวคิดจากโครงข่ายประสาทเทียมทางชีวภาพและตรวจจับการไหลของแสงโดยใช้หลักการที่คล้ายกัน

รูปภาพที่เกี่ยวข้อง

การไหลของแสงคือภาพการเคลื่อนไหวที่ชัดเจนของวัตถุ พื้นผิว หรือขอบของฉากอันเป็นผลจากการเคลื่อนไหวของผู้สังเกต (ตาหรือกล้อง) ที่สัมพันธ์กับฉากนั้น อัลกอริธึมตามการไหลของแสง เช่น การตรวจจับการเคลื่อนไหว การแบ่งส่วนวัตถุ การเข้ารหัสการเคลื่อนไหว และการคำนวณความไม่เท่าเทียมกันทางสเตอริโอ ใช้ประโยชน์จากการเคลื่อนไหวของวัตถุ พื้นผิว และขอบนี้

การประมาณการไหลของแสง

วิธีการแบบอิงการไหลของแสงจะคำนวณการเคลื่อนไหวระหว่างสองเฟรมที่ถ่ายในเวลาชั่วขณะและที่แต่ละพิกเซล วิธีการเหล่านี้เรียกว่าดิฟเฟอเรนเชียลเนื่องจากจะขึ้นอยู่กับการประมาณสัญญาณเซ็กเมนต์ของอนุกรมเทย์เลอร์ ดังนั้นพวกเขาจึงใช้อนุพันธ์บางส่วนตามเวลาและพิกัดเชิงพื้นที่

ในกรณีของมิติ 2D+ ที(กรณีที่มีขนาดสูงกว่าจะคล้ายกัน) พิกเซลที่ตำแหน่งที่มีความเข้มในเฟรมเดียวจะถูกย้ายไปยัง และสามารถเขียนสมการต่อไปนี้ได้

สมมติว่าการกระจัดมีขนาดเล็กและใช้อนุกรม Taylor เราจะได้:

จากความเท่าเทียมกันเหล่านี้มีดังนี้:

จากที่นี่ปรากฎว่า

ส่วนประกอบความเร็วการไหลของแสงใน

ได้ภาพมาในทิศทางที่สอดคล้องกัน

ดังนั้น:

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

วิธีการพิจารณาการไหลของแสง:

    ความสัมพันธ์ของเฟสคือการผกผันของสเปกตรัมข้ามที่ทำให้เป็นมาตรฐาน

    วิธีการบล็อก - ลดผลรวมของกำลังสองหรือผลรวมของโมดูลัสของความแตกต่าง

    วิธีการเชิงอนุพันธ์สำหรับการประมาณค่าการไหลของแสงโดยอิงจากอนุพันธ์ย่อยของสัญญาณ:

    อัลกอริธึมของลูคัส - คานาเดะ - พิจารณาบางส่วนของภาพและแบบจำลองการเคลื่อนไหว

    Horn–Shunck - การลดฟังก์ชันที่อธิบายการเบี่ยงเบนจากการสันนิษฐานของความสว่างคงที่และความราบรื่นของสนามเวกเตอร์ที่เกิดขึ้น

    Buxton–Buxton - ขึ้นอยู่กับแบบจำลองการเคลื่อนที่ของขอบเขตวัตถุในลำดับภาพ

    วิธีการแปรผันทั่วไปคือการดัดแปลงวิธี Horn-Schunck ที่ใช้ข้อจำกัดด้านข้อมูลที่แตกต่างกันและข้อจำกัดด้านความเรียบที่แตกต่างกัน

    วิธีการปรับให้เหมาะสมแบบแยกส่วน - พื้นที่ค้นหาจะถูกกำหนดปริมาณ จากนั้นแต่ละพิกเซลของรูปภาพจะถูกกำหนดป้ายกำกับเพื่อให้ระยะห่างระหว่างเฟรมต่อเนื่องกันมีน้อยที่สุด วิธีแก้ปัญหาที่ดีที่สุดมักพบโดยใช้อัลกอริธึมในการค้นหาการตัดขั้นต่ำและการไหลสูงสุดในกราฟ การโปรแกรมเชิงเส้น หรือการเผยแพร่ความเชื่อ

การติดตามการไหลของแสงมักใช้กับกล้องแบบคงที่ เช่น กล้องในสนามบินหรืออาคาร หรือกล้องติดรถยนต์

ในงานนี้มีการใช้วิธีการโดยใช้อัลกอริธึม Lucas-Kanade (รูปที่ 4-6)

ข้าว. 4 หน้าต่างหลักของโมเดล



ข้าว. 5 บล็อกโมเดล

ข้าว. 6 ผลลัพธ์ของแบบจำลอง

โมเดลนี้ใช้วิธีการประมาณค่าการไหลของแสงเพื่อกำหนดเวกเตอร์การเคลื่อนไหวในแต่ละเฟรมของไฟล์วิดีโอ ด้วยการจำกัดและประมาณเวกเตอร์การเคลื่อนไหวตามสัณฐานวิทยา โมเดลจะสร้างภาพลักษณะไบนารี โมเดลจะค้นหารถยนต์ในแต่ละอิมเมจไบนารี่ผ่านบล็อก "Blob Analysis" จากนั้นบล็อก Draw Shapes จะวาดรูปสี่เหลี่ยมสีเขียวรอบๆ รถยนต์ที่ผ่านเส้นสีขาว

ข้อเสียของวิธีนี้คือกล้องจะต้องอยู่กับที่ ไม่เช่นนั้นผลลัพธ์ของการจดจำและการติดตามจะไม่สามารถคาดเดาได้