OpenCV - เกณฑ์การปรับตัว

ใน simple thresholdingค่าขีด จำกัด เป็นแบบโกลบอลกล่าวคือพิกเซลทั้งหมดในรูปภาพจะเท่ากัน Adaptive thresholding เป็นวิธีที่คำนวณค่าขีด จำกัด สำหรับพื้นที่ขนาดเล็กดังนั้นจึงมีค่าขีด จำกัด ที่แตกต่างกันสำหรับภูมิภาคต่างๆ

ใน OpenCV คุณสามารถดำเนินการ Adaptive threshold บนรูปภาพโดยใช้วิธีการ adaptiveThreshold() ของ Imgprocชั้นเรียน. ต่อไปนี้เป็นไวยากรณ์ของวิธีนี้

adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

วิธีนี้ยอมรับพารามิเตอร์ต่อไปนี้ -

  • src - วัตถุของคลาส Mat แสดงภาพแหล่งที่มา (อินพุต)

  • dst - วัตถุของคลาส Mat แสดงภาพปลายทาง (เอาต์พุต)

  • maxValue - ตัวแปรประเภทคู่แทนค่าที่จะกำหนดหากค่าพิกเซลมากกว่าค่าเกณฑ์

  • adaptiveMethod- ตัวแปรของจำนวนเต็มประเภทที่แสดงถึงวิธีการปรับเปลี่ยนที่จะใช้ ค่านี้จะเป็นสองค่าต่อไปนี้

    • ADAPTIVE_THRESH_MEAN_C - ค่า threshold คือค่าเฉลี่ยของพื้นที่ใกล้เคียง

    • ADAPTIVE_THRESH_GAUSSIAN_C - ค่าขีด จำกัด คือผลรวมถ่วงน้ำหนักของค่าย่านใกล้เคียงโดยที่น้ำหนักเป็นหน้าต่างแบบเสียน

  • thresholdType - ตัวแปรประเภทจำนวนเต็มแทนประเภทของขีด จำกัด ที่จะใช้

  • blockSize - ตัวแปรประเภทจำนวนเต็มแสดงขนาดของพิกเซลพื้นที่ที่ใช้ในการคำนวณค่าขีด จำกัด

  • C - ตัวแปรประเภทคู่แทนค่าคงที่ที่ใช้ในทั้งสองวิธี (ลบออกจากค่าเฉลี่ยหรือค่าเฉลี่ยถ่วงน้ำหนัก)

ตัวอย่าง

โปรแกรมต่อไปนี้แสดงให้เห็นถึงวิธีดำเนินการ Adaptive threshold บนอิมเมจใน OpenCV ที่นี่เรากำลังเลือกเกณฑ์การปรับตัวของประเภทbinary และ ADAPTIVE_THRESH_MEAN_C สำหรับวิธีเกณฑ์

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class AdaptiveThresh {
   public static void main(String args[]) throws Exception {
      // Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      // Reading the Image from the file and storing it in to a Matrix object
      String file ="E:/OpenCV/chap14/thresh_input.jpg";
      
      // Reading the image
      Mat src = Imgcodecs.imread(file,0);

      // Creating an empty matrix to store the result
      Mat dst = new Mat();

      Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C,
         Imgproc.THRESH_BINARY, 11, 12);

      // Writing the image
      Imgcodecs.imwrite("E:/OpenCV/chap14/Adaptivemean_thresh_binary.jpg", dst);

      System.out.println("Image Processed");
   } 
}

สมมติว่าต่อไปนี้เป็นภาพอินพุต thresh_input.jpg ระบุไว้ในโปรแกรมข้างต้น

เอาต์พุต

ในการรันโปรแกรมคุณจะได้รับผลลัพธ์ต่อไปนี้ -

Image Processed

หากคุณเปิดเส้นทางที่ระบุคุณสามารถสังเกตภาพที่ส่งออกได้ดังนี้ -

เกณฑ์การปรับตัวประเภทอื่น ๆ

นอกเหนือไปจาก ADAPTIVE_THRESH_MEAN_C เป็นวิธีการปรับตัวและ THRESH_BINARY ในฐานะประเภทเกณฑ์ดังที่แสดงในตัวอย่างก่อนหน้านี้เราสามารถเลือกชุดค่าผสมทั้งสองนี้ได้มากขึ้น

Imgproc.adaptiveThreshold(src, dst, 125, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 11, 12);

ต่อไปนี้เป็นค่าที่แสดงถึงชุดค่าผสมต่างๆสำหรับพารามิเตอร์ adaptiveMethod และ thresholdType และผลลัพธ์ตามลำดับ

adaptiveMethod / thresholdType ADAPTIVE_THRESH_MEAN_C ADAPTIVE_THRESH_GAUSSIAN_C:
THRESH_BINARY
THRESH_BINARY_INV