2012-04-18 142 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]