เริ่มต้นที่ definition เช่นเคย
double cvThreshold(
CvArr* src,
CvArr* dst,
double threshold,
double max_value,
int threshold_type
);
src คือต้นฉบับ
dst คือผลลัพธ์
double คือ threshold ที่ตั้งไว้
max_value คือค่าคงที่ใช้ในการตั้งค่าผลลัพธ์
threshold_type คือวิธีการคำนวณ threshold ใชัหลักดังนี้ (ให้ M=max_value)
- CV_THRESHOLD_BINARY dst = (src>T)?M:0
- CV_THRESHOLD_BINARY_INV dst = (src>T)?0:M
- CV_THRESHOLD_TRUNC dst = (src>T)?M:src
- CV_THRESHOLD_TOZERO_INV dst = (src>T)?0:src
- CV_THRESHOLD_TOZERO dst = (src>T)?src:0
และยังมี adaptive threshold ที่ค่า threshold จะเปลี่ยนค่าเองไปได้เรื่อย ซึ่งจะมีประโยชน์ในกรณีที่ภาพต้นแบบนั้นเจอแสดงแบบ gradient ทำให้ค่าต่างกันมากตาม gradient ของภาพ การเรียกใช้ก็จะคล้ายๆ กัน
void cvAdaptiveThreshold(
CvArr* src,
CvArr* dst,
double max_val,
int adaptive_method = CV_ADAPTIVE_THRESH_MEAN_C
int threshold_type = CV_THRESH_BINARY,
int block_size = 3,
double param1 = 5
);
ในฟังก์ชันนี้ค่า threshold ที่จุด x,y ใดๆ จะคำนวณมาจาก ค่าเฉลี่ยของ pixel ในสี่เหลี่ยมจัตตุรัสที่มีขนาดกำหนดไว้ใน block_size แล้วลบด้วยค่า param1 โดยการเฉลี่ย pixel นั้นมีสองวิธีกำหนดไว้ใน adaptive_method คือ CV_ADAPTIVE_THRESH_MEAN_C จะถ่วงน้ำหนักเท่ากันทุก pixel ในขณะที่ถ้ากำหนดเป็น CV_ADAPTIVE_THRESH_GAUSSIAN_C จะถ่วงน้ำหนัก pixel โดย ใช้ gaussian function จากระยะห่าง
No comments:
Post a Comment