参考资料:
http://www.cnblogs.com/sdxk/p/4056223.html
http://www.cnblogs.com/mikewolf2002/p/3438698.html
基本原理:
LBP的基本思想是以图像中某个像素为中心,对相邻像素进行阈值比较。如果中心像素的亮度大于等于它的相邻像素,把相邻像素标记为1,否则标记为0。我们可以用二进制数字来表示LBP图中的每个像素的LBP编码,比如下图中的中心像素,它的LBP编码为:00010011,其十进制值为19。
用公式表示即是:
其中(xc,yc)是中心像素,ic是灰度值,in是相邻像素的灰度值,s是一个符号函数:
在OpenCV的LBP算法中,使用圆形的LBP算子:
其中R是半径,p是样本点的个数。
如果就算的结果不在像素坐标上,我们则使用双线性插值进行近似处理。
双线性插值:
假设一个图像的大小是485x647,放大分别放大1.3倍和1.7倍,即485x1.3=630.5,647x1.7=1099.9,根据四舍五入的原则确定放大后的图像为631x1100,接下来就是计算放大后图像各个位置的像素值,例如计算放大后图像位于(136,345)位置的像素值,则136/1.3=104.615,345/1.7=202.941,这里由于示例的原因取小数点后三位,则原图像中相邻的四个位置分别是(104,202),(104,203),(105,202),(105,203)这四个点,
如图我画出了这个点对应的周围的四个点,203.941-203=0.941
所以f(R1)=(1-0.941)xf(104,203)+0.941xf(104,204),
f(R2)=(1-0.941)xf(105,203)+0.941xf(105,204),
104.615-104=0.615
所以f(P)=(1-0.615)xf(R1)+0.615xf(R2),
其中f表示的那一点的像素值,这样就计算出了f(P),实际上就是放大后图像(136,345)处对应的像素值。