ขณะนี้ฉันกำลังทำงานกับและเปรียบเทียบประสิทธิภาพของตัวตรวจจับคุณลักษณะหลายตัวที่ OpenCV ใช้เป็นพื้นฐานสำหรับการจับคู่คุณลักษณะทางภาพ
ฉันใช้คำอธิบายSIFT ผมได้ประสบความสำเร็จการจับคู่ที่น่าพอใจ (หลังจากปฏิเสธการแข่งขันที่ไม่ดี) เมื่อตรวจสอบMSERและหมา (ร่อน)คุณสมบัติ
ขณะนี้ฉันกำลังทดสอบโค้ดของฉันกับGFTT (ฟีเจอร์ที่ดีในการติดตาม - มุมแฮร์ริส)เพื่อรับการเปรียบเทียบและเนื่องจากในขั้นตอนสุดท้ายชุดของฟีเจอร์ GFTT จะพร้อมใช้งานจากกระบวนการติดตามคุณลักษณะที่มองเห็น
ฉันใช้cv::FeatureDetector::detect(...)
ซึ่งให้ฉันด้วยstd::vector<cv::KeyPoint>
ที่เต็มไปด้วยการตรวจพบคุณลักษณะ / keypoints / ภูมิภาคที่น่าสนใจ โครงสร้างcv::KeyPoint
ประกอบด้วยข้อมูลพื้นฐานเกี่ยวกับตำแหน่งของสถานที่รวมถึงข้อมูลเกี่ยวกับsize
และoctave
ที่ตรวจพบจุดสำคัญ
ผลลัพธ์แรกของฉันกับGFTTนั้นแย่มากจนกระทั่งฉันเปรียบเทียบค่าทั่วไปsize
และoctave
พารามิเตอร์ในคุณสมบัติที่แตกต่างกัน:
- MSERตั้งค่าขนาด (ระหว่าง 10 ถึง 40px) และทำให้อ็อกเทฟเป็น 0
- DoG (SIFT)ตั้งค่าทั้งขนาดและอัตราส่วนคู่ ( ขนาด /อัตราส่วนคู่ระหว่าง 20 และ 40)
- GFTTพารามิเตอร์อยู่เสมอ : size = 3 , octave = 0
ฉันเข้าใจว่าเป็นเพราะวัตถุประสงค์หลักของฟีเจอร์ GFTTไม่ได้ถูกใช้ในการจับคู่ แต่ใช้เพื่อการติดตามเท่านั้น สิ่งนี้อธิบายคุณภาพของผลลัพธ์การจับคู่ต่ำเนื่องจากตัวอธิบายที่ดึงออกมาจากคุณสมบัติเล็ก ๆ เหล่านี้หยุดการเลือกปฏิบัติและไม่เปลี่ยนแปลงกับสิ่งต่าง ๆ มากมายรวมถึงกะขนาดเล็ก 1 พิกเซล
ถ้าฉันด้วยตนเองตั้งค่าsize
ของGFTTไป10-12 , ฉันได้รับผลลัพธ์ที่ดีคล้ายกับเมื่อใช้MSERหรือหมา (ร่อน)
คำถามของฉันคือ:มีวิธีที่ดีกว่าในการกำหนดจำนวนเพิ่มsize
(และ / หรือoctave
) กว่าjust-go-with-10-see-if-it-it ? ฉันต้องการที่จะหลีกเลี่ยงการ hardcoding size
เพิ่มขึ้นถ้าเป็นไปได้และกำหนดโปรแกรมมัน แต่hardcoding ไม่เป็นไรตราบใดที่ฉันมีข้อโต้แย้งที่เป็นของแข็งบางสำรองตัวเลือกของฉันของใหม่size
/ size
เพิ่มขึ้น / การประมาณค่าอัลกอริทึมsize