圆形LBP特征-matlab
程序员文章站
2022-05-22 14:09:57
...
由于原始LBP特征使用的是固定邻域内的灰度值,因此当图像的尺度发生变化时,LBP特征的编码将会发生错误,LBP特征将不能正确的反映像素点周围的纹理信息,因此研究人员对其进行了改进[3]。基本的 LBP 算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala 等对 LBP 算子进行了改进,将 3×3 邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子:
matlab源码
function imglbp = getCircularLBPFeature(img, radius, neighbors)
imgSize = size(img);
if numel(imgSize) > 2
imgG = rgb2gray(img);
else
imgG = img;
end
[rows, cols] = size(imgG);
rows=int16(rows);
cols=int16(cols);
imglbp = uint8(zeros(rows-2*radius, cols-2*radius));
for k=0:neighbors-1
% 计算采样点对于中心点坐标的偏移量rx,ry
rx = radius * cos(2.0 * pi * k / neighbors);
ry = -radius * sin(2.0 * pi * k / neighbors);
% 对采样点偏移量分别进行上下取整
x1 = floor(rx);
x2 = ceil(rx);
y1 = floor(ry);
y2 = ceil(ry);
% 将坐标偏移量映射到0-1之间
tx = rx - x1;
ty = ry - y1;
% 根据0-1之间的x,y的权重计算公式计算权重,权重与坐标具体位置无关,与坐标间的差值有关
w1 = (1-tx) * (1-ty);
w2 = tx * (1-ty);
w3 = (1-tx) * ty;
w4 = tx * ty;
for i=radius+1:rows-radius
for j=radius+1:cols-radius
center = imgG(i, j);
% 根据双线性插值公式计算第k个采样点的灰度值
neighbor = imgG(i+x1, j+y1)*w1 + imgG(i+x1, j+y2)*w2 + imgG(i+x2, j+y1)*w3 + imgG(i+x2, j+y2)*w4;
% LBP特征图像的每个邻居的LBP值累加,累加通过与操作完成,对应的LBP值通过移位取得
if neighbor > center
flag = 1;
else
flag = 0;
end
imglbp(i-radius, j-radius) = bitor(imglbp(i-radius, j-radius), bitshift(flag, neighbors-k-1));
end
end
end
end
效果图
原图
radius=3,neighbors=8
radius=2,neighbors=8
radius=1,neighbors=8
radius=2,neighbors=4
上一篇: 数据库表的设计
推荐阅读
-
matlab怎么绘制云图?MATLAB在矩形、圆形区域绘制云图的方法介绍
-
Eigen 求解矩阵特征值特征向量(matlab [B,D] = eig(C))
-
hog特征原理详解及matlab代码学习笔记
-
Task02 LBP特征描述算子-人脸检测
-
【数字图像处理6】python+opencv使用LBP、HOG提取特征来分类人脸、人身
-
matlab怎么绘制云图?MATLAB在矩形、圆形区域绘制云图的方法介绍
-
matlab做SVM分类 ,数据样本为csv文件(被试的时间序列),提取相关矩阵作为特征并用SVM进行二分类
-
频域特征值提取的MATLAB代码实现(频谱、功率谱、倒频谱)
-
matlab——识别图像中的圆形目标
-
matlab绘制散点图——指定散点落于一个圆形区域内