生成纹理算法
㈠ LBP算法以及实现
LBP算法,全称Local Binary Pattern,是一种能够描述图像纹理的算法,具有旋转不变性和灰度不变性等优点。本文将介绍最基本的LBP算法及其扩展。
最基本的LBP算法与处理图像的其他算法相似,通过定义一个基本算子,将该算子作用在整张图像上,通过滑动窗口提取图像的纹理。原始的LBP算子定义为3*3的窗口,将中心像素值作为阈值,邻域像素与阈值比较,若大于等于阈值则标记为1,否则标记为0。算法规定,从左上角起始,顺时针旋转与阈值比较,得到8位二进制数,将该数转化为十进制,与8位图像灰度值对应,保存为窗口中心点的像素值。遍历整张图像后,得到新纹理图。
算法示意图展示原始图像窗口内所有点像素值,取中心点作为阈值(如图所示),进行比较得到二进制数,转化为十进制保存。最后得到的纹理图如图所示,左图为原始图像,右图为纹理图。
需注意,LBP仅适用于灰度图。
改进算法:圆形LBP算法解决了窗口半径固定的问题,提供任意大小邻域,将正方形扩展为圆形,允许任意数量等间隔采样点。各种算子如图所示,左为半径1、采样点4的LBP算子,记作[公式];右为半径2、采样点8的LBP算子,记作[公式]。算子的半径和采样点可任意设定。采样点计算公式如下,[公式]为第p个采样点坐标,中心坐标为[公式],p为采样点编号,P为采样点总数,R为邻域半径。在使用圆形LBP时,需使用双线性插值法处理非整数坐标点。代码实现如下。
改进算法得到不同半径和采样点的纹理图,从上到下分别为半径1、2、3的算子,从左到右为采样点数8、16的算子。
LBP算法的旋转不变性意味着,使用LBP算子时,通过使每个采样点作为起始点顺时针计算,得到8个二进制数,转化为十进制取最小值,无论图片旋转,得到的LBP值保持不变。但需注意,LBP算法只具有旋转不变性,当图片进行镜像翻转时,得到的LBP值会发生变化。