Renderscript Colormatrix intrinsic - 帮助我理解
Renderscript Colormatrix intrinsic - Help me understand
我想我一定是误解了应用颜色矩阵的 Renderscript 内在的工作原理,因为我的结果并不像我预期的那样。
所以我为 Renderscript 分配了一个 "overlays" OpenCV Mat,基本上可以将其想象成一个充满像素的 3 维数组,其中每个像素都有 RGBA(红、绿、蓝、Alpha)值。
所以我想像这样对每个像素应用颜色矩阵:
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
所以我希望新的 Vector 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,但我的结果通常很奇怪,例如这个矩阵应该不会真正影响除了红色、绿色和它们的组合之外的任何东西(例如,红色变成 grey/brown 的深色阴影,绿色变成浑浊的黄色,紫色是红色 + 蓝色,所以红色消失,紫色只变成蓝色。即使是白纸也变成了绿色调)。
我也尝试过仅通过 Renderscript 从相机源中直接流式传输并将信息存储在位图中,但结果是一样的。
如有任何帮助,我们将不胜感激! :-)
我想我一定是误解了应用颜色矩阵的 Renderscript 内在的工作原理,因为我的结果并不像我预期的那样。
所以我为 Renderscript 分配了一个 "overlays" OpenCV Mat,基本上可以将其想象成一个充满像素的 3 维数组,其中每个像素都有 RGBA(红、绿、蓝、Alpha)值。
所以我想像这样对每个像素应用颜色矩阵:
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
所以我希望新的 Vector 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,但我的结果通常很奇怪,例如这个矩阵应该不会真正影响除了红色、绿色和它们的组合之外的任何东西(例如,红色变成 grey/brown 的深色阴影,绿色变成浑浊的黄色,紫色是红色 + 蓝色,所以红色消失,紫色只变成蓝色。即使是白纸也变成了绿色调)。
我也尝试过仅通过 Renderscript 从相机源中直接流式传输并将信息存储在位图中,但结果是一样的。
如有任何帮助,我们将不胜感激! :-)