การปรับขนาดภาพมีผลต่อเมทริกซ์กล้องภายในอย่างไร


18

ฉันมีเมทริกซ์กล้อง (ฉันรู้ว่าพารามิเตอร์ทั้งภายในและภายนอก) เป็นที่รู้จักสำหรับภาพขนาด HxW (ฉันใช้เมทริกซ์นี้สำหรับการคำนวณบางอย่างที่ฉันต้องการ)

ฉันต้องการใช้ภาพที่เล็กลงพูดว่า: (ครึ่งหนึ่งของต้นฉบับ) ฉันต้องทำการเปลี่ยนแปลงอะไรกับเมทริกซ์เพื่อรักษาความสัมพันธ์เดิมH2×W2

ฉันมีเป็นพารามิเตอร์ที่แท้จริง ( การหมุนR , Tและการแปล)KRT

ลูกเบี้ยว=K[RT]

K=(ax0ยู00aYโวลต์0001)

คือ 3 * 3 ฉันคิดว่าการคูณ a x , a , y , u 0และ v 0ด้วย 0.5 (ปัจจัยที่ปรับขนาดภาพ) แต่ฉันไม่แน่ใจKaxaYยู0โวลต์0

คำตอบ:


13

หมายเหตุ: ขึ้นอยู่กับพิกัดที่คุณใช้ในภาพที่ปรับขนาดแล้ว ฉันสมมติว่าคุณกำลังใช้ระบบ zero-based (like C, like Matlab) และ 0 ถูกแปลงเป็น 0 นอกจากนี้ฉันยังสมมติว่าคุณไม่มีความเอียงระหว่างพิกัด หากคุณมีความเบ้ก็ควรจะถูกคูณด้วย

คำตอบสั้น ๆ : สมมติว่าคุณกำลังใช้ระบบพิกัดที่u=u2,v=v2ใช่คุณควรคูณx,Y,U0,V00.5ax,ay,u0,v0

คำตอบโดยละเอียดฟังก์ชั่นที่แปลงจุดPในพิกัดโลกเป็นพิกัดกล้อง (x,y,z,1)>(u,v,S)คือ:

(ax0u00ayv0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

โดยที่(u,v,S)>(u/S,v/S,1)เนื่องจากพิกัดนั้นเป็นเนื้อเดียวกัน

ในระยะสั้นนี้สามารถเขียนเป็น u=m1Pm3P,v=m2Pm3P
ที่Mเป็นผลิตภัณฑ์ของทั้งสอง matrixes ดังกล่าวข้างต้นและmiเป็นแถว i'th ของเมทริกซ์MM(ผลิตภัณฑ์นี้เป็นผลิตภัณฑ์สเกลาร์)

การปรับขนาดรูปภาพอีกครั้งสามารถนึกถึง:

u=u/2,v=v/2

ดังนั้น

u=(1/2)M1PM3Pv=(1/2)M2PM3P

การแปลงกลับเป็นเมทริกซ์ให้:

(0.50000.50001)(ax0ยู00aYโวลต์0001)(R11R12R13TxR21R22R23TYRวันที่ 31R32R33TZ0001)(xYZ1)

ซึ่งมีค่าเท่ากับ

(0.5ax00.5ยู000.5aY0.5โวลต์0001)(R11R12R13TxR21R22R23TYRวันที่ 31R32R33TZ0001)(xYZ1)

สำหรับข้อมูลเพิ่มเติมอ้างอิงForsythบทที่ 3 - การปรับเทียบกล้องเรขาคณิต


ขอบคุณมากสำหรับคำอธิบาย !!! ฉันแค่ไม่แน่ใจว่าสิ่งที่คุณหมายถึงโดยระบบ zero - based ฉันใช้ matlab ฉันต้องปรับเปลี่ยนอื่น ๆ
matlabit

@matlabit หากคุณใช้ Matlab คุณควรใช้การแปลงด้วยเนื่องจากมันมีการทำดัชนีแบบอิงฐานเดียว องค์ประกอบคือ 1 ไม่ใช่ 0) ลองคำนวณเมทริกซ์ที่เกี่ยวข้องในกรณีนี้ หากคุณไม่ต้องการความแม่นยำของพิกเซลย่อยคุณสามารถเพิกเฉยและใช้สูตรที่ฉันให้คุณได้ ยู'=(ยู-1)/2+1,โวลต์'=(โวลต์-1)/2+1
Andrey Rubshtein

8

อันเดรย์กล่าวว่าวิธีแก้ปัญหาของเขาจะถือว่า 0 ถูกแปลงเป็น 0 หากคุณใช้พิกัดพิกเซลซึ่งอาจไม่เป็นจริงเมื่อคุณปรับขนาดภาพใหม่ ข้อสันนิษฐานเดียวที่คุณต้องทำคือการแปลงภาพของคุณสามารถแสดงเป็นเมทริกซ์ 3x3 (ดังที่ Andrey แสดง) ในการอัพเดทเมทริกซ์กล้องของคุณคุณสามารถทำการเมทริกซ์แทนการแปลงภาพของคุณได้ล่วงหน้า

[new_camera_matrix] = [image_transform]*[old_camera_matrix]

ตัวอย่างเช่นสมมติว่าคุณต้องเปลี่ยนความละเอียดของภาพด้วยปัจจัยและคุณกำลังใช้พิกัดพิกเซลแบบดัชนี 0 ดัชนี พิกัดของคุณเปลี่ยนไปตามความสัมพันธ์2n

x'=2n* * * *(x+0.5)-0.5

Y'=2n* * * *(Y+0.5)-0.5

สิ่งนี้สามารถถูกแทนด้วยเมทริกซ์

(2n02n-1-0.502n2n-1-0.5001)

ดังนั้นเมทริกซ์กล้องสุดท้ายของคุณก็คือ

(2n02n-1-0.502n2n-1-0.5001)(ax0ยู00aYโวลต์0001)


คุณช่วยอธิบายเพิ่มเติมได้ไหมว่าทำไมคุณจึงเพิ่ม. 5 จากนั้นจึงลบ 0.5 0.5 ใช้กับการขยายด้วยปัจจัยเท่านั้นหรือไม่2n? หากไม่เป็นเช่นนั้นจะคำนวณจำนวนพิกเซลย่อยได้อย่างไร
Gurumonster

1
ฉันคิดว่าประเด็นคือจุดศูนย์กลางของพิกเซล "0, 0" ไม่ได้อยู่ที่ "0, 0" (= มุมซ้ายบนของพิกเซล) แต่ที่ "0.5, 0.5" ดังนั้นคุณต้องคำนึงถึงการชดเชยก่อนและหลังการแปลงและปัจจัยอยู่เสมอ 0.5 ไม่ว่าจะเป็นตัวประกอบสเกล
Jan Rüegg

ใช่นั่นถูกต้องแล้ว
Hammer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.