Image processing 基于高斯函数的图像导数

Image processing 基于高斯函数的图像导数,image-processing,signal-processing,Image Processing,Signal Processing,这是我用来计算图像导数的函数。请帮助我理解这个代码,因为我是这个领域的新手。如果有人能给我一些链接来理解这个概念,我将非常感谢。我有些怀疑- 我们为什么在这里使用ndgrid? 这里的“x”、“y”、“xx”、“xy”、“yx”和“yy”是什么方向? 为什么高斯公式会随着方向而改变? 为什么我们最终要使用imfilter function D =calc_image_derivatives(I,sigma,direction) [x,y]=ndgrid(floor(-3*sigma):c

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

我们为什么在这里使用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');

此代码计算图像的各种方向导数-x/y是一阶方向导数,xx/yy/xy是二阶导数。用于推导的数字滤波器是标准变化西格玛的二维高斯滤波器,通过适当的偏导数推导(例如,在“xx”的情况下,高斯由x推导两次)。从你的问题来看,我不确定你是否熟悉偏导数的概念,你可以用谷歌搜索一下。 ndgrid用于创建网格矩阵-这是Matlab中非常常用的方法。也许您知道函数meshgrid,它是相同的,只有ndgrid也可以创建更高维度的网格矩阵

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