Thresholding  ( เทรสโช ) เป็นวิธีที่ง่ายที่สุดในการทำ image  segmentation เพราะว่ามีวิธีการที่ไม่ซับซ้อน และให้ผลลัพธ์ที่ค่อนข้างดีมาก นิยมใช้ในการทำ image segmentation ของภาพ Grayscale อีกทั้งใน emguCV ยังมีฟังค์ชั่นในการทำ thresholding อีกด้วย ก่อนอื่นเรามาทำความรู้จักกับหลักการของ thresholding กันก่อนนะครับ

หลักการ
     จากรูปข้างต้นจะเห็นได้ว่า เมื่อเรากำหนดค่า threshold = 120 แล้วค่า pixel  ในรูปที่มีค่าน้อยกว่า 120 จะถูกปรับค่าเป็น 0 ในทางกลับกันถ้าค่าใน pixel ไหนมากกว่า 120 จะถูกปรับเป็น 255


จะได้สมการดังนี้

เมื่อ f(x,y) คือ ตำแหน่ง pixel ของภาพต้นฉบับ
        g(x,y) คือ ตำแหน่ง pixel ของภาพผลลัพธ์

ตัวอย่าง


  • ตัวอย่างการคำนวณด้วยมือ เมื่อมีรูปภาพขนาด 10*10 และให้ Threshold  value = 120
input image size 10*10
output image size 10*10

  • ตัวอย่างโปรแกรม
  •        ในการเขียนโปรแกรมเพื่อใช้ Threshold  นั้นมีขั้นตอนอยู่ 3 ขั้นนะครับ
    1. โหลดภาพ input มาเก็บไว้ในตัวแปร  inputImg
      capture = new Emgu.CV.Capture("ที่เก็บรูปภาพ");
      Image<Bgr, Byte> inputImg = capture.QueryFrame();
    2. แปลงภาพเป็น Grayscale
      Image<Gray, Byte> grayImg = inputImg.Convert<Gray, Byte>();
    3. ใช้ฟังค์ชั่น threshold ใน emguCV  ในที่นี้ผมกำหนดค่า threshold = 120 นะครับ
      Image<Gray, Byte> outputImg = grayImg.ThresholdBinary(new Gray(120), new Gray(255));



    ภาพการทำ threshold ใน emguCV นะครับ



    จบแล้วครับ รบกวนฝากกดไลค์แฟนเพจ labplays ใน facebook ด้วยนะครับบ ^__^

3 ความคิดเห็น

March 30, 2013 at 9:45 AM

ตรงนี้ไม่เข้าครับ มันเอาไป ใช้ทำอะไร

รบกวนอธิบายอีกหน่อยตั้งแต่รูปแรกเลย อ่านเล้วจินตานาการไม่ออก

Reply
March 31, 2013 at 2:16 AM

เป้าหมายคือ แปลงภาพจาก Gray scal หรือภาพระดับเทา ให้เป็นภาพแบบ Binary หรือ ภาพแบบ ขาวดำ ครับ

Reply
November 28, 2015 at 12:43 AM

อยากรู้ว่า 0 และ 1 เลขไหนแทน สีขาวเลขไหนแทนสีดำครับ

Reply

Post a Comment

Templated by Blogger Items