วันเสาร์ที่ 25 สิงหาคม พ.ศ. 2555

วัตถุใน 2 ระนาบมิติ


Mask and Convolution
            Convolution เป็นกระบวนการทางคณิตศาสตร์ที่ใช้ในการประมวลผลภาพ Convolution ใช้กระบวนการ Sum of Product ระหว่าง Mask หรือ Array ใดๆ และ ภาพที่ต้องการประมวลผล โดยใช้วิธีการเลื่อน Mask ไปบนภาพแล้วหา Sum of Product กับทุกๆ Pixel ดังสมการที่ (1)
                 (1)
           โดย           x[k] คือ ภาพที่ต้องการประมวลผล
           โดย           y[n] คือ ภาพเอาท์พุต
           โดย           h[n-k] คือ Mask หรือ Array ที่ต้องการทำ Convolution กับภาพ
ตัวอย่าง การทำ Convolution

2.2 Gaussian Filter
          Gaussian Filter เป็น Filter ที่มีลักษณะคล้ายระฆังคว่ำ ดังภาพที่ 2-1 ใช้สำหรับลด Noise และ เบลอภาพ โดยการนำ Gaussian Filter ไปทำการ Convolution กับ ภาพที่นำมาประมวลผล

ภาพที่ 2-1 Gaussian Filter
           Gaussian Filter สามารถสร้างได้จากสมการที่ (2)
                       (2)
           เมื่อ            คือ Standard Deviation
           เมื่อ            หรือ ผลรวมของ Gaussian Filter
ตัวอย่าง Gaussian Filter ขนาด 5 x 5 และมี = 1.0
Steerable Filter
           Steerable Filter มีคุณสมบัติหลายอย่าง เป็นต้นว่า สามารถสร้าง Filter แยกกันระหว่างแกน X และ Y และการทำ Convolution ก็สามารถแยกออกเป็น Convolution ในแนวแกน X และ Convolution ในแนวแกน Y นอกจากนี้ Steerable filters ยังสามารถหาหามุมที่เกิดจากการหมุน Steerable Filter แล้วสร้างเป็นกลุ่มของมุมทั้งหมดของ Steerable Filter ทั้งนี้เราสามารถหา Response of a filter ที่มุมต่างๆ ได้
           Steerable Filters มาจากอนุพันธ์อันดับที่ 2 ของ Gaussians 2 มิติ ดังสมการที่ (3) (4) และ (5)



ภาพที่ 2-2
 Steerable Filters
           สามารถหา Response ของการหมุนใดๆ ได้จากสมการที่ (6) ดังนี้
       (6)
          หาอนุพันธ์ของสมการที่ (4) แล้วนำมาเท่ากับ 0 หาค่ามุม , จะได้ค่ามุม ที่ Minimum และ Maximum Responses ซึ่งสามารถคำนวนได้จากสมการที่ (7) และ (8)
           จากสมการที่ (4) (5) และ (6) เราสามารถหามุม ที่ Minimum และ Maximum Responses ได้ ซึ่งในการหาภาพที่มีลักษณะเป็นวงกลมมุม ที่ Minimum และ Maximum Responses จะมีค่าใกล้เคียงกัน ส่วนการหาจุดที่เป็นเส้นในภาพมุม ที่ Minimum Response จะมีค่าน้อยมาก และ Maximum Responses จะมีค่าสูงมาก
RGB and HSV Color Model
            RGB Color Model เป็นโมเดลของแสงสีที่นิยมใช้กันทั่วไป โดยแสงสีต่างๆ จะเกิดจากการผสมกันระหว่างแสงสีแดง แสงสีเขียว และแสงสีเหลือง ภาพที่นำมาประมวลผลนั้นจะเก็บค่าสีในลักษณะ RGB Color Model ซึ่ง RGB Color Model นี้ค่าของสีแดง เขียว และเหลืองจะเปลี่ยนไปตามความเข้มแสง กล่าวคือ ถ้าแสงสว่างมาก ค่าของสีทั้งสามสีจะมีค่าเพิ่มขึ้น แต่หากมีแสงสว่างน้อย ค่าของสีทั้งสามจะมีค่าลดลง

ภาพที่ 2-3
 RGB Color Model

           HSV (Hue, Saturation, Value) Color Model หรือ HSB (Hue, Saturation, Brightness) โมเดลสีนี้ประกอบด้วยค่า 3 ค่า ได้แก่
  • Hue คือค่าของสี เช่นสีแดง สีเหลือง สีเขียว วัดเป็นมุม คือ 0 – 360 องศา ซึ่งสีแดง สีเหลืองและ สีเขียวจะมีค่าต่างกันสีละ 60 องศา
  • Saturation คือค่าความเข้มของเนื้อสี หรือค่าความบริสุทธิ์ของสี มีค่าตั้งแต่ 0 – 100 โดยสีจะมีความเข้มมากขึ้นเรื่อยๆ เมื่อค่า Saturation มีค่าเพิ่มขึ้น
  • Value หรือ Brightness คือ ความสว่างของสี มีค่าตั้งแต่ 0 – 100 โดยภาพจะสว่างมากขึ้นเรื่อยๆ เมื่อ Brightness มีค่าเพิ่มขึ้นเรื่อยๆ

ภาพที่ 2-4 HSV Color Model
         จะสังเกตว่า HSV Model จะมีความคงทนต่อการเปลี่ยนแปลงของแสงในสนามมากกว่า การใช้ RGB Model เนื่องจากหากภาพทีความสว่างมาก ค่า Hue และ Saturation จะไม่มีการเปลี่ยนแปลง มีเพียงค่า Value หรือ Brightness เปลี่ยนแปลงเพียงค่าเดียวเท่านั้น
          เนื่องจากภาพที่นำมาประมวลผลนั้นเก็บค่าสีเป็น RGB Model ดังนั้นในการประมวลภาพโดยใช้ HSV Model จะต้องมีทำการเปลี่ยน RGB Model ให้เป็น HSV Model ก่อน โดยมีความสัมพันธ์ดังสมการ (9) (10) และ (11)
          ให้           R G B แทนค่าของสีใน RGB Model มีค่าระหว่าง 0.0 – 1.0
          ให้           H S V แทนค่าของสีใน HSV Model
          ให้           max = ค่าสูงสุดใน (R, G, B)
          ให้           min = ค่าต่ำสุดใน (R, G, B)

2.5 Coarse – to – fine
            ในการหาวัตถุ ขนาดเล็กจากภาพที่มีขนาดใหญ่ การค้นหาแบบ Pixel ต่อ Pixel จะทำให้สิ้นเปลืองเวลาในการค้นหาไปมาก ดังนั้นเทคนิกการหาวัตถุในภาพที่มีความละเอียดต่ำ จะหาได้เร็วกว่าการหาวัตถุในภาพที่มีความละเอียดสูง ทั้งนี้การหาวัตถุในภาพที่มีความละเอียดต่ำ จะมีความผิดพลาดสูงกว่าการหาวัตถุในภาพที่มีความละเอียดสูง
            Coarse – to – fine ใช้หลักการสร้าง Image Pyramid คือ การสร้างภาพที่มีลักษณะเป็นชั้นๆ แต่ละชั้นมีความละเอียดที่แตกต่างกัน โดยให้ n เป็น Level ใน Image Pyramid ภาพใน Level ที่ n จะมีขนาดเป็นครึ่งหนึ่งของภาพใน Level n + 1 แต่ละ Pixel ใน Level n จะมีความสัมพันธ์กับ 4 Pixel ใน Level ถัดไป ดังภาพที่ 2-5

ภาพที่ 2-5 Image Pyramid
         หลังจากสร้าง Image Pyramid แล้ว จะทำการประมวลผลภาพใน Level 0 ก่อน เมื่อได้จุดที่สนใจแล้ว ใน Level 2 – Level n ให้พิจารณาเฉพาะจุดที่สนใจ โดยแต่ละจุดมีความสัมพันธ์กัน ดังนี้
          Level 0           P ( i , j )
          Level 1           P ( 2i , 2j ), P ( 2i + 1 , 2j ),
          Level 1           P ( 2i , 2j + 1 ), P ( 2i + 1 , 2j + 1 )
          Level 2           P ( 4i , 4j ), P ( 4i + 1 , 4j ),
          Level 2           P ( 4i , 4j + 1 ), P ( 4i + 1 , 4j + 1 )
          Level n           P ( 2ni , 2nj ), P ( 2ni + 1 , 2nj ),
          Level n           P ( 2ni , 2nj + 1 ), P ( 2ni + 1 , 2nj + 1 )
2.6 Dilation
           Dilation และ Erosion เป็น Operation พื้นฐานในการทำ Morphology กับ Binary Image Dilation เป็นการขยายขอบให้กับภาพ Foreground และ Erosion เป็นการลบขอบให้กับภาพ Foreground ดังนั้น ภาพที่ผ่านการทำ Dilation แล้วจะมีขนาดใหญ่ขึ้น ในขณะเดียวกัน รูในภาพก็จะมีขนาดเล็กลงด้วย ในทางตรงกันข้าม ภาพที่ผ่านการทำ Erosion จะมีขนาดเล็กลง และ รูในภาพก็จะมีขนาดใหญ่ขึ้นด้วย ในที่นี้จะกล่าวถึง Dilation เพียงอย่างเดียวเท่านั้น
           ในการทำ Dilation จะใช้อินพุต 2 ตัว คือ ภาพ และ รูปแบบที่จะใช้ในการทำ Dilation และมีขั้นตอนคือ
    1. พิจารณาอินพุต Pixel แต่ละตัว
    2. ถ้า Pixel ที่พิจารณาเป็น Foreground Pixel ให้ทำการเปลี่ยนค่าของ Pixel รอบๆ Pixel ที่พิจารณา ให้มีลักษณะตามรูปแบบที่ใช้ทำ Dilation ให้เป็นค่าของ Foreground Pixel ทั้งหมด
    3. ทำให้ครบกับทุกจุดของภาพ

          ตัวอย่างการทำ Dilation กำหนดให้รูปแบบที่ใช้ทำ Dilation มีลักษณะเป็น 8-Connection ขนาด 3x3 ดังภาพที่ 2-6 และ ให้ Foreground Pixel มีค่าเป็น 1 และ Background Pixel มีค่าเป็น 0 และมีผลลัพธ์ดังภาพที่ 2-7


ภาพที่ 2-6 ตัวอย่างรูปแบบที่ใช้ทำ Dilation ขนาด 3x3

ภาพที่ 2-7
 ผลจากการทำ Dilation
โดยใช้ รูปแบบที่มีลักษณะเป็น 8-Connection ขนาด 3x3 ดังภาพที่ 2-6



ภาพที่ 2-8 ตัวอย่างการทำ Dilation
          จากภาพที่ 2-8 ภาพเอาท์พุตที่ได้เกิดจากการทำ Dilation 2 ครั้ง และใช้รูปแบบที่มีลักษณะเป็น 8-Connection ขนาด 11x11 จะเห็นภาพ ขอบของภาพมีลักษณะโค้งมน และ รูในภาพมีขนาดเล็กลง ทั้งนี้เพราะการทำ Dilation จะช่วยลด Noise และทำขอบของภาพมีความราบเรียบมากขึ้นอีกด้วย
 Blob Coloring
          เมื่อภาพถูกแบ่งออกเป็นหลายๆ ส่วน Blob Coloring เป็นเทคนิคที่ช่วยในการหาบริเวณที่เชื่อมต่อกัน Blob Coloring มีหลายวิธีด้วยกัน เป็นต้นว่า Blob Coloring แบบ 4 Point Connection ใช้ในการหาบริเวณที่เป็นเส้น หรือ Blob Coloring แบบ 8 Point Connection ใช้ในการหาพื้นที่ที่เชื่อมต่อกันตามภาพที่ 2-9

ภาพที่ 2-9 แสดงลักษณะการเชื่อมต่อกัน แบบ 8 และ 4 Point Connection

ภาพที่ 2-10 แสดงภาพตัวอย่างที่ได้จากการทำ Blob Coloring แบบ 8 Point Connection
          จากภาพที่ 2-10 พื้นที่ที่แยกออกจากกันในภาพ จะถูกตรวจสอบและทำการ Recursive ต่อไปเรื่อยๆ จนกระทั่งถึงบริเวณที่เป็นขอบ จะเห็นว่าภาพที่ได้จากการทำ Blob Coloring แล้ว จะถูกแบ่งออกเป็นส่วนๆ แยกกัน
Vector Product และการหาทิศทาง และ ID ของหุ่นยนต์
          Vector Product มี 2 ชนิดคือ Dot Product และ Cross Product
 Dot Product
          Dot Product ของเวคเตอร์จะมีใช้กันมาก โดยปกติจะใช้แก้ปัญหาในเรื่องของ เวคเตอร์ที่มีองค์ประกอบขนาน และตั้งฉากต่อแนวที่ต้องการทราบ และคำนวณหามุมระหว่างแนว 2 แนว ที่อยู่ระหว่าง 2 เวคเตอร์
          
ภาพที่ 2-11 Dot Product
          ถ้าพิจารณา 2 เวคเตอร์  และ  ในภาพที่ 2-11 Dot Product ของ์  และ  จะกำหนดสัญลักษณ์  โดย คำตอบที่ได้จะเป็นขนาดของ  หรือขนาดของ  ส่วน Cosine ของมุม  จะเป็นมุมระหว่าง  และ  ที่เกิดจากการเอาหางต่อของเวคเตอร์ทั้งสองต่อกันดังในภาพที่ 2-11 และมีสมการดังสมการ (12) และ (13)
             (12)
          โดยที่                    คือ สัญลักษณ์แทน Dot Product          โดยที่                    คือ ค่าของเวคเตอร์           โดยที่                    คือ ค่าของเวคเตอร์ 

หรือ
                                (13)
          โดยที่                  คือ สัญลักษณ์แทน Dot Product          โดยที่                     คือ ขนาดของเวคเตอร์           โดยที่                     คือ ขนาดของเวคเตอร์           โดยที่                        คือ มุมระหว่าง และ
          คำตอบของ Dot product จะเป็นค่าสเกลาร์ ในบางครั้งจะเรียก Dot product ว่า Scalar Product หน่วยของ Dot Product จะเป็นหน่วยเดียวกันกับหน่วยของเวคเตอร์ ค่าของ Dot Product จะเป็นศูนย์ ได้กรณีเดียวกันเท่านั้น คือเวคเตอร์ทั้งสองจะต้องตั้งฉากกัน
          ทั้งนี้ หากต้องการหามุมที่เกิดจากเวคเตอร์ 2 เวคเตอร์ใดๆ สามารถทำได้จากสมการ (14)
                               (14)
Cross Product


ภาพที่ 2-12 
Cross Product
          พิจารณา 2 เวคเตอร์  และ  ในภาพที่ 2-12 การ Cross Product ของ  และ  จะเขียนสัญลักษณ์เป็น  สามารถคำนวณได้จากสมการที่ (15) และ (16)
           (15)
          โดยที่    คือ สัญลักษณ์แทน Cross Product   โดยที่     คือ ขนาดของเวคเตอร์           โดยที่     คือ ขนาดของเวคเตอร์ โดยที่     คือ มุมระหว่าง  และ 
หรือ
        (16)

          โดยที่       คือ สัญลักษณ์แทน Cross Product
          โดยที่       คือ ค่าของเวคเตอร์    โดยที่          คือ ค่าของเวคเตอร์ 
          มุมระหว่าง และ  เมื่อมีการเอาหางของเวคเตอร์มาต่อกันดังในภาพที่ 2-12 เวคเตอร์ เป็นเวคเตอร์หนึ่งหน่วยที่ตั้งฉากกับเวคเตอร์ และ  ทั้งสอง เวคเตอร์ และ  จะเป็นไปตามกฎมือขวา "Right - Handed System Rule" เพื่อคำนวณหาทิศทางของ  ดังที่แสดงไว้ในภาพที่ 2-12 เมื่อเรากำหนดให้จุดของนิ้วทั้ง 4 เป็นทิศทางของ  (อันดับแรกของ Cross Product) และเคลื่อนนิ้ว ทั้ง 4 ให้ตั้งฉากกับฝ่ามือเป็นเวคเตอร์  (อันดับที่สองของ Cross Product) นิ้วหัวแม่มือจะเป็นทิศทางของ  เพราะว่าคำตอบของ Cross Product ได้คำตอบเป็นเวคเตอร์ บางครั้งจึงเรียกว่า "Vector Product" หน่วยของ Vector Product จะเป็นหน่วยเดียวกับเวคเตอร์ทั้งสอง Cross Product ของเวคเตอร์ จะมีค่าเท่ากับศูนย์ ก็ต่อเมื่อ เวคเตอร์ทั้งสองขนานกันเท่านั้น
          จากทฤษฏีของ Vector Product ดังกล่าว เราสามารถนำมาประยุกต์ใช้กับการหาทิศทางและ ID ของหุ่นยนต์ได้ ดังนี้
          สำหรับ การหาทิศทางของหุ่นยนต์ เราใช้ Dot Product ในการคำนวณ จากภาพที่ 2-13 เป็นตัวอย่างหุ่นยนต์ผู้เล่น จะเห็นว่าถ้าเราทำการสร้างเวคเตอร์จากจุดศูนย์กลางไปยัง Marker ที่บอกทิศทางของหุ่นยนต์ ( ) และ สร้างเวคเตอร์จากจุดศูนย์กลางขนานกับแกน x (  ) ดังภาพที่ 2-13 และ ใช้ สมการที่ (11) ในการหามุม

ภาพที่ 2-13 ตัวอย่างการหาทิศทางของหุ่นยนต์
          สำหรับ การหา ID ของหุ่นยนต์ เราจะใช้ Cross Product ในการคำนวณ จากภาพที่ 2-14 เป็นตัวอย่างหุ่นยนต์ผู้เล่น จะเห็นว่าถ้าเราทำการสร้างเวคเตอร์จากจุดศูนย์กลางไปยัง Marker ที่บอกทิศทางของหุ่นยนต์ (  ) และ สร้างเวคเตอร์จากจุดศูนย์กลางไปยัง Marker ที่บอก ID ของหุ่นยนต์ ทั้ง 2 (  และ  ) ดังภาพที่ 2-14

ภาพที่ 2-14 ตัวอย่างการหา ID ของหุ่นยนต์
          เมื่อทำการหา Cross Product ระหว่าง และ Cross Product ระหว่าง ค่าที่ได้จะมีค่าต่างกันดังนี้
                   (17)
                   (18)
          โดยที่            คือ เวคเตอร์ในระนาบ xy ที่สร้างจากจุดศูนย์กลางไปยัง Marker ที่บอกทิศทางของหุ่นยนต์          โดยที่           คือ เวคเตอร์ในระนาบ xy ที่สร้างจากจุดศูนย์กลางไปยัง Marker ที่บอก ID ของหุ่นยนต์ตำแหน่งแรก          โดยที่           คือ เวคเตอร์ในระนาบ xy ที่สร้างจากจุดศูนย์กลางไปยัง Marker ที่บอก ID ของหุ่นยนต์ตำแหน่งที่สอง          โดยที่           คือ เวคเตอร์ที่มีทิศตามแกน z และมีขนาดเท่ากับ k
          จะเห็นว่าในตำแหน่งที่ต่างๆ กัน ค่า  ที่ได้จากการ Cross Product จะมีค่าต่างๆ กันด้วย ดังนั้น จึงสามารถใช้ในการระบุ ID ของหุ่นยนต์ได้

ไม่มีความคิดเห็น:

แสดงความคิดเห็น