Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导数滤波器的MATLAB实现_Matlab_Image Processing - Fatal编程技术网

导数滤波器的MATLAB实现

导数滤波器的MATLAB实现,matlab,image-processing,Matlab,Image Processing,我的任务是实现一个3x3 x导数图像滤波器,它利用并同时执行y方向的高斯平滑 我有一个x方向(h=1)的任务公式,我不确定我是否理解正确: (f(x+h;y)-f(x-h;y)) / 2*h 相对于当前像素(x),我在当前像素前面取像素值+1,然后从当前像素后面-1位置的像素减去该值。这个值是否除以2,然后在x方向上或多或少地得到我的一阶导数?我的实际当前像素值根本没有使用吗?传统上,对于图像,中心不用于衍生过滤器。理由如下 大多数图像处理过滤器的目的是在原始图像中找到东西,并识别它们。因此,

我的任务是实现一个3x3 x导数图像滤波器,它利用并同时执行y方向的高斯平滑

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

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

相对于当前像素(x),我在当前像素前面取像素值+1,然后从当前像素后面-1位置的像素减去该值。这个值是否除以2,然后在x方向上或多或少地得到我的一阶导数?我的实际当前像素值根本没有使用吗?

传统上,对于图像,中心不用于衍生过滤器。理由如下

  • 大多数图像处理过滤器的目的是在原始图像中找到东西,并识别它们。因此,一个好的内核(*)将与更改集中在同一位置
  • 导数的平均值应为零。如果将内核中的所有像素相加,它们的总和应为零
  • 考虑到这两点,特别是第一点,很明显内核应该有奇数个元素,中心应该是0。本质上,如果内核是奇数的,那么它将倾向于保留原始边

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

    [0  1  3  2  10  12 8 11];
    [0 -2 -1 -7 -10   2 1 0 ];
    
    请注意,两个最高的幅值正好位于峰值处。尝试使用其他内核,包括一些中心值不为0的内核,然后查看结果


    (*)内核表示您正在执行的函数。在您提供的示例中,内核是[10-1]

    传统上,中心不用于衍生过滤器。理由如下

  • 大多数图像处理过滤器的目的是在原始图像中找到东西,并识别它们。因此,一个好的内核(*)将与更改集中在同一位置
  • 导数的平均值应为零。如果将内核中的所有像素相加,它们的总和应为零
  • 考虑到这两点,特别是第一点,很明显内核应该有奇数个元素,中心应该是0。本质上,如果内核是奇数的,那么它将倾向于保留原始边

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

    [0  1  3  2  10  12 8 11];
    [0 -2 -1 -7 -10   2 1 0 ];
    
    请注意,两个最高的幅值正好位于峰值处。尝试使用其他内核,包括一些中心值不为0的内核,然后查看结果


    (*)内核表示您正在执行的函数。在您提供的例子中,内核是[10-1]

    这目前不是一个真正的编程问题,因此可能更适合。一旦您有了过滤器,matlab的conv2()是一种将其应用于图像的简单方法。这目前不是一个真正的编程问题,因此可能更适合。一旦您有了过滤器,matlab的conv2()是将其应用于图像的简单方法。