您的位置:首页 > 编程语言 > MATLAB

matlab实现Sobel算子 和 LBP

2019-08-21 14:22 3419 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/GuaPiQ/article/details/99958257

2.Sobel算子
Sobel算子主要用作边缘检测,它是一离散型差分算子,用来计算图像亮度函数灰度之近似值。边缘是指其周围像素灰度急剧变化的那些像素的集合。边缘存在于目标、背景和区域之间,所以,边缘是图像分割所依赖的最重要的依据。
将Sobel算子的实现划分为五个步骤:
(1) 计算Gx与Gy与模板每行的乘积。
(2) 两个3x3矩阵的卷积即将每一行每一列对应相乘然后相加。
(3) 求得33模板运算后的Gx、Gy。
(4) 求Gx^2 + Gy^2的平方根或者直接对Gx和Gy取绝对值后求和。
(5)设置一个阈值,运算后的像素值大于该阈值输出为全1,小于该阈值输出为全0。

代码:
i=imread(‘lenna.jpg’);
i=rgb2gray(i);
subplot(131);imshow(i);title(‘原图’);
[m, n] = size(i);
d = double(i);
dSobel = i;
kSobel = i;
for i = 2 : m-1
for j = 2 : n-1
Gx = (d(i+1,j-1) + 2d(i+1,j) + d(i+1,j+1)) - (d(i-1,j-1) + 2d(i-1,j) + d(i-1,j+1));
Gy = (d(i-1,j+1) + 2d(i,j+1) + d(i+1,j+1)) - (d(i-1,j-1) + 2*d(i,j-1) + d(i+1,j-1));
dSobel(i, j) = sqrt(Gx^2 + Gy^2);
kSobel(i, j) = abs(Gx) + abs(Gy);
end
end
subplot(132);imshow(dSobel);title(‘Sobel算子(1)’);
subplot(133);imshow(kSobel);title(‘Sobel算子(2)’);

结果:

其中Sobel算子(1)是用求Gx^2 + Gy^2的平方根得到的结果,Sobel算子(2)是直接对Gx和Gy取绝对值后求和。算子(1)精度高,但是运算量大;算子(2)简单但是丢失了精度。
3.LBP算法
算法步骤:

  1. 用3*3的模板对图像每个像素进行处理,比较当前像素和周围像素的大小,将大于当前像素的置1,小于的置0。
  2. 对这周围八个像素进行编码,这八个0和1正好是可以组成一个byte数,然后按一定的规则组成这个无符号数。
  3. 把这个数赋值给当前像素。
    代码
    i = imread(‘lenna.jpg’);
    B=rgb2gray(i);
    [m,n]=size(B);
    subplot(121);imshow(B);title(‘原图’);
    X=[-1,-1,-1,0,1,1,1,0];
    Y=[-1,0,1,1,1,0,-1,-1]; %(从左上角逆时针)
    prop=[];
    LBPimage=B;
    value=0;
    for i=2:m-1
    for j=2:n-1
    for k=1:8
    x=i+X(k);
    y=j+Y(k);
    if B(i,j)>B(x,y)
    prop(k)=0;
    else
    prop(k)=1;
    end
    end
    for m=1:8
    value=value+(2^(8-m))*prop(m);
    end
    LBPimage(i,j)=value;
    value=0;
    end
    end
    subplot(122);imshow(LBPimage);title(‘LBP算法’);
    结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: