छवि का आकार बदलना आंतरिक कैमरा मैट्रिक्स को कैसे प्रभावित करता है?


18

मेरे पास एक कैमरा मैट्रिक्स है (मैं आंतरिक और बाहरी दोनों मापदंडों को जानता हूं) जो कि आकार एचएक्सडब्ल्यू की छवि के लिए जाना जाता है। (मैं इस मैट्रिक्स का उपयोग कुछ गणनाओं के लिए करता हूं जिनकी मुझे आवश्यकता है)।

मैं एक छोटी छवि का उपयोग करना चाहता हूं, कहते हैं: एच2×डब्ल्यू2 (आधा मूल)। उसी संबंध को बनाए रखने के लिए मुझे मैट्रिक्स में क्या परिवर्तन करने की आवश्यकता है?

मेरे पास , आंतरिक मापदंडों के रूप में, ( , रोटेशन और अनुवाद)आर टीआरटी

cam=K[RT]

K=(ax0u00ayv0001)

K 3 * 3 है, मैंने सोचा कि , , और को 0.5 से गुणा किया (छवि का आकार बदल दिया गया), लेकिन मुझे यकीन नहीं है।a y u 0 v 0axayu0v0

जवाबों:


13

नोट: यह इस बात पर निर्भर करता है कि आप रिसाइज्ड इमेज में क्या निर्देशांक का उपयोग करते हैं। मैं मान रहा हूं कि आप शून्य-आधारित प्रणाली का उपयोग कर रहे हैं (जैसे C, इसके विपरीत Matlab) और 0 में तब्दील हो गया है। इसके अलावा, मैं मान रहा हूं कि आपके पास निर्देशांक के बीच कोई तिरछा नहीं है। यदि आपके पास तिरछा है, तो इसे भी गुणा किया जाना चाहिए

संक्षिप्त उत्तर : मान लें कि आप एक समन्वय प्रणाली का उपयोग कर रहे हैं जिसमें u=u2,v=v2 , हाँ, आप गुणा करना चाहिएax,ay,u0,v00.5 से।

विस्तृत उत्तर वह फ़ंक्शन जो दुनिया में एक बिंदु P को धर्मान्तरित करता है, वह कैमरा निर्देशांक (x,y,z,1)>(u,v,S) समन्वय करता है - > ( u , v , S ) है:

(ax0u00ayv0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

जहां (u,v,S)>(u/S,v/S,1) , क्योंकि निर्देशांक समरूप हैं।

संक्षेप में इसे u = m 1 P लिखा जा सकता है u=m1Pm3P,v=m2Pm3P
जहांMऊपर उल्लिखित दो मैट्रिक्स का उत्पाद है, औरmiमैट्रिक्सMपंक्ति है। (उत्पाद अदिश उत्पाद है)।

छवि को पुन: आकार देने के बारे में सोचा जा सकता है:

u=u/2,v=v/2

इस प्रकार

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

मैट्रिक्स फॉर्म में वापस लौटना हमें देता है:

(0.50000.50001)(ax0u00ayv0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

जो के बराबर है

(0.5ax00.5u000.5ay0.5v0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

अतिरिक्त जानकारी के लिए, फोर्शिथ , अध्याय 3 - ज्यामितीय कैमरा अंशांकन देखें।


Thanks a lot for the explanation !!! I'm just no so sure what you mean by zero-based system , I'm using matlab, do I need any other adjustments ?
matlabit

@matlabit, If you are using Matlab, you should use the transformation with u=(u1)/2+1,v=(v1)/2+1, since it has one-based indexing (First element is 1, not 0). Try to compute the relevant matrix in this case. If you do not need sub-pixel accuracy, you can just ignore it and use the formula I gave you.
Andrey Rubshtein

8

Andrey mentioned that his solution assumes 0 is transformed to 0. If you are using pixel coordinates this is likely not true when you re-size the image. The only assumption you really need to make is that your image transformation can be represented by a 3x3 matrix (as Andrey demonstrated). To update your camera matrix you can just premultiply it by the matrix representing your image transformation.

[new_camera_matrix] = [image_transform]*[old_camera_matrix]

As an example, say you need to change the resolution of an image by a factor 2n and you are using 0 indexed pixel coordinates. Your coordinates are transformed by the relationships

x=2n(x+.5).5

y=2n(y+.5).5

this can be represented by the matrix

(2n02n1.502n2n1.5001)

so your final camera matrix would be

(2n02n1.502n2n1.5001)(ax0u00ayv0001)


Could you please elaborate why you add .5 and then subtract .5? Does 0.5 apply only to scaling w/ a factor 2n? If not, how does one compute that sub-pixel number?
Gurumonster

1
I think the point is that the center of pixel "0, 0" is not really at "0, 0" (=top left corner of the pixel) but at "0.5, 0.5". So you have to account for that offset before and after the transformation, and the factor is always 0.5, no matter the scaling factor.
Jan Rüegg

Yup thats exactly right
Hammer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.