【数字图像处理笔记】Matlab实现微分法图像锐化 罗伯特(Roberts)-索贝尔(Sobel)-普瑞维特(Prewitt)-拉普拉斯(Laplace)算子 (四)

请添加图片描述

  • 💌 所属专栏:【数字图像处理笔记】

  • 😀 作  者:我是夜阑的狗🐶

  • 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询!

  • 💖 欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!🤩 🤩 🤩

请添加图片描述


前言

  大家好,又见面了,我是夜阑的狗🐶,本文是专栏【数字图像处理笔记】专栏的第4篇文章;
  这是今天学习到数字图像处理笔记 – Matlab实现微分法图像锐化 罗伯特(Roberts)-索贝尔(Sobel)-普瑞维特(Prewitt)-拉普拉斯(Laplace)算子 💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。
  专栏地址:【数字图像处理笔记】 , 此专栏是我是夜阑的狗对数字图像处理学习过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。
  如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。

一、原理

  在图像锐化中,最常用的微分法采用梯度的概念来实现。设有一幅图像 f ( x , y ) f(x,y) fxy,它的梯度采用数学概念描述,是一个向量,定义为

G [ f ( x , y ) ] = [ ∂ f ∂ x ∂ f ∂ y ] T G[f(x,y)]=\begin{bmatrix} \frac {\partial f} {\partial x} \frac {\partial f} {\partial y} \end{bmatrix}^T G[f(x,y)]=[xfyf]T

  该梯度向量的模为
∣ G [ f ( x , y ) ] ∣ = [ ( ∂ f ∂ x ) 2 + ( ∂ f ∂ y ) 2 ] 1 / 2 (4-1) \tag{4-1}\begin{vmatrix}G[f(x,y)]\end{vmatrix}=\begin{bmatrix} \bigg( \frac {\partial f} {\partial x}\bigg)^2 + \bigg( \frac {\partial f} {\partial y}\bigg)^2 \end{bmatrix}^{1/2} G[f(x,y)] =[(xf)2+(yf)2]1/2(4-1)

  数字图像处理中,把 ( 4 − 36 ) ) (4-36)) (436))式所表示的值, ∣ G [ f ( x , y ) ] ∣ \begin{vmatrix}G[f(x,y)]\end{vmatrix} G[f(x,y)] 称为图像 f ( x , y ) f(x,y) f(xy)的梯度,它是 x x x y y y的函数,因而实际上是图像 f ( x , y ) f(x,y) f(xy)的梯度图像。
  对于数字图像 f ( x , y ) f(x,y) f(xy)来讲,微分∂f/∂x∂f/∂y 只能用差分来近似。 ( 4 - 1 ) (4-1) (41)式按差分运算近似以后的梯度表达式为

∣ G [ f ( x , y ) ] ∣ = { [ f ( x + y ) − f ( x + 1 , y ) ] 2 + [ f ( x , y ) − f ( x , y + 1 ) 2 ] } 1 / 2 (4-2) \tag{4-2} \begin{vmatrix}G[f(x,y)]\end{vmatrix}= \{[f(x+y)-f(x+1,y)]^2+[f(x,y)-f(x,y+1)^2] \}^{1/2} G[f(x,y)] ={[f(x+y)f(x+1,y)]2+[f(x,y)f(x,y+1)2]}1/2(4-2)

  另一种常用的梯度称为 Roberts 梯度,定义为

∣ G [ f ( x , y ) ] ∣ = { [ f ( x + y ) − f ( x + 1 , y + 1 ) ] 2 + [ f ( x + 1 , y ) − f ( x , y + 1 ) 2 ] } 1 / 2 (4-3) \tag{4-3} \begin{vmatrix}G[f(x,y)]\end{vmatrix}= \{[f(x+y)-f(x+1,y+1)]^2+[f(x+1,y)-f(x,y+1)^2] \}^{1/2} G[f(x,y)] ={[f(x+y)f(x+1,y+1)]2+[f(x+1,y)f(x,y+1)2]}1/2(4-3)

  利用 ( 4 — 37 ) (4—37) (4—37) ( 4 - 38 ) (4-38) (438)式计算梯度时,计算量较大,为节省计算机计算时间,在计算精度允许的情况,可采用绝对差算法。对应 ( 4 — 37 ) (4—37) (4—37)式和 ( 4 — 38 ) (4—38) (4—38)式的绝对差算法为

∣ G [ f ( x , y ) ] ∣ = ∣ f ( x , y ) − f ( x + 1 , y ) ∣ + ∣ f ( x , y ) − f ( x , y + 1 ) ∣ (4-4) \tag{4-4} \begin{vmatrix}G[f(x,y)]\end{vmatrix}= \begin{vmatrix}f(x,y) - f(x+1,y)\end{vmatrix} + \begin{vmatrix} f(x,y)-f(x,y+1)\end{vmatrix} G[f(x,y)] = f(x,y)f(x+1,y) + f(x,y)f(x,y+1) (4-4)

∣ G [ f ( x , y ) ] ∣ = ∣ f ( x , y ) − f ( x + 1 , y + 1 ) ∣ + ∣ f ( x + 1 , y ) − f ( x , y + 1 ) ∣ (4-4) \tag{4-4} \begin{vmatrix}G[f(x,y)]\end{vmatrix}= \begin{vmatrix}f(x,y) - f(x+1,y+1)\end{vmatrix} + \begin{vmatrix} f(x+1,y)-f(x,y+1)\end{vmatrix} G[f(x,y)] = f(x,y)f(x+1,y+1) + f(x+1,y)f(x,y+1) (4-4)

二、实现过程

1、罗伯特算子(Roberts)

  代码:

%不同算子边缘检测具体函数实现:
%罗伯特算子
function [edge]= RobertsOperator(pic)
    edge = zeros(size(pic));
    h = size(pic, 1);   %获取图像的高
    w = size(pic, 2);   %获取图像的宽
    for i = 1 : h - 1
        for j = 1 : w - 1
            edge(i, j) =abs(pic(i, j) - pic(i + 1, j + 1)) + abs(pic(i, j + 1) - pic(i + 1, j));
        end
    end
end

  罗伯特算子函数核心源码分析:

function [edge]= RobertsOperator(pic)
    edge = zeros(size(pic));%初始化边缘矩阵
    h = size(pic, 1); %图片行数
    w = size(pic, 2);%图片列数
	%利用局部差分计算梯度算子,即对角方向相邻两像素值之差。
    for i = 1 : h - 1
        for j = 1 : w - 1
            edge(i, j) =abs(pic(i, j) - pic(i + 1, j + 1)) + abs(pic(i, j + 1) - pic(i + 1, j));
        end
    end
end

2、索贝尔算子(Sobel)

  代码:

%索贝尔算子 
function [edge] = SobelOperator(pic)
    edge = zeros(size(pic));
    h = size(pic, 1);   %获取图像的高
    w = size(pic, 2);   %获取图像的宽
    gx = [-1, -2, -1; 0, 0, 0; 1, 2, 1]; %索贝尔模板
    gy = gx';
    for i = 2 : h - 1
        for j = 2 : w - 1
            sub = double(pic(i - 1 : i + 1, j - 1 : j + 1));
            g1 = abs(sum(sum(sub .* gx)));
            g2 = abs(sum(sum(sub .* gy)));
            if g1 > g2
                edge(i, j) = g1;
            else
                edge(i, j) = g2;
            end
        end
    end
end

3、普瑞维特算子(Prewitt)

  代码:

function [edge] = PrewittOperator(pic)
    edge = zeros(size(pic));
    h = size(pic, 1);   %获取图像的高
    w = size(pic, 2);   %获取图像的宽
    gx = [-1, -1, -1; 0, 0, 0; 1, 1, 1]; %普瑞维特模板
    gy = gx';
    for i = 2 : h - 1
        for j = 2 : w - 1
            sub = double(pic(i - 1 : i + 1, j - 1 : j + 1));
            g1 = abs(sum(sum(sub .* gx)));
            g2 = abs(sum(sum(sub .* gy)));
            if g1 > g2
                edge(i, j) = g1;
            else
                edge(i, j) = g2;
            end
        end
    end
end

4、拉普拉斯算子(Laplace)

  代码:

function [edge] = LaplaceOperator(pic)
    edge =zeros(size(pic));
    h = size(pic, 1);   %获取图像的高
    w = size(pic, 2);   %获取图像的宽
    l = [0, 1, 0; 1, -4, 1; 0, 1, 0];  %拉普拉斯模板
    for i = 2 : h - 1
        for j = 2 : w - 1
            sub = double(pic(i - 1 : i + 1, j - 1 : j + 1));
            d = sum(sum(sub .*l));
            edge(i, j) =d;
        end
    end
end

  拉普拉斯算子函数核心源码分析:

function [edge] = LaplaceOperator(pic)
  edge =zeros(size(pic)); %初始化边缘矩阵
  h = size(pic, 1); %图片行数
  w = size(pic, 2); %图片列数
    l = [0, 1, 0; 1, -4, 1; 0, 1, 0];% 拉普拉斯算子模板矩阵
    for i = 2 : h - 1
        for j = 2 : w - 1
            sub = double(pic(i - 1 : i + 1, j - 1 : j + 1));
            d = sum(sum(sub .*l));%卷积求和运算
            edge(i, j) =d;%更新边缘矩阵
        end
    end
end

  运行结果如下图所示:

在这里插入图片描述

  从图中可以看出,不同的梯度算子对原图像进行边缘提取的效果不同。其中,

  • 罗伯特算子:采用的是对角方向相邻像素值之差,定位比较精准。
  • 索贝尔算子:对灰度渐变和噪声较多的图像处理效果较好,采用的是加权平均再进行微分运算的方法。
  • 普瑞维特算子:利用局部差分平均方法寻找边缘,效果和索贝尔算子接近。
  • 拉普拉斯算子:一种二阶导数算子,对噪声更敏感,能对任何走向的界线和线条进行锐化,无方向性。

  因此一般用于判断边缘像素相对图像的明暗程度,不直接用于边缘检测。


总结

  感谢观看,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

在这里插入图片描述

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。🎉

更多专栏订阅:



订阅更多,你们将会看到更多的优质内容!!

  • 58
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是夜阑的狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值