Im writing an app to read qr-like codes. Each code has a couple of identification points, so app can:
1. find em in the photo
2. check how their positions are different from original structure
3. calculate rotation, translation, scale
4. restore whole code by untransforming
5. read the data lying between id points
Its all simple as long, as the photo is taken perpendicularly. When the "projection" is tilted from the vertical by a few degrees the algorithm dramatically loses efficiency.
The question is: what operation/matrix do I need to bring the 2d object back to 2d surface from 3d world?
pic related, sample perspective
>>7795891
>3. calculate rotation, translation, scale
These (+ shearing) are just affine transformations. You need a projective transformation.
>5. read the data lying between id points
I hope you're using bicubic/bilinear interpolation and not nearest neighbor.
Many thanks!
Think I'll get away without interpolation. I don't expect big angles and app is meant only to read binary sequences basing on areas' average brightness, so single pixels shouldn't be crucial. Still a very valueable nice!
> and not nearest neighbor.
What do you mean by that?
notice*
I needed to do something like that in a job. Its actually pretty easy if you know the the transformed and original points.
I used a python module:
http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.ProjectiveTransform
But heres how you implement it from grounds up:
http://stackoverflow.com/questions/14177744/how-does-perspective-transformation-work-in-pil
Qt has functions to do the same
>>7796108
Nearest neighbor interpolation doesn't produce a nice image.
Look up image registration techniques, namely affine, non rigid, interpolation and similarly metrics