কোনও চিত্রের আকার পরিবর্তন কীভাবে অভ্যন্তরীণ ক্যামেরা ম্যাট্রিক্সকে প্রভাবিত করে?


18

আমার কাছে একটি ক্যামেরা ম্যাট্রিক্স রয়েছে (আমি অভ্যন্তরীণ এবং বহিরাগত উভয় পরামিতি জানি) আকারের চিত্র HxW এর জন্য পরিচিত। (আমি এই ম্যাট্রিক্সটি আমার প্রয়োজন কয়েকটি গণনার জন্য ব্যবহার করি)।

আমি একটি ছোট চিত্র ব্যবহার করতে চাই, বলুন: এইচ2×ওয়াট2 (মূল অর্ধেক) একই সম্পর্ক রাখার জন্য, ম্যাট্রিক্সে আমার কী পরিবর্তন করা দরকার?

আমার কাছে, কে আন্তঃসৌনিক পরামিতি হিসাবে, ( আর , টি আবর্তন এবং অনুবাদ)

চাকার অংশবিশেষ=কে[আরটি]

কে=(একটিএক্স0তোমার দর্শন লগ করা00একটিYবনাম0001)

3 * 3, আমি গুন বিষয়ে চিন্তা একটি এক্স , একটি Y , U 0 , এবং V 0 0.5 (ফ্যাক্টর ইমেজ মাপ পরিবর্তন করা হয়েছে) দ্বারা, কিন্তু আমি নিশ্চিত নই।Kaxayu0v0

উত্তর:


13

দ্রষ্টব্য: আপনি পুনরায় আকারিত চিত্রটিতে কী স্থানাঙ্ক ব্যবহার করেন তা নির্ভর করে। আমি ধরে নিচ্ছি যে আপনি শূন্য-ভিত্তিক সিস্টেমটি ব্যবহার করছেন (যেমন C, এর বিপরীতে Matlab) এবং 0 টি 0 তে রূপান্তরিত হয়েছে Also এছাড়াও, আমি ধরে নিচ্ছি যে স্থানাঙ্কগুলির মধ্যে আপনার কোনও স্কিউ নেই। আপনার যদি স্কিউ থাকে তবে এটিও বহুগুণে বৃদ্ধি করা উচিত

সংক্ষিপ্ত উত্তর : ধরে নিচ্ছেন যে আপনি একটি সমন্বিত সিস্টেম ব্যবহার করছেন যা u=u2,v=v2 , হ্যাঁ, আপনি সংখ্যাবৃদ্ধি করা উচিতax,ay,u0,v00.5 দ্বারা।

বিশদ উত্তর যে ক্রিয়াটি বিশ্বের একটি বিন্দু পি কে ক্যামেরার স্থানাঙ্কে (x,y,z,1)>(u,v,S) এ রূপান্তর করে :

(ax0u00ayv0001)(R11R12R13TxR21R22R23TyR31R32R33Tz0001)(xyz1)

যেখানে (u,v,S)>(u/S,v/S,1) , যেহেতু স্থানাঙ্কগুলি একজাতীয়।

সংক্ষেপে এটি u = মি 1 পি হিসাবে লেখা যেতে পারে 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)

For additional information, refer to Forsyth, chapter 3 - Geometric camera calibration.


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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.