渐变和渐变之间有什么区别?

Jam*_*ame 5 algorithm matlab image-processing computer-vision

我想计算图像的渐变I.我有两种选择

[Gx, Gy] = gradient(I);
g = sqrt(Gx.^2+Gy.^2);
Run Code Online (Sandbox Code Playgroud)

[g,~] = imgradient(I, 'sobel');
Run Code Online (Sandbox Code Playgroud)

我的问题是

  1. 在第一个选项中使用的梯度法是什么?

  2. 使用sobel方法找到梯度的原因是什么?

谢谢大家

这是我试过的

I=zeros([128 128]);
I(50:100,50:100)=100;
[Gx, Gy] = gradient(I);
g1 = sqrt(Gx.^2+Gy.^2);
[g2,~] = imgradient(I, 'sobel');
subplot(121);imshow(g1,[]);title('First option')
subplot(122);imshow(g2,[]);title('Second option')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

当图像添加噪声时,不同的将更清晰

I=zeros([128 128]);
I(50:100,50:100)=100;
%% Add noise image;
noiseStd=5;
I_noise = I + (noiseStd * randn([128, 128]));
[Gx, Gy] = gradient(I_noise);
g1 = sqrt(Gx.^2+Gy.^2);
[g2,~] = imgradient(I_noise, 'sobel');
subplot(121);imshow(g1,[]);title('First option')
subplot(122);imshow(g2,[]);title('Second option')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

作为可视化,第二个选项提供了更多的亮度值

And*_*uri 8

不同之处在于"Sobel"运营商.索贝尔算子是一个矩阵,与图像进行卷积以计算其方向梯度.

索贝尔算子被定义为(来自维基百科):

在此输入图像描述

什么gradient只是方向差异.您可以将其解释为渐变

Gx=[ 0 0 0;                Gx=[ 0 -1 0;
    -1 0 1;         and         0  0 0;
     0 0 0]                     0  1 0];
Run Code Online (Sandbox Code Playgroud)

这种差异是因为当一个人有图像时,就知道它是一个连续域的离散化.Sobel算子有助于考虑在给定像素周围发生的事情.


the*_*alk 8

gradient专门使用中心差异,imgradient为您提供选择,例如'central',或默认'sobel'.使用第一个选项imgradient看起来与gradient:

I=zeros([128 128]);
I(50:100,50:100)=100;
%% Add noise image;
noiseStd=5;
I_noise = I + (noiseStd * randn([128, 128]));
[Gx, Gy] = gradient(I_noise);
g1 = sqrt(Gx.^2+Gy.^2);
[g2,~] = imgradient(I_noise, 'sobel');
[g3,~] = imgradient(I_noise, 'central');
subplot(131);imshow(g1,[]);title('gradient')
subplot(132);imshow(g2,[]);title('imgradient sobel')
subplot(133);imshow(g3,[]);title('imgradient central')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


对于imgradient有五个选项:

  • 'sobel'索贝尔梯度算子(默认)
  • 'prewitt'Prewitt梯度算子
  • '中心'中心差异梯度:dI/dx =(I(x + 1) - I(x-1))/ 2
  • '中间'中间差异梯度:dI/dx = I(x + 1) - I(x)
  • '罗伯茨'罗伯茨梯度算子

虽然文档说明:

imgradient针对每个列出的梯度方法采用的算法方法是首先计算方向梯度,Gx并且Gy相对于x轴和y轴.沿着向右的列定义x轴,沿着向下的行定义y轴.梯度大小和方向,然后从它们的正交分量计算GxGy.