BOUNTY STATUS UPDATE:Korrektur Fischaugenverzeichnung programmatisch
I discovered how to map a linear lens von destination
Koordinaten in Koordinaten source
.
Wie berechnen Sie den radialen Abstand von der Mitte von Fisheye zu geradlinig?
1). Ich habe Mühe, es umzukehren und Quellkoordinaten auf Zielkoordinaten abzubilden. Was ist der umgekehrte Code im Stil der Konvertierungsfunktionen, die ich gepostet habe?
2). Ich sehe auch, dass meine Unverzerrung auf einige Linsen nicht perfekt ist - vermutlich diejenigen, die nicht streng linear sind. Was ist das Äquivalent zu Quell- und Zielkoordinaten für diese Objektive? Wieder mehr Code als nur mathematische Formeln bitte ...
Question as originally stated:
Ich habe einige Punkte, die Positionen in einem Bild mit einem Fisheye-Objektiv beschreiben.
Ich möchte diese Punkte in geradlinige Koordinaten konvertieren. Ich möchte das Bild entziffern.
Ich habe this description gefunden, wie man einen Fisheye-Effekt erzeugt, aber nicht, wie man es umkehrt.
Es gibt auch eine blog post, die beschreibt, wie man Werkzeuge dafür verwendet; diese Bilder davon:
(1): SOURCE
Original photo link
Eingang: Originalbild mit Fischaugen-Verzerrungen zu beheben.
(2): DESTINATION
Original photo link
Output: Korrigierte Bild (technisch auch mit Perspektivenkorrektur, aber das ist ein separater Schritt).
Wie berechnen Sie den radialen Abstand von der Mitte von Fisheye zu geradlinig?
Meine Funktion Stub sieht wie folgt aus:
Point correct_fisheye(const Point& p,const Size& img) {
// to polar
const Point centre = {img.width/2,img.height/2};
const Point rel = {p.x-centre.x,p.y-centre.y};
const double theta = atan2(rel.y,rel.x);
double R = sqrt((rel.x*rel.x)+(rel.y*rel.y));
// fisheye undistortion in here please
//... change R ...
// back to rectangular
const Point ret = Point(centre.x+R*cos(theta),centre.y+R*sin(theta));
fprintf(stderr,"(%d,%d) in (%d,%d) = %f,%f = (%d,%d)\n",p.x,p.y,img.width,img.height,theta,R,ret.x,ret.y);
return ret;
}
Alternativ könnte ich irgendwie das Bild von Fisheye umwandeln geradlinig, bevor die Punkte zu finden, aber ich bin von der OpenCV documentation völlig benebelt. Gibt es einen einfachen Weg, dies in OpenCV zu tun, und ist es gut genug, um es zu einem Live-Video-Feed zu machen?
ich nicht ganz bekommt, was du bist Auf der Suche nach. Das Fischauge bildet von einer Kugel zur Bildebene. Die umgekehrte Zuordnung wäre vom Bild zurück zu einer Kugel, oder? Nach welcher geradlinigen Koordinate suchen Sie? – mtrw
@mtrw Meine Quelle Bild ist Fisheye verzerrt, und ich möchte es zu entziffern – Will
So ist das Bild auf http://photo.net/learn/fisheye/ was Sie suchen? – mtrw