imfilter ใน matlab
เวลาทำ convolution ภาพด้วย Filter จะมีปัญหาในการคำนวณ pixel ที่ขอบภาพ (ทาบ filter แล้วตกขอบ)
มีวิธีแก้ปัญหาหลายวิธี:
- ไม่คำนวณที่ pixel ขอบภาพ (จะได้ภาพผลลัพธ์เล็กลง)
- Padding – เติมค่าสีเพิ่มที่ขอบๆ ภาพ
ใน matlab คำสั่ง imfilter สามารถกำหนดวิธี Padding ค่าสีที่ขอบภาพได้หลายวิธี มาดูตัวอย่างเลยดีกว่า
f เป็น filter ที่ให้ภาพเหมือนเดิมทุกประการ
a เป็นภาพต้นฉบับ ขนาด 2×2
เราจะทำ imfilter ด้วย filter f บนภาพ a แล้วแสดงภาพผลลัพธ์ส่วนที่ถูก pad ด้วย (option ‘full’)
f = [ 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]; a = [ 1 2 3 4]; disp('Zero padding (default)') imfilter(a, f, 'full') disp('symmetric - mirror reflect') imfilter(a, f, 'full', 'symmetric') disp('replicate - nearest neighbor value') imfilter(a, f, 'full', 'replicate') disp('circular - assume periodic') imfilter(a, f, 'full', 'circular')
ผลลัพธ์ที่ได้ คือภาพต้นฉบับที่โดน pad ค่าเรียบร้อยแล้ว
อ๊ะแหะๆ… บล็อกนี้ค่อนข้างเฉพาะทางหน่อยนะครับ เขียนให้เพื่อนๆ ที่เรียน Digital Image Processing ด้วยกันอ่าน… แต่อัพลงบล็อกเผื่อคนอื่นๆ ที่เรียน Image เหมือนกันจะได้ประโยชน์ด้วย
เจ๋งมากเลย นัทเทพ ขอบจัยนะ ^^