【发布时间】:2016-03-08 15:38:33
【问题描述】:
有什么方法可以对 32bpp 图像通道进行 DE-interleave,类似于下面的 neon 代码。
//Read all r,g,b,a pixels into 4 registers
uint8x8x4_t SrcPixels8x8x4= vld4_u8(inPixel32);
ChannelR1_32x4 = vmovl_u16(vget_low_u16(vmovl_u8(SrcPixels8x8x4.val[0]))),
channelR2_32x4 = vmovl_u16(vget_high_u16(vmovl_u8(SrcPixels8x8x4.val[0]))), vGaussElement_32x4_high);
基本上我希望所有颜色通道在单独的向量中,每个向量都有 4 个 32 位元素来做一些计算,但我对 SSE 不是很熟悉,在 SSE 中找不到这样的指令,或者如果有人可以提供更好的方法来做那?非常感谢任何帮助
【问题讨论】:
-
您的像素是 4 x 8 位 RGBA,即每个像素 32 位吗?以及你想要什么输出格式,分离 8 位 R、G、B 和 A 的向量,还是你也想同时将 8 位值解包为 32 位?
-
是的,我的图像是每像素 32 bpp 8 位,是的,我还想同时将 8 位值解压缩为 32 位。类似于 R、R、R、R(其中每个 R 占用 32 位),类似地 B、B、B、B ......当我将每个 R、B、G、A 乘以某个 32 位值时,这基本上会有所帮助。
-
我只是想实现高斯模糊,其中我的高斯系数是 32 位,所以我需要这个去交织,然后我可以简单地将去交织向量与高斯向量相乘
-
您可能不想为这样的过滤器执行 32x32 位乘法,尤其是在它对性能至关重要的情况下。使用定点 16x16 乘法。
-
你能告诉我们如何做 16x16 并将结果存储在 32 位中。是的,实际上我的高斯系数是 16 位值。
标签: image-processing sse simd sse2