openCV中的查找表

openCV中的查找表

ref:http://blog.csdn.net/u010963435/article/details/78569714
首次见识LUT是在openCV官方文档:How to scan images, lookup tables and time measurement with OpenCV文章中通过一个图像色彩压缩的例子,对比LUT与其他三种图像遍历方法的时间耗费,表明LUT具有快速遍历图像的能力。

从数学上来看查找表是一个简单的一对一或多对一的函数,定义了如何将像素转换为新的值。从数据的组织关系上来看,查找表是一维或多维的数组,存储了不同输入值所对应的输出值。查找表在图像处理中主要用于像素的点运算,尤其是像素之间无位置相关性的操作中,如:图像色彩空间压缩图像取反图像分割直方图均衡化等仅需要考虑像素值的应用。当需要对图像应用窗口运算等与像素位置相关的操作时,就不能使用查找表。(修改自http://www.voidcn.com/article/p-dypyzpta-bgz.html)

查找表使用赋值操作取代计算操作来节省时间耗费,仅需一次遍历就能完成操作任务。

1
2
3
4
5
6
7
8
9
10
11
12
   uchar table[256];
for (int i = 0; i < 256; ++i)
table[i] = (uchar)(divideWith * (i/divideWith));
··· ···
for( i = 0; i < nRows; ++i)
{
p = Img.ptr<uchar>(i);
for ( j = 0; j < nCols; ++j)
{
p[j] = table[p[j]]; //这也应该算是一种查找表[映射]
}
}

在Matlab、Numpy中有一种使用logical/bool 类型的矩阵作为索引,进行批量操作矩阵元素的方法,也可以认为是一种查找表。

1
2
3
4
%%@ matlab code
a = magic(5);
b = ones(5);
a(a>b) = 0; %将a>b矩阵元素赋值为0

更多参考:
http://blog.csdn.net/jameshater/article/details/50759650