在MATLAB中实现派生滤波器

时间:2012-04-18 21:18:31

标签: matlab image-processing

我的任务是实现一个3x3 x衍生图像滤镜,它使用central difference并同时执行y方向的高斯平滑。

我有一个x方向的任务公式(h = 1),我不确定我是否理解正确:

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

相对于我当前的像素(x),我在当前像素之前取像素值+1,并从当前像素后面的位置-1上的像素中减去该值。这个值是否除以2然后或多或少是我在x方向上的第一顺序推导?是不是我使用的实际当前像素值?

1 个答案:

答案 0 :(得分:1)

传统上,对于图像,中心不用于微分滤波器。推理可以如下:

  1. 大多数图像处理过滤器的目的是在原始图像中查找并识别它们。因此,良好的内核(*)将在与更改相同的位置居中。
  2. 衍生物应为零。如果你添加内核中的所有像素,它们应该加起来为零。
  3. 鉴于这两点,特别是第一点,显然内核应该有奇数个元素,中心应该是0.基本上,如果内核是奇数,那么它将倾向于保留原始边缘。

    采用一维示例,并应用您提供的公式,修剪边缘(强制它们为0),结果如下:

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

    请注意,两个最高幅度值恰好在峰值处。尝试使用其他内核,包括一些没有中心值为0的内核,并查看结果。

    (*)Kernel表示您正在执行的功能。在你提供的情况下,内核是[1 0 -1]