hallo, ich versuche zwei Kameras anzupassen mit einer Kalibration(Kalibrierung). Ich arbeite mit FPGA und ich frage mich wie sollte ich eine Matrix Multiplikation da rechnen. In meinem Modul ich kann nur auf RGB Werte jedes Pixels zugreifen und ich habe die folgende Gleichung gefunden: des(x,y) = M x src(x,y). M st die Kalibrattionsmatrix aber was ist des(x,y) und srx(x,y)? Grauwerte oder pixelposition? hat man eine Idee?
x und y sind die Pixelpositionen. Die Funktionen src und des (source bzw. destination) entsprechen jeweils dem Grauwert an dieser Postion.
danke für die Anwort. Nun wollte ich noch mal wissen, ich habe den Grauwert eines bildpixels. Ich habe die Kalibration matrix 3x3 (mit open cv berechnet), wie soll ich den neuen Pixelwert rechnen? des(x,y) = 234 x (a,b,c; d,e,f; g,h,i) des(x,y) -> neuer Grauwert an pos x,y 234 -> alte Grauwert an pos x,y (a,b,c; d,e,f; g,h,i) entspriht Kalibrationmatrix. wie soll das gehen? oder gibt es eine andere Möglichkeit es zu rechnen?
Du musst den Src-Koordinatenvektor mit der Kalibrationsmatrix multiplizieren und erhälst dann die neue Position. Du setzt du den Grauwert hin.
Es könnte auch durchaus sein, dass man vom Ausgabebild (des) zurückrechnet in das Eingabebild (src), dort den entsprechenden Grauwert holt und ins Ausgabebild schreibt (also "src" und "des" in der Gleichung vertauschen). Weiß jetzt selbst nicht mehr so genau wie das gemacht wird. Ist schon ein Weilchen her, dass ich mich damit zuletzt beschäftigt habe.
Ich glaube, Du vermischst da was. Grauwerte gelten ja immer für eine Farbe, die Korrekturmatrix gilt für alle drei Farben. Die muss also auf drei Grauwerte angewendet werden und ergibt dann drei auch Ergebnisse.
hallo Harald also du meinst: des(RGB) = Matrix X src(RGB) da spilen die Pixelpositionen keine Rolle mehr oder?
Doch, schon. Die Multiplikation der source-Grauwerte mit der Korrekturmatrix muss für jedes einzelne Pixes des Bildes durchgeführt werden. Also wenn Du das im FPGA machen willst, dann musst du - die 3 Grauwerte der Farben aus dem Speicher holen - die 9 Multiplikationen mit den Matrizenelementen durchführen, am besten mit 9 parallel arbeitenden Multiplizierern mit nachgeschalteten Summierern - die 3 Ergebniss-Grauwerte wieder in den Speicher schreiben, an gleicher oder anderer Stelle und das ganze eben durch den ganzen Framebuffer des Bildes. Was Du noch nicht gesagt hast, ist ob es nur eine Korrekturmatrix für die ganze Kamera gibt oder eine pro Pixel. Das würde die Sache etwas verkomplizieren und vor allem mehr Speicherbandbreite erfordern, wäre aber auch lösbar. Möglicherweise kannst du die Korrektur auch machen, bevor das Bild im Speicher ist. Wenn das nicht-korrigierte Bild erst gar nicht im Speicher steht, muss man es auch nicht erst auslesen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.