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 |
|
|