2016-09-08 3 views
0

Ich denke, dass ich falsch verstanden werden muss, wie das Renderscript intrinsisch eine Farbmatrix anwenden funktioniert, weil meine Ergebnisse nicht so ausfallen, wie ich es erwarte.Renderscript Colormatrix intrinsic - Helfen Sie mir zu verstehen

Also habe ich eine Zuweisung für Renderscript, die eine OpenCV-Matte "überlagert", im Grunde genommen als ein dreidimensionales Array voller Pixel, wo jedes Pixel RGBA (Rot, Grün, Blau, Alpha) -Werte hat.

Deshalb möchte ich so ein Colormatrix auf jedes Pixel anzuwenden:

Vector R times Matrix 0.152286f, 1.052583f, -0.204868f, 0f, 
     G    0.114503f, 0.786281f, 0.099216f, 0f, 
     B    -0.003882f, -0.048116f, 1.051998f, 0f, 
     A    0.000000f, 0.000000f, 0.000000f, 1f 

Also, was ich erwarte, ist zu geschehen, dass der neue Vector R'G'B'A‘wird so sein:

R' = R * 0.152286f + G * 1.052583f + B * -0.204868f + A * 0f 
G' = as above 
B' = as above 
A' = R * 0 + G * 0 + B * 0 + A * 1 

Also wird der neue R'-Wert eine Kombination der alten RGB-Werte sein, A wirkt sich nicht auf RGB aus. Gleiches Verhalten für G 'und B'. A wird immer gleich bleiben.

In-Code sieht es dies wie:

Matrix4f mProtan = new Matrix4f(new float[]{ 
       0.152286f, 1.052583f, -0.204868f, 0f, 
       0.114503f, 0.786281f, 0.099216f, 0f, 
       -0.003882f, -0.048116f, 1.051998f, 0f, 
       0.000f, 0.000f, 0.000f, 1f 
     }); 
     scriptIntrinsicColorMatrix.setColorMatrix(mProtan); 
     scriptIntrinsicColorMatrix.forEach(inputAllocation, outputAllocation); 

So bin ich mit OpenCV tun dies bereits und es funktioniert wie erwartet, aber es ist ein bisschen langsam, daher würde ich render verwenden möchten, aber es mein Ergebnis ist normalerweise seltsam, zum Beispiel sollte diese Matrix nichts anderes als Rot, Grün und Kombinationen davon beeinflussen (zB Rot wird zu einem dunklen Grau/Braun, Grün wird zu einem schlammigen Gelb und Lila ist Rot + Blau, so dass Rot weggeht und Purpur wird nur Blau. Sogar weißes Papier erhält eine grünliche Tönung).

Original, Expected and Renderscript

Ich habe auch versucht direkte Streaming aus dem Kamerabild über render nur und Speichern von Informationen in Bitmaps, aber die Ergebnisse am Ende die gleiche oben.

Jede Hilfe würde sehr geschätzt werden! :-)

Antwort

Verwandte Themen