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

时间:2016-03-09 13:38:31

标签: algorithm matlab image-processing computer-vision

我想计算图像的渐变I.我有两个选项

[Gx, Gy] = gradient(I);
g = sqrt(Gx.^2+Gy.^2);

[g,~] = imgradient(I, 'sobel');

我的问题是

  1. 在第一个选项中使用的渐变方法是什么?

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

  3. 全部谢谢

    这就是我试过的

    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')
    

    enter image description here

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

    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')
    

    enter image description here

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

2 个答案:

答案 0 :(得分:8)

区别在于'Sobel'运营商。索贝尔算子是一个矩阵,与图像进行卷积以计算其方向梯度。

sobel运算符定义为(来自维基百科):

enter image description here

gradient所做的只是方向差异。您可以将其解释为渐变

Gx=[ 0 0 0;                Gx=[ 0 -1 0;
    -1 0 1;         and         0  0 0;
     0 0 0]                     0  1 0];

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

答案 1 :(得分: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')

enter image description here

对于imgradient,有五种选择:

  • 'sobel'Sobel梯度算子(默认)
  • 'prewitt'Prewitt梯度算子
  • 'central'中心差异梯度:dI / dx =(I(x + 1) - I(x-1))/ 2
  • 'intermediate'中间差异梯度:dI / dx = I(x + 1) - I(x)
  • 'roberts'Roberts梯度算子

虽然文档说明:

  

针对每个列出的imgradient采用的算法方法   梯度方法首先计算方向梯度GxGy,   相对于x轴和y轴。沿着x轴定义x轴   向右的列和沿着行的y轴定义   下。然后计算梯度幅度和方向   他们的正交分量GxGy