OpenCV - แยกตัวอธิบาย SIFT/SURF ออกจากแพตช์ที่ครอบตัดไว้ล่วงหน้า

ฉันมีชุดแพตช์สีเทาขนาด 64x64 ขนาด 100K (ซึ่งจัดเรียงไว้แล้ว ซึ่งหมายความว่าแพตช์ทั้งหมดมีทิศทางเดียวกัน) และฉันต้องการแยกตัวอธิบาย SIFT ออกจากแพตช์แต่ละตัวโดยใช้ OpenCV

เป็นที่ชัดเจนสำหรับฉัน สิ่งที่ฉันต้องทำคือกำหนดเวกเตอร์ด้วยจุดสำคัญหนึ่งจุด kp เช่น: kp.x=32, kp.y=32

อย่างไรก็ตาม ฉันไม่รู้วิธีตั้งค่าพารามิเตอร์ kp.size จากการดูโค้ดของ SIFT ดูเหมือนว่ากำลังทำการคำนวณที่ไม่สำคัญกับพารามิเตอร์นั้น แทนที่จะคิดว่าเป็นขนาดของแพตช์

คำถามที่ 1: พารามิเตอร์ kp.size ควรเป็นอย่างไรเมื่อแยกตัวอธิบาย SIFT ออกจากแพตช์ขนาด 64x64

คำถามที่ 2: พารามิเตอร์ kp.size ควรเป็นอย่างไรเมื่อแยกตัวอธิบาย SURF ออกจากแพตช์ขนาด 64x64


person GilLevi    schedule 12.09.2014    source แหล่งที่มา
comment
ดูที่ 1. เอกสาร SIFT/SURF ต้นฉบับว่ามีการเชื่อมโยงขนาดคุณลักษณะและขนาดตัวอธิบายอย่างไร 2. รหัส openCV ไม่ว่าจะใช้การคำนวณแบบเดียวกันหรือไม่ หรือคุณสามารถแก้ไขโค้ด openCV SIFT/SURF เพื่อพิมพ์มาตราส่วนและขนาดตัวอธิบายและทดสอบค่าบางค่า ;)   -  person Micka    schedule 12.09.2014
comment
github.com/hpatches/hpatches-benchmark/blob/ master/python/ นี่คือสคริปต์   -  person old-ufo    schedule 10.06.2019


คำตอบ (2)


หากคุณดูที่สิ่งพิมพ์ต้นฉบับ กรอง ระดับของจุดสำคัญคือ ใช้ในการชั่งน้ำหนักฮิสโตแกรมของขนาดการไล่ระดับสีและการวางแนว (ย่อหน้า 6 ตัวอธิบายรูปภาพในเครื่อง) ดังนั้นในกรณีของคุณ เนื่องจากแพทช์สีเทาถูกจัดเรียงไว้ มันขึ้นอยู่กับคุณที่จะตัดสินใจว่าคุณต้องการให้น้ำหนักการมีส่วนร่วมของพิกเซลเพิ่มเติมจากศูนย์กลางแพตช์หรือไม่ และเลือกสเกล (เช่น ด้วย ของหน้าต่างถ่วงน้ำหนักแบบเกาส์เซียน ) ตามนั้น

สำหรับ SURF โดยพื้นฐานแล้วมันเป็นหลักการเดียวกัน ยกเว้นว่าแทนที่จะใช้ขนาดการไล่ระดับสี กลับใช้การตอบสนองต่อ haar wavelet แต่คุณยังสามารถให้น้ำหนักการตอบสนองเหล่านั้นด้วยหน้าต่างแบบเกาส์เซียนได้

นอกจากนี้ เนื่องจากคุณกำลังทำงานกับแพตช์ที่สอดคล้อง ฉันขอแนะนำให้คุณอย่าใช้ฟังก์ชันระดับสูงของ OpenCV แต่ให้ใช้/เขียนโค้ดใหม่ในส่วนการแยกคำอธิบาย และใช้การถ่วงน้ำหนักใดๆ ที่คุณต้องการคำนวณการแสดงแพตช์ของคุณ เหตุผลหนึ่งที่ต้องทำเช่นนั้นคือ ในตัวอย่าง SIFT การคำนวณของตัวอธิบาย SIFT อาจ "เพิ่มจุดสำคัญใหม่" ไปยังจุดที่คุณระบุ หากอัลกอริทึม "ไม่พอใจ" กับการวางแนวจุดสำคัญ มันจะทำซ้ำจุดสำคัญที่เดียวกัน ทำเลแต่มีทิศทางต่างกัน

person remi    schedule 22.09.2014

ตกลง. ดังนั้น SIFT descriptor มักจะใช้พื้นที่ใกล้เคียงของกริดขนาด 4x4 โดยแต่ละกริดมักจะมีขนาด 4x4 พิกเซล ดังนั้นพื้นที่ใกล้เคียงในหน่วยพิกเซลมักจะเป็น 16x16 สเกล/ขนาดเป็นพารามิเตอร์ในการกำหนดจำนวนการลดขนาด/การเบลอ/รัศมีของจุดสำคัญ ดังนั้น ฉันคิดว่าในกรณีของคุณ นี่จะเป็น 4

คุณคงทราบด้วยว่าจุดสำคัญของ SIFT นั้นใช้ได้กับเลเยอร์พิกเซลย่อยด้วย (32,32) จะไม่เป็นจุดศูนย์กลางที่แน่นอนของแพตช์รูปภาพของคุณ ซึ่งจริงๆ แล้วจะเป็น (32.5, 32.5) หากขนาดรูปภาพของคุณ (x,y) เริ่มต้นจาก 1 หากเริ่มจาก 0 มันจะเป็น (31.5, 31.5)- เช่นเดียวกับในกรณีของ opencv

person The Nomadic Coder    schedule 22.09.2014