โครงการด้านคอมพิวเตอร์วิทัศน์

คลัง GitHub ของโครงการ

เกี่ยวกับ

คลังนี้นำเสนอโครงการเขียนโค้ดทั้งหมด (ห้องปฏิบัติการ) ที่ Mehmet และ Jean ได้ทำระหว่างลงทะเบียนเรียนใน CSCI437 ในภาคการศึกษาฤดูใบไม้ร่วง ปี 2020 ที่ Colorado School of Mines ครอบคลุมช่วงเวลาตั้งแต่ 28 สิงหาคม 2020 ถึง 14 ธันวาคม 2020 ห้องปฏิบัติการเหล่านี้เป็นแพลตฟอร์มที่ครอบคลุมสำหรับการเรียนรู้ Python, OpenCV และแนวคิดพื้นฐานด้านคอมพิวเตอร์วิทัศน์

เกี่ยวกับชั้นเรียน

ฉันเรียนวิชา บทนำสู่คอมพิวเตอร์วิทัศน์ (CSCI437) ในภาคการศึกษาฤดูใบไม้ร่วง ปี 2020 ในช่วงเวลานี้ Dr. William Hoff และ Dr. Tom Williams เป็นผู้สอนวิชานี้ CSCI437 ต่อไปนี้คือคำอธิบายอย่างเป็นทางการของชั้นเรียนสำหรับ CSCI437:

(I) Computer vision is the process of using computers to acquire images, transform images, and extract symbolic descriptions from images. This course provides an introduction to this field, covering topics in image formation, feature extraction, location estimation, and object recognition. Design ability and hands-on projects will be emphasized, using popular software tools. The course will be of interest both to those who want to learn more about the subject and to those who just want to use computer imaging techniques. Must be Senior level standing. 3 hours lecture; 3 semester hours. Prerequisite: (MATH201 or MATH334 or EENG311),and,MATH332,and,(CSCI200 or CSCI261).

เครดิต

มีสคริปต์ Python และ/หรือส่วนของโค้ดที่ได้รับจากชั้นเรียน CSCI437 ระหว่างการบรรยาย ในสไลด์ หรือผ่าน Canvas ชั้นเรียน CSCI437 จัดขึ้นที่ Colorado School of Mines ห้องปฏิบัติการเหล่านี้ทำร่วมกับพันธมิตรดังต่อไปนี้:

  • Jean Duong
  • Mehmet Yilmaz

คำอธิบายห้องปฏิบัติการ

ห้องปฏิบัติการ 1

ห้องปฏิบัติการ 1 มุ่งเน้นพื้นฐานการใช้ OpenCV ร่วมกับ Python ผู้เข้าร่วมต้องเขียนโปรแกรม Python ที่อ่านไฟล์วิดีโอ ฉายจุดสี่จุดซึ่งเป็นมุมของสี่เหลี่ยมจัตุรัสลงบนแต่ละเฟรมของวิดีโอ และจำลองให้สี่เหลี่ยมจัตุรัสถอยห่างออกไปโดยการปรับพิกัด Z ของแต่ละจุดทีละน้อย นอกจากนี้ ต้องแสดงหมายเลขเฟรมในแต่ละเฟรม และอัปโหลดวิดีโอสุดท้ายที่มีการซ้อนทับกราฟิกเพื่อรับการประเมิน

ห้องปฏิบัติการ 2

ห้องปฏิบัติการ 2 เกี่ยวข้องกับการแปลงภาพ โดยมุ่งเน้นเฉพาะการหมุนรอบแกน X, Y และ Z โดยใช้รูปแบบ “มุมคงที่ XYZ” นักศึกษาต้องคำนวณเมทริกซ์การหมุน คำนวณเมทริกซ์การแปลงแบบเอกพันธ์สำหรับท่าทางของกล้อง สร้างเมทริกซ์การปรับเทียบ และฉายจุดลงบนภาพเพื่อสร้างวัตถุที่คุ้นเคยโดยใช้ฟังก์ชัน line ของ OpenCV ห้องปฏิบัติการนี้เน้นความเข้าใจเกี่ยวกับเรขาคณิตของกล้องและเมทริกซ์การแปลงในคอมพิวเตอร์วิทัศน์

ห้องปฏิบัติการ 3

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

ห้องปฏิบัติการ 4

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

ห้องปฏิบัติการ 5

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

ห้องปฏิบัติการ 6

ห้องปฏิบัติการ 6 สอนให้นักศึกษาตรวจจับและคำนวณท่าทางของเป้าหมายที่ประกอบด้วยวงกลมศูนย์กลางร่วมที่มีความเปรียบต่างกันห้าวง (CCC) ในภาพ งานนี้เกี่ยวข้องกับการใช้ OpenCV เพื่อตรวจจับเป้าหมาย CCC จัดลำดับเป้าหมายให้ถูกต้อง คำนวณท่าทางด้วยฟังก์ชัน solvePnP() ของ OpenCV และวาดแกนพิกัดกับท่าทางลงบนภาพ ห้องปฏิบัติการนี้เน้นการประยุกต์ใช้แนวคิดต่าง ๆ เช่น การตรวจจับเป้าหมาย การประมาณท่าทาง และการจัดรูปแบบผลลัพธ์เชิงภาพในคอมพิวเตอร์วิทัศน์

ห้องปฏิบัติการ 7

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

ห้องปฏิบัติการ 8

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

ห้องปฏิบัติการ 9

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

ห้องปฏิบัติการ 10

ห้องปฏิบัติการ 10 อุทิศให้กับการใช้การแปลงฮัฟเพื่อค้นหาส่วนของเส้นตรงและระบุกลุ่มเส้นตรงขนานภายในภาพ โดยใช้การแปลงฮัฟแบบความน่าจะเป็นผ่านฟังก์ชัน cv2.HoughLinesP() ของ OpenCV เพื่อตรวจจับส่วนของเส้นตรงที่แสดงด้วยจุดปลาย ห้องปฏิบัติการนี้ยังเกี่ยวข้องกับการระบุจุดรวมสายตาโดยวิเคราะห์เวกเตอร์ทิศทางของส่วนของเส้นตรงเหล่านี้ โดยมีเป้าหมายเพื่อทำความเข้าใจแนววางของเส้นตรงขนานในปริภูมิ 3 มิติเมื่อปรากฏบนระนาบภาพ 2 มิติ นักศึกษาต้องประมวลผลภาพทดสอบเพื่อค้นหาส่วนของเส้นตรงขนาน ทดลองใช้พารามิเตอร์เพื่อเพิ่มประสิทธิภาพการตรวจจับ และส่งผลลัพธ์พร้อมโปรแกรม Python

หมายเหตุ

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