2012-04-18 144 views
1

我有一个任务来实现3x3 x-衍生图像滤波器,它使用central difference并同时在y方向执行高斯平滑。在MATLAB中实现微分滤波器

我在X方向该任务的公式(H = 1),我不知道我是否理解正确的话:

(f(x+h;y)-f(x-h;y))/2*h 

从我目前的像素相对(X),我在当前像素之前取像素值+1,并从当前像素后面位置-1上的像素中减去该值。这个值除以2,那么我或多或少的x方向的一阶导数?是不是我实际使用的当前像素值?

+3

这当前不是一个真正的编程问题,因此可能更适合http://dsp.stackexchange.com/。 – 2012-04-18 21:30:48

+0

一旦你有过滤器,matlab的conv2()是一种简单的方法将它应用到图像。 – Dan 2012-04-19 06:34:41

回答

1

传统上用于图像的中心不用于微分滤波器。推理可以发现如下。

  1. 大多数图像处理过滤器的目的是找到原始图像中的东西,并识别它们。因此,一个好的内核(*)将会集中在与更改相同的位置。
  2. 衍生物应该为零。如果你添加内核中的所有像素,它们应该加起来为零。

给出这两点,特别是第一点,显然内核应该有奇数个元素,中心应该是0.本质上,如果内核是奇数的,那么它会倾向于保持原有的优势。

隔空1个维的例子,并应用所提供的式中,修整边缘(它们强制为0)时,将导致如下:

[0 1 3 2 10 12 8 11]; 
[0 -2 -1 -7 -10 2 1 0 ]; 

注意,两个最高幅度值是正确的峰。尝试使用其他内核,包括一些没有中心值为0的内核,并查看结果。 (*)Kernel代表您正在执行的功能。在你提供的情况下,内核是[1 0 -1]