top of page

Image Morphology

            

        Morphology เป็น Image processing ชนิด Non-linear ที่สำคัญในการประมวลผลโดยเฉพาะภาพ binary หรือ ภาพ Gray-scale ที่มีลักษณะมีแนวโน้มที่จะเป็น binary โดยเน้นเรื่องรูปแบบ(form) และ โครงสร้าง(Structure) เพื่อการเปลี่ยนรูปร่างของวัตถุในภาพ เช่น การแยกวัตถุต่างๆ ออกจากกันหรือเชื่อมวัตถุต่างๆ เข้าด้วยกัน การลด Noise ใน Foreground หรือ Background

Morphological Operation and Structure Element

        Morphological Operation คือ เซตของการประมวลผลทางภาพในเรื่องรูปร่างโดยการประยุกต์ Structure Element มา Operate กับ Input image และได้ผลลัพธ์หรือ Output image ที่มีขนาดเท่ากับ Input image

        Structure Element คือ เมตริกที่ถูกนิยามให้เป็นรูปร่างและขนาดที่เป็น Neighborhood สำหรับทำMorphological Operation โดยในเมตริกจะประกอบด้วยค่า Binary 2 ค่า คือ 0 และ 1 ซึ่งสามารถมีรูปร่างตามที่เรากำหนด โดยที่ 1 จะกำหนดเป็น Neighborhood ดังรูปด้านล่าง

รูปที่1 แสดง Structure Element ในลักษณะต่างๆ

Background คือ Pixel ที่มีค่าเป็น 0 ใน image

Foreground คือ Pixel ที่มีค่าเป็น 1 ใน image

 

รูปที่ 2 Foreground และ Background ใน image

ชนิดของ Morphological Operation

        Basic Operation : ในกระบวนการ Morphological Operation ประกอบด้วย Operation พื้นฐานที่สำคัญ 2 ตัว คือ Erosion และ Dilation ดังรายละเอียดต่อไปนี้

       1.Dilation คือ การขยายภาพเป็นลักษณะของการเพิ่มข้อมูลภาพตามลำดับตลอดทั้งภาพ โดยจะเป็นเพิ่มส่วนสีขาวหรือขนาดของวัตถุเบื้องหน้า (Foreground) ปกติในกรณีการลด Noise นั้นจะใช้ Erosion ขยายและลดภาพสีขาวลง และจะทำให้วัตถุหดตัวลงโดยวิธีนี้เหมาะสำหรับการเพิ่มจุดที่เสียหายไป

       2.Erosion คือ การย่อภาพเป็นลักษณะของการลบข้อมูลภาพบริเวณขอบของภาพ โดยทั้งหมดที่อยู่ใกล้เคียงนั้นจะโดนลบออกไปตามขนาดของ kernel ดังนั้นความหนาหรือขนาดของวัตถุข้างหน้าจะลดลง(หรือพื้นที่ที่มีสีขาวก็จะลดลง) และสิ่งนั้นจะเป็นประโยชน์ด้านการลด noises ออก

       3.Opening นิยามของ opening ง่ายๆ คือเอา image มา erode แล้วค่อย dilate ใช้ในการลบ noise (เพราะว่า noise หายไปตอน erode แต่ขนาดของวัตถุเล็กลงก็เอาคืนด้วยการ dilate) ใช้ในการลบขอบที่ยื่นๆ ของวัตถุด้วย

       4.Closing ตรงข้างกับ opening คือการนำ image มา dilate แล้ว ค่อย erode ใช้ในการลบ small holes (หายไปตอบ dilate แล้วลดขนาดวัตถุที่บวมขึ้นมาด้วย erode) สามารถใช้ในการ เชื่อมวัตถุที่แยกจากกัน(เพราะ noise)

       5.Gradient จะแตกต่างจากฟังก์ชั่น dilation และ erosion โดยจะได้ผลผลที่แตกต่างออกไป ซึ่งเป็นการนำภาพที่ dilate(บวม) มาลบด้วยภาพที่ erode(หด) ผลลัพธ์ที่ได้ก็จะเป็นขอบของภาพใช้ในการ detect edge

       6.Top Hat ใช้ในการ isolate patch ที่สว่างกว่ารอบๆ ข้างโดย top hat คือ ภาพต้นฉบับมาลบด้วย opening (noise หาย ขอบยื่นๆ หาย ส่วน) ภาพที่ได้คือส่วนที่เป็นขอบยื่นๆ ที่หาย กับ noise ที่หายไปนั่นเอง ซึ่ง noise ในที่นี้คือพื่นที่สว่างถูก isolate (ไม่มีวัตถุ background สีขาว วัตถุสีดำ)

      7.black hat ใช้ isolate patch ที่มืดกว่ารอบๆ ข้างโดย black hat ก็คือการนำ closing (ภาพที่ holes หายไป และวัตถุ connected กับแล้ว) ลบด้วย ภาพต้นฉบับ ทำให้กลุ่ม patch ที่มืด(dark holes) ถูกแยกออกมา

  • สร้าง Structure Element

Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1))

shape = รูปร่างของ structure element

1.MORPH_RECT (0) สี่เหลี่ยมจัตุรัส ค่าทุกตำแหน่งเป็น 1

2.MORPH_CROSS (1)

3.MORPH_ELLIPSE (2)

ksize = ขนาด กว้าง x ยาว ของ structure element  มักจะเป็นเลขคี่ เช่น 3x3 , 5x5 , 7x7

anchor position = จุดที่ใช้ยึดในการเลื่อนตำแหน่งเวลา operation 

หากมีค่าเป็น (-1,-1) จะหมายถึงจุดกึ่งกลางของ structure element

  • ฟังก์ชัน Operator

1. dilate()

2. erode()

3. morphologyEx()

void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue())

void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )

src = รูปภาพตั้งต้น ที่ต้องการดำเนินการด้วย

dst = ภาพผลลัพธ์เมื่อทำการ Morpology เสร็จสิ้น

kernel = เมตริกซ์ของ structure element 

anchor position = จุดที่ใช้ยึดในการเลื่อนตำแหน่งเวลา operation 

หากมีค่าเป็น (-1,-1) จะหมายถึงจุดกึ่งกลางของ structure element

iterations = จำนวนครั้งในการทำ opertation นั้นซ้ำๆ

หากไม่ระบุจะถือว่าทำ 1 ครั้ง

void morphologyEx(InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue() )

src = รูปภาพตั้งต้น ที่ต้องการดำเนินการด้วย

dst = ภาพผลลัพธ์เมื่อทำการ Morpology เสร็จสิ้น

op = ชนิดการทำ operation

1.MORPH_OPEN

2.MORPH_CLOSE

3.MORPH_GRADIENT

4.MORPH_TOPHAT

5.MORPH_BLACKHAT

kernel = เมตริกซ์ของ structure element 

anchor position = จุดที่ใช้ยึดในการเลื่อนตำแหน่งเวลา operation 

หากมีค่าเป็น (-1,-1) จะหมายถึงจุดกึ่งกลางของ structure element

iterations = จำนวนครั้งในการทำ opertation นั้นซ้ำๆ

หากไม่ระบุจะถือว่าทำ 1 ครั้ง

COMPUTER ENGINEERING

  • w-facebook
  • Twitter Clean
  • w-flickr
bottom of page