ด้วยOpenCVฉันคำนวณการถ่ายภาพระหว่างพูดภาพสองภาพนี้:
และ
ไม่ต้องกังวลกับสีขาวแปลก ๆ ทางด้านขวามันเป็นเพราะตัวยึดสมาร์ทโฟนที่ฉันใช้ homography ที่กำหนดโดยfindHomography ()ฟังก์ชั่น (ใช้คะแนนที่ตรวจพบกับตัวตรวจจับคุณลักษณะอย่างรวดเร็วและตัวจับคำอธิบาย HammingLUT ) คือ:
A = [ 1.412817430564191, 0.0684947165270289, -517.7751355800591;
-0.002927297251810, 1.210310757993256, 39.56631316477566;
0.000290600259844, -9.348301989015293e-05, 1]
ตอนนี้ฉันใช้กระบวนการเดียวกันเพื่อคำนวณ homography ระหว่างภาพเดียวกันที่หมุนไป 180 องศา (กลับหัว) โดยใช้imagemagick (ตามความเป็นจริงฉันสนใจที่จะทราบความสัมพันธ์ของการหมุน 90 หรือ 270 องศา ... ) ที่นี่พวกเขาคือ:
และ
ด้วยภาพเหล่านี้การทำตัวพิมพ์จะกลายเป็น:
B = [ 0.7148688519736168, 0.01978048500375845, 325.8330631554814;
-0.1706219498833541, 0.8666521745094313, 64.72944905752504;
-0.0002078857275647, -5.080048486810413e-05, 1]
ตอนนี้คำถามคือคุณเกี่ยวข้อง A และ B ได้อย่างไร ค่าทแยงมุมสองค่าแรกของ A ใกล้เคียงกับค่าผกผันของค่า B แต่ไม่แม่นยำมาก (.707805537 แทน 0.71486885) จุดประสงค์สุดท้ายของฉันคือการใช้ความสัมพันธ์ที่ต้องการเพื่อแปลงเมทริกซ์สุดท้ายโดยหลีกเลี่ยงการคำนวณการหมุนภาพที่มีราคาแพง
Mat invT = 1./t; Mat n = invT.t() * (H - R);
(จริง ๆ แล้วมันn/d
) ตอนนี้ "การใช้การหมุนกับมัน" ทำให้เวกเตอร์ 3x1 ของฉัน แต่ฉันจะใช้มันเพื่อคำนวณเมทริกซ์ homography ได้อย่างไร ขอบคุณ