Forum: FPGA, VHDL & Co. Grauwerte oder Pixelposition


von Bill L. (Firma: Mann) (billates)


Lesenswert?

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?

von dito (Gast)


Lesenswert?

x und y sind die Pixelpositionen. Die Funktionen src und des (source 
bzw. destination) entsprechen jeweils dem Grauwert an dieser Postion.

von Bill L. (Firma: Mann) (billates)


Lesenswert?

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?

von dito (Gast)


Lesenswert?

Du musst den Src-Koordinatenvektor mit der Kalibrationsmatrix 
multiplizieren und erhälst dann die neue Position. Du setzt du den 
Grauwert hin.

von dito (Gast)


Lesenswert?

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.

von Harald (Gast)


Lesenswert?

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.

von Bill L. (Firma: Mann) (billates)


Lesenswert?

hallo Harald also du meinst:

des(RGB) = Matrix X src(RGB)

da spilen die Pixelpositionen keine Rolle mehr oder?

von Harald F. (hfl)


Lesenswert?

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
Noch kein Account? Hier anmelden.