views:

39

answers:

2

I'm counting objects in an image. I wish to perform a linear interpolation where I know the pixel sizes of my objects at near and far perspectives and the positions of these two objects in the image. The images at the bottom of the image are larger as they are near the camera which took them.

The image to be analysed is the same from this question here... link text

I realise that linear interpolation will only work on one plane, here from top to bottom, so ideas on how to do it properly would be good. It is for a masters dissertation, I've done the 'hard' bits - image classification, data collection, however I've just hit a mental brick wall, between Java (currently using) and R (now just for stats), any help would be greatly appreciated!

A: 
rwong
Could you finish what you were saying? It seemed exactly what I wanted!
Mark Iliffe
A: 

So I'd use 3d projection equation and work them backwards to find the x,y,z of some object in your scene. So given the size of your object, focal length of your camera, you can calculate the x,y,z of the objet in the frame.

I'd make some assumptions about the camera (no rotation, no translation the camera is sitting at 0, 0, 0 down the z axis).

image.x = model.x * camera.focalLength / model.z
image.y = model.y * camera.focalLength / model.z

Flipping them around you get:

model.x = image.x * model.z / camera.focalLength;
model.y = image.y * model.z / camera.focalLength;

This assumes you know the distance to the point you believe the object rests from the camera (i.e. model.z). Similarly if you want to calculate the distance of the object from the camera you can calculate the model.z this way:

model.z = model.x * camera.focalLength / image.x
model.z = model.y * camera.focalLength / image.y

Trick I suppose is figuring out what you should use for model.x, and model.y in this case. Taking either the width of your object or the height of your object you can come up with a relationship between constant width in your object and the width of your object in the scene as it changes in distance.

model.z = model.width * camera.focalLength / image.width;
model.z = model.height * camera.focalLength / image.height;

Been sitting on that answer for a few days so I check my facts. But that roughly agrees with the other post.

chubbard