PTAMM阅读笔记之查找表的使用(四)

本文介绍了查找表(LUTs)在优化计算开销大的函数中的应用,通过预计算常见输入的结果并进行快速查找,以提升程序效率。讨论了一维查找表在处理如8位灰度图像颜色操作中的例子,展示如何利用查找表加速图像处理过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查找表的基础知识:

函数的计算开销很大,但是把计算结果缓存起来的开销比较小时,用查找表(简称LUTs)优化这种函数的计算是一种非常好的方法。通过预先把一些常见输入的对应结果计算出来,花费不多的查找操作就能代替开销较大的运行时计算。如果查找比从头开始计算结果(或者有不断重复的相同输入)要快,那么使用查找表就能提高程序性能。由于数据请求会落在表的样本区间中,插值算法能够通过对数值附近样本取平均值产生可以接受的近似值。

一维查找表:

查找表是以其维数来定义,即把一个输出值编入索引时所必要的索引数目。最简单的查找表是以一个变量来编制和访问的,也就是1D查找表。

考虑一种对颜色的操作f(x),作用于8位的灰度图像。一种做法就是遍历图像的所有像素,为每一个像素都计算一次f(x)的值。然而,无论这个函数有多复杂,它的计算记过都只会是255种中的一种(相应于每一种不同的输入)。因此,一种替代的方法就是列出这个运算对应于每一种输入的结果,在运行时通过查找这几个表来对像素进行变换计算。假设查找整数表是高效的,同时光栅图像的像素数目多余255个,那么使用查找表会加快速度。

PTAMM之查找表:

      unsigned int v=0;
      lev.vCornerRowLUT.clear();
      for(int y=0; y<lev.im.size().y; y++)
	{
	  while( (v < lev.vCorners.size()) && (y > lev.vCorners[v].y) )
	    v++;
	  lev.vCornerRowLUT.push_back(v);
	}
上述代码实现了将角点坐标存入1D按列查找表中。首先,角点的个数是不确定的,但是im.size是有限的,因此将角点按列存储,方便后续计算中进行查询,即每一个纵坐标对应一个角点。这里查找表中存入的是角点的索引值。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值