首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iPhone上将无符号字符图像转换为浮点图像的最快方法

问在iPhone上将无符号字符图像转换为浮点图像的最快方法
EN

Stack Overflow用户
提问于 2011-06-18 06:59:26
回答 2查看 1.9K关注 0票数 1

我需要将无符号字符图像(640x480x1)或更小的图像转换为浮点图像进行处理。在这种情况下,由于问题的复杂性,我不能进行定点计算。我目前使用霓虹灯的过程分为两步。霓虹灯可以相当快地将整数转换为浮点型,但不能将无符号字符转换为浮点型。

1)使用LUT将无符号字符图像转换为整数图像(由于我知道范围,因此不进行泛型转换) 2)使用霓虹灯将整数转换为浮点数

这个过程大约需要10-15毫秒的时间来准备图像进行处理。

我也可以在第一步中使用LUT直接转换为浮点数。然而,我发现这样做比使用从整型到浮点型的霓虹灯需要更长的时间。所以我实际上想使用霓虹灯将无符号字符直接转换为浮点数,并摆脱第一步。

有谁知道更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-18 09:08:12

  • 如果您无论如何都要使用查找表,只需用必要的浮点数填充它即可。
  • 如果您不介意iOS 4的要求,请参阅vDSP_vflt8()

编辑:“无符号字符到整数的转换”只涉及在正确的位置添加一些零字节。最明显的方法是执行必要的移位,然后执行VDUP以清除向量,并执行VMOV.U8四次。这看起来有点慢。

更快的方法可能是使用VTBL

代码语言:javascript
复制
; load stuff into D4 (e.g. {6,7,8,9,a,b,c,d})
; D5 already contains {0,-1,-1,-1,1,-1-1-1}
; D6 already contains {2,-1,-1,-1,3,-1-1-1}
; D7 and D8 are similar...
vtbl.8 D0,{D4},D5
vtbl.8 D1,{D4},D6
vtbl.8 D2,{D4},D7
vtbl.8 D3,{D4},D8
; Now Q0 should contain {6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0}; similarly for Q1
; Interpret them as (little-endian) 32-bit ints and convert them to floats
vcvt.f32.u32 Q0,Q0,#0
vcvt.f32.u32 Q1,Q1,#0
; And save them somewhere

当然,您可以指定#8而不是#0来将所有内容除以256。

我没有看到VTBL的四字版本,但这样的重写不会太难。明显的扩展是将四字加载到Q2 = { D4,D5}中,然后重复这个过程,指定D4而不是D5 (或者使用更多的寄存器来避免数据依赖停滞)。

其他优化包括预加载缓存(我忘记了对应的ARM指令是什么)。一般来说,您可能会发现,如果不投入大量的精力,就很难击败Accelerate.framework。

票数 1
EN

Stack Overflow用户

发布于 2013-06-06 15:23:22

另一种更紧凑的方法是:

代码语言:javascript
复制
; load stuff into D4 (e.g. {6,7,8,9,a,b,c,d})

vmovl.u8        q1, d4
vmovl.u16       q0, d2
vmovl.u16       q1, d3

; Now Q0 should contain {6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0}; similarly for Q1
; Interpret them as (little-endian) 32-bit ints and convert them to floats
vcvt.f32.u32 Q0,Q0,#0
vcvt.f32.u32 Q1,Q1,#0
; And save them somewhere
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6392635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档