Wednesday, April 14, 2010

Learning OpenCV: Image Morphology (cont)

มาต่อกันที่ morphology กันอีกที ยังมี morphology พื้นฐานอีกหลายตัวที่สามารถใช้ได้กับ gray scale หรือ color image (ยังไม่เข้าใจว่าทำไม dilation, erosion ใช้ไม่ไ้ด้) ใน OpenCV ใช้คำสั่งดังนี้

void cvMorphologyEx(
    const CvArr*         src,
    CvArr*                  dst,
    CvArr*                  temp,
    IplConvKernel*      element,
    int                        operation,
    int                        iteration = 1
);

มีสิ่งที่เพิ่มมาจาก cvErode, cvDiate สองตัวคือ temp ใช้สำหรับเก็บค่า temp ของการคำนวณซึ่งอาจจะใช้หรือไม่ใช้ก็ได้ขึ้นอยู่กับ operation  ลองดูใน document (ละเอียดกว่านี้เดี๋ยวจะกลายเป็น document ย่อมๆ ไป) ส่วน operation จะมีค่าได้ดังนี้ CV_MOP_OPEN, CV_MOP_CLOSE, CV_MOP_GRADIENT, CV_MOP_TOPHAT, CV_MOP_BLACKHAT


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

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

ทั้ง opening และ closing จะเหมือน erosion กับ dilation ต่างกันที่ opening กับ closing จะรักษาขนาดวัตถุไว้

Gradient
คือการนำภาพที่ dilate(บวม) มาลบด้วยภาพที่ erode(หด) ผลลัพธ์ที่ได้ก็จะเป็นขอบของภาพใช้ในการ detect edge

Top Hat, Black Hat
top hat ใช้ในการ isolate patch ที่สว่างกว่ารอบๆ ข้าง ในขณะที่ balck hat ใช้ isolate patch ที่มืดกว่ารอบๆ ข้าง โดย top hat คือ ภาพต้นฉบับ มาลบด้วย open(noise หาย ขอบยื่นๆ หาย ส่วน) ภาพที่ได้คือส่วนที่เป็นขอบยื่นๆ ที่หาย กับ noise ที่หายไปนั่นเอง ซึ่ง noise ในที่นี้คือพื่นที่สว่างถูก isolate(ไม่มีวัตถุ background สีขาว วัตถุสีดำ) ส่วน black hat ก็คือการนำ close(ภาพที่ holes หายไป และวัตถุ connected กับแล้ว) ลบด้วย ภาพต้นฉบับ ทำให้กลุ่ม patch ที่มืด(dark holes) ถูกแยกออกมา

No comments:

Post a Comment