2016-09-08 9 views
0

내 결과가 예상대로 나오지 않기 때문에 Renderscript 내재적으로 colormatrix를 적용하는 방법을 오해해야한다고 생각합니다.Renderscript Colormatrix intrinsic - 이해 도와주세요

OpenCV Mat을 "오버레이"하는 Renderscript에 대한 할당량은 기본적으로 모든 픽셀에 RGBA (빨강, 녹색, 파랑, 알파) 값이있는 픽셀로 가득 찬 3 차원 배열로 상상해보십시오.

그래서 나는이 같은 모든 픽셀에 colormatrix을 적용 할 :

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 

그래서 나는 일이 기대하는 것은 새로운 벡터 R'G'B'A은 '이렇게 될 것입니다 :

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 

따라서 새로운 R '값은 이전 RGB 값의 조합이되며 A는 RGB에 영향을주지 않습니다. G '와 B'에 대해서도 같은 동작입니다. A는 항상 동일하게 유지됩니다. 내 결과가

그래서
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); 

이미 OpenCV의와 함께이 일을하고 그것이 예상대로 작동하지만, 좀 느린, 그래서 내가 Renderscript을 사용하고 싶습니다,하지만 :

코드 그것은 다음과 같습니다 일반적으로 이상한 것입니다. 예를 들어,이 매트릭스는 빨강, 녹색 및 그 조합 이외의 다른 요소에 영향을 주어서는 안됩니다 (예 : 빨강은 회색/갈색의 어두운 음영이되고 녹색은 진흙처럼 황색이되고 보라색은 빨강 + 파랑이됩니다. 보라색 만 파란색이되고 심지어 흰 종이는 녹색을 띄게됩니다).

Original, Expected and Renderscript

는 또한 Renderscript 만 비트 맵의 ​​정보를 저장 통해 카메라로부터 직접 공급 스트리밍했지만, 그 결과는 동일 끝낸다.

도움이 될 것입니다. :-)

답변