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 เหมือนกันจะได้ประโยชน์ด้วย :)

Comments (1)

chapetDecember 20th, 2009 at 5:57 pm

เจ๋งมากเลย นัทเทพ ขอบจัยนะ ^^

[Reply]

Leave a comment

Your comment