【问题标题】:image derivatives using gaussian使用高斯的图像导数
【发布时间】:2023-04-10 07:31:01
【问题描述】:

这是我用于计算图像导数的函数。请帮助我理解这段代码,因为我是这个领域的新手。如果有人能给我一些链接来理解这个概念,我会很感激的。我有一些疑问-

为什么我们在这里使用 ndgrid? 'x', 'y', 'xx', ('xy', 'yx'), 'yy' 这里的方向是什么? 以及这个高斯的公式如何以及为什么会根据方向变化? 为什么最后要使用 imfilter?

function D =calc_image_derivatives(I,sigma,direction)    
[x,y]=ndgrid(floor(-3*sigma):ceil(3*sigma),floor(-3*sigma):ceil(3*sigma));
switch(direction)
case 'x'
  DGauss=-(x./(2*pi*sigma^4)).*exp(-(x.^2+y.^2)/(2*sigma^2));
 case 'y'
  DGauss=-(y./(2*pi*sigma^4)).*exp(-(x.^2+y.^2)/(2*sigma^2));
 case 'xx'
  DGauss = 1/(2*pi*sigma^4) * (x.^2/sigma^2 - 1) .* exp(-(x.^2 + y.^2)/(2*sigma^2));
 case {'xy','yx'}
  DGauss = 1/(2*pi*sigma^6) * (x .* y)           .* exp(-(x.^2 + y.^2)/(2*sigma^2));
 case 'yy'
  DGauss = 1/(2*pi*sigma^4) * (y.^2/sigma^2 - 1) .* exp(-(x.^2 + y.^2)/(2*sigma^2));
 end
 D = imfilter(I,DGauss,'conv','replicate');

【问题讨论】:

    标签: image-processing signal-processing


    【解决方案1】:

    此代码计算图像的各种方向导数 - x/y 是一阶导数,xx/yy/xy 是二阶导数。用于推导的数字滤波器是标准变分 sigma 的 2D 高斯,由适当的偏导数推导(例如,在“xx”的情况下,高斯由 x 推导两次)。根据您的问题,我不确定您是否熟悉偏导数的概念,您可以谷歌一下。 ndgrid 用于创建网格矩阵 - 这是 Matlab 中非常常用的方法。或许你知道meshgrid这个功能,也是一样,只有ndgrid还可以创建更高维度的网格矩阵。

    imfilter 用于在数字滤波器与图像之间执行卷积(更准确地说是相关性)。其结果是对所需导数的估计。

    【讨论】:

      猜你喜欢
      • 2016-05-02
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多