1、颜色空间缩减
颜色空间缩减的做法是:将现有颜色空间值除以某个输入值,以获得较少的颜色数。即做减法,比如颜色值0到9可取为新值0,10到19可取为10,以此类推。
有一个简单的公式来实现颜色空间缩减:
在处理像素时,每个像素需要进行一遍上述公式计算,也需要一定的时间花销。我们可以把256中计算好的结果提前存在列表table中,这样每种情况不需计算,直接从table中取取结果即可。
int divideWith = 10;
unchar table[256];
for( int i =0; i<256; ++i)
table[i] = divideWith*(i/divideWith);
于是table[i]存放的是值为 i 的像素减小颜色空间的结果,这样就可以理解上述方法中的操作:p [j] = table[ p [j] ]
简单的颜色空间缩减算法就由以下两步组成:
- 遍历图像矩阵的每一个像素
- 对像素应用上述公式
2、LUT函数:Look up table操作
Look up table操作使用operationsOnArrays:LUT()<lut>函数,用于批量进行图像元素查找、扫描与操作图像。使用方法如下:
//首先建立一个mat型用于查表
Mat lookUpTable(1, 256, CV_8U);
uchar* p = lookUpTable.data;
for(int i = 0; i < 256; ++i)
p[i] = table[i];
//调用函数(I是输入,J是输出)
for (int i = 0; i < times; ++i)
LUT(I, lookUpTable, J);