【发布时间】:2015-02-19 21:09:04
【问题描述】:
我对图像数据使用 5 交叉中值滤波器的变体 在小型嵌入式系统上,即
x
x x x
x
算法真的很简单,读取5个值,取最高的2个 并对它们进行一些计算并写回结果。
5个输入值都在0-20的范围内。计算出来的值也在0-20范围内!
我想知道是否可以使用查找表来加快速度 事情发生了,但我未能生成可以使用的密钥。
例如,考虑输入是否在 0-5 范围内, 生成唯一密钥的一种方法是获取二进制 表示并仅连接数字,即
101 101 101 101 101
key = x[0] | x[1] << 3 | x[2] << 6 | x[3] << 9 | x[4] << 12
但是 LUT 很大,大约有 23k 项。
由于[5,0,0,0,5] 与[5,0,5,0,0] 相同,因此简化了
可能是使用 2 个 LUT,
LUT1 = [0, 1, 6, 31, 156, 781]
其中每个项目比 5 个项目的最大总和多 1 个 以前的元素
然后密钥可以计算为(使用python语法)
key = sum([LUT1[x[0]], LUT1[x[1]], LUT1[x[2]],
LUT1[x[3]], LUT1[x[4]a]])
但同样,这种方法无法扩展到 0-20 的范围 每个元素。
使用中所述的排序网络 Fastest sort of fixed length 6 int array 不会提高性能;我只对2感兴趣 最高值。
那么,是否可以从五个正数中创建一个唯一键 可用作索引的 0-20 范围内的整数 LUT?
【问题讨论】:
-
既然您只使用了两个最大值(而丢弃了其他三个),那么
max2of5(...)函数和 21*21=441 条目查找表的优化实现可能就足够了? -
你的意思是找到五个值中的最大值? [5,0,0,0,0] 和 [5,0,0,0,5] 都将最大值设为 5,但最终结果不同。计算部分并不复杂,但我试图摆脱“找到 2 个最高值”部分。还是它误解了你?
-
也许我应该对函数更清楚一点 - 我的意思是一个函数,例如
max2of5([5,0,0,0,0]) -> [5,0]和max2of5([5,0,0,0,5])-> [5,5]。换句话说,它将返回两个最大的条目,而不仅仅是一个...... -
啊,当然。我有一个相当好的。过滤器在高清分辨率视频上实时运行,所以我真的需要这个尽可能快,因此尝试转移到 LUT 解决方案,因为输入和输出定义得非常好。
标签: c data-structures lookup