Computer Vision

Table of Contents
  1. Syllabus (course outline)

  2. Presentation slides
    1. Course Format (full, 3 per page, 4 per page, 6 per page)
    2. Introduction to Computer Vision (full, 3 per page, 4 per page, 6 per page)
    3. Image Processing Part I (full, 3 per page, 4 per page (NEW PAGE ARRANGEMENT), 6 per page)
    4. Linear Algebra Review Part I (full, 4 per page, 6 per page)
    5. Geometrical Transformation by Dr. Octavia Camps (full, 4 per page, 6 per page)
    6. Image Formation and Camera Model by Dr. Octavia Camps (full, 4 per page, 6 per page)
    7. Linear Filtering and Gaussian Filter (full, 4 per page, 6 per page)
    8. Image Pyramid-Tree: Gaussian, Laplacian-Difference of Gaussian, Wavelet (full, 4 per page, 6 per page)
    9. Introduction to Project Development in CV [UPDATED, in-class version] (full, 4 per page, 6 per page)
    10. Introduction to Project Development in CV Part 2 (full, 4 per page, 6 per page)
    11. Features Detection and Matching Part I (full, 4 per page, 6 per page)
    12. Features Detection and Matching Part II (full4 per page6 per page)
    13. OpenCV and Python Programming Part 3 (full4 per page6 per page)
      [Code Example: Otsu Threshold, Gaussian smoothing]
    14. Feature Detection and Matching Part III: Edge Detection (full, 4 per page, 6 per page)
    15. Special Topic: Learning to Detect Natural Image Boundaries Using Local Brightness, Color and Texture Cues by David R. Martin, Charless C. Fowlkes, Jitendra Malik
    16. Region connectivity, Region Growing, Image Labeling, and Region Properties (full, 4 per page, 6 per page)

    17. Take a Look at Other People's Work (full, 4 per page, 6 per page)
    18. Some OpenCV Features Part I (full, 4 per page, 6 per page)
      นักศึกษาสามารถดูโค้ดตัวอย่างได้จาก 'ตัวอย่างโปรแกรมไพธอน' ด้านล่าง

    19. สไลด์สัปดาห์นี้เป็นเรื่องภาพรวมของการทำ segmentation ผมขอใช้สไลด์ของคุณ Bastian Leibe เพราะทำได้ดีมาก
      (อันที่จริง ผมตัดสไลด์คุณ Bastian Leibe มาใช้ในคลาสก่อนหน้าอยู่สองสามครั้ง)
      ศำหรับส่วนนี้เนื้อหาก็แบ่งเป็นสองส่วนด้วยกัน
      1. ส่วนแรก (full page, 6 per page)
      2. ส่วนที่สอง (full page, 6 per page)


    20. K-Means Demo (full page, 4 per page, 6 per page) มีโค้ดตัวอย่างให้ทางด้านใต้ (หัวข้อ 4.9)

    21. Image-Rotation Demo (full page, 4 per page, 6 per page)
      Additional material: Observation on Python speed improvement by changing object values, instead of creating a new one.

    22. Image-Rotation Demo Part II (a simple, effective anti-alias method) (full page, 4 per page, 6 per page)

    23. Eigenface (full page4 per page, 6 per page)


  3. Homework
    1. Homework 1 (New version, less work, more points, revise Problems 1c for clarity and 2c for less computation)
      check here if you need the old version

    2. เฉลยการบ้านครั้งที่หนึ่ง
    3. Homework 2 และ ภาพสำหรับการทดสอบ (ภาพจากฐานข้อมูลการแยกพื้นที่ภาพของ University of California at Berkeley)
      เฉลยการบ้าน

      ประกาศเกี่ยวกับข้อคะแนนพิเศษ (เขียนโปรแกรม K-Means)


  4. Programming Projects and Related Materials
    1. เอกสารเกี่ยวกับระบบซอฟต์แวร์ที่ใช้ในการเรียนการสอน
    2. เกริ่นนำเรื่องการเขียนโปรแกรมด้วยไพธอน
    3. ดาวน์โหลดลินุกซ์ฉบับ VirtualBox Guest Operating System (ใหญ่มาก-2.7GB ควรดาวน์โหลดด้วยสายแลนจากภายในภาควิชา หรือก๊อปต่อจากเพื่อนที่ดาวน์โหลดแล้ว) [UPDATED: 30 มิ.ย. แก้ไขระบบลินุกซ์เล็กน้อย ตัวใหม่นี้ 'น่าจะ' ใช้กับ Mac OSX Intel ได้แล้ว]
    4. VirtualBox สำหรับเรียกใช้ลินุกซ์ในฐานะ Guest operating system (เลือกเวอร์ชันให้ตรงกับ OS ที่เราใช้; Host หมายถึง OS หลักของเครื่องเรา)
    5. รายชื่อกลุ่มและสมาชิกโปรเจ็ค มีทั้งหมด 14 กลุ่ม รวมทั้งหมด 35 คน ไม่ขาดไม่เกินจากที่ลงทะเบียนไว้ ขอบคุณนักศึกษาทุกท่านสำหรับข้อมูล

    6. รายละเอียดโครงงาน 1 และ ภาพอินพุต
      [แก้ไขเพิ่มเติม 15 ก.ค.:
       แก้คำผิดตรงข้อ 3.c. จาก '
      ผลลัพธ์มีทั้งหมดหกภาพ' ไปเป็น 'ผลลัพธ์จากอินพุตแต่ละอันมีทั้งหมดหกภาพ รวมภาพผลลัพธ์ทั้งหมดที่ต้องรายงานเป็นสิบสองภาพ'
       เพิ่มหมายเหตุ ตรงข้อ 4.c. เพื่อกำหนดให้พื้นที่นอกรูปหลักเป็นศูนย์ (ต้องการให้พื้นที่ outlier เป็นสีดำ)]

    7. รายละเอียดโครงงาน 2 และ ภาพอินพุต
      [ในภาพอินพุตจะมี pose0.png มาให้ด้วย ไฟล์นี้ไม่เกี่ยวกับตอนส่งงาน แต่เป็นไฟล์ที่เหมาะกับการทดสอบว่าผลลัพธ์เราถูกต้องหรือไม่
       อนึ่งภาพ poseN.png มีตำหนิที่ผมจงใจใส่ลงไปเล็กน้อย เพื่อการทดสอบว่าวิธีการทนกับของพวกนี้ได้]

    8. รายละเอียดโครงงาน 3 และ ภาพอินพุต 1 และ ภาพอินพุต 2

    9. ตัวอย่างโปรแกรมไพธอน
      1. อ่านและแสดงรูป (image_basic.py)

      2. การทำเธรสโฮลอย่างง่ายสามแบบ
        ไพธอนบริสุทธิ์ (threshold_pure_python.py)
        ไพธอนกับโอเพนซีวี (threshold_opencv.py)
        ไพธอนผสมภาษาซี (threshold_c_binding.py)
        เพื่อให้เห็นความแตกต่างด้านความเร็ว ขอเชื้อเชิญนักศึกษาให้ทดสอบกับภาพสแกนอันนี้

      3. การเธรสโฮลภาพด้วยวิธีของโอซึ (opencv_otsu.py)

      4. พื้นฐานการกรองภาพเพื่อลดสัญญาณรบกวน (opencv_filter.py ในตัวอย่างใช้ Gaussian filter แต่เราสามารถเปลี่ยนฟิลเตอร์ได้ผ่านพารามิเตอร์)

      5. การใช้ morphological Operators (close_pizza.py และ open_pocky.py)
        ภาพตัวอย่าง art3.png และ art4.png
        หมายเหตุ ภาพตัวอย่างมีที่มาจาก Hypermedia Image Processing Learning Reference 2 (HIPR2) แต่เนื่องจากภาพต้นฉบับเป็นฟอร์แมต GIF และ OpenCV ไม่สนับสนุนฟอร์แมตนี้ ผู้สอนจึงได้ทำการแปลงฟอร์แมตเป็นแบบ PNG

      6. การทำ Perspective Projection (perspective_transform.py)

      7. การวาดเส้นตรงและวงรีใน Python ด้วย OpenCV (draw_exercise.py)

    10. ตัวอย่างโปรแกรมภาษา C++
      1. โปรแกรมทำ k-means clustering ค่าสี
      2. โปรแกรมหมุนภาพ (หมายเหตุ โปรแกรมนี้หมุนภาพแบบมีรูเกิดขึ้นอยู่ ยังไม่ได้ทำการหมุนแบบ inverse mapping)


  5. Exams
    1. Quiz 1, Solution

    2. แนะนำเนื้อหาในการสอบพร้อมแนะนำโครงงานหนึ่งเพิ่มเติม
      คำสั่งในข้อสอบกลางภาค อ่านไว้ตอนนี้ก่อนตอนสอบจะได้ไม่ต้องอ่าน เริ่มทำได้ทันที
       

    3. Quiz 2, Solution (คะแนน)

    4. ประกาศเกี่ยวกับการสอบ วันจันทร์ที่ 26 กันยายน เวลาบ่ายโมงตรง (ไม่ใช่บ่ายโมงครึ่งเหมือนวิชาส่วนใหญ่) ห้อง 1239 ว.1

    5. ผลสอบปลายภาค

      ทำนายเกรด เกรดที่แสดงนี้สมมติว่าการบ้านสองและโปรเจ็คได้เต็มหมด หมายเหตุ นักศึกษาที่พลาดส่งการบ้านแรกจะได้คะแนนการบ้านสองสูงสุดที่ 7.5% หากทำได้เต็ม ส่วนคนที่ส่งการบ้านแรกตามปรกติจะได้ 3.5% ตามที่ตกลงไว้ในตอนแรก

      ส่วนถ้าใครสงสัยว่าข้อไหนเป็นข้อไหน อาจจะดู 'แบบฝึกหัดสำหรับนักศึกษาปีหน้า' ก็ได้ ถ้าข้องใจกับคำตอบก็ดู 'เฉลยแบบฝึกหัด' ได้

      เนื่องจากผู้สอนเห็นว่าข้อ 18 ส่วนที่ถามเกี่ยวกับโครงสร้างกราฟยากเกินไป (3 คะแนน) และข้อ 23 โจทย์ไม่ดีนักเพราะข้อสอบไม่ได้บอกว่าต้องการให้แสดงการวิเคราะห์ในความเห็นด้วย (2 คะแนน) จึงขอปรับลดคะแนนเต็มจาก 120 ไปเป็น 115 ซึ่งถ้าใครตอบถูกในส่วนที่ปรับลดมาก็จะเป็นคะแนนพิเศษไป


    6. สอบคะแนนโบนัส กำหนดสอบข้อ k-means คะแนนโบนัสวันที่ 13 ตุลาคมที่ชั้น 6 เวลา 10.30 - 12.00 น. ขอให้ผู้เข้าสอบมาก่อนเวลาประมาณ 15 นาทีเพื่อจัดเตรียมที่นั่งสอบ และผู้เข้าสอบจะต้องนำแล็ปท็อปและ source code ของตัวเองมาด้วย เพื่อที่จะแก้โค้ดให้มีพฤติกรรมตามที่ผู้สอนกำหนด

      ห้ามใช้อินเตอร์เน็ตระหว่างสอบ

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

      เพื่อป้องกันไม่ให้นักศึกษาคิดลอก โดยเฉพาะโครงงานสองที่มีคะแนนสูงมาก ผู้สอนจึงขอประกาศสอบป้องกันโครงงานในวันที่ 13 ตุลาคม เวลา 1.30 - 4.30 ที่ภาควิชาชั้น 6 โดยแต่ละกลุ่มจะต้องนำแล็ปท็อปมาเอง และเตรียมโครงงานสองมาให้พร้อม จากนั้นทุกกลุ่มจะต้องแก้โค้ดให้มีพฤติกรรมตามที่ผู้สอนกำหนด ถ้ากลุ่มไหนทำไม่ได้จะถูกตัด 8% ของคะแนน 100% ทั้งรายวิชา (นั่นหมายความว่าเกรดของคุณจะลดลงอย่างน้อยหนึ่งประจุ ยกเว้นคนที่ได้ A ที่คะแนน 95 ขึ้นไป) อย่างไรก็ตามเกรดจะไม่ถูกเปลี่ยนเป็น F เป็นอันขาดเว้นเสียแต่มีการทุจริตในระหว่างสอบ

      การสอบนี้ไม่ต้องมาทุกคน ใครที่เป็นชาวเกาะโดยสมบูรณ์ไม่จำเป็นต้องปรากฎตัวก็ได้ 

      ห้ามใช้อินเตอร์เน็ตระหว่างสอบ

      พิเศษสุด สำหรับคนที่ทำข้อ k-means โบนัสได้ และกลุ่มสอบป้องกันโครงงานสำเร็จ คนนั้นจะได้คะแนนเพิ่มอีก 4% ซึ่งใช้บวกเพิ่มเข้าไปจากคะแนนที่มีอยู่และสามารถใช้เปลี่ยนเกรดให้เป็น A หรือ B+ ได้ด้วย สำหรับคนที่ก่อนหน้าได้คะแนนไม่ดี คือต่ำกว่า B คะแนน 4% นี้จะถูกบวกเข้าไปก่อน ทำให้คนที่ทำคะแนนปรกติได้ค่อนข้างดีจะมีโอกาสได้ B มากขึ้น แต่ถ้าคะแนนก่อนหน้าออกจะแย่ไปหน่อยก็จะถูกหยุดไว้ที่ C+ เหมือนเดิม
Comments