7

在給定的應用程序中,我應用平均蒙版來輸入圖像以減少噪音,然後應用拉普拉斯面具來增強小細節。任何人都知道如果我在Matlab中顛倒這些操作的順序,我會得到相同的結果嗎?圖像處理中的平均蒙版和拉普拉斯面具

回答

7

用拉普拉斯算子進行卷積類似於使用關於強度變化的二階導數信息。由於這個導數對噪聲敏感,我們通常在應用拉普拉斯濾波器之前用高斯光滑圖像。


這裏是類似於發佈@belisarius一個MATLAB例如:

f='http://upload.wikimedia.org/wikipedia/commons/f/f4/Noise_salt_and_pepper.png'; 
I = imread(f); 

kAvg = fspecial('average',[5 5]); 
kLap = fspecial('laplacian',0.2); 

lapMask = @(I) imsubtract(I,imfilter(I,kLap)); 

subplot(131), imshow(I) 
subplot(132), imshow(imfilter(lapMask(I),kAvg)) 
subplot(133), imshow(lapMask(imfilter(I,kAvg))) 

enter image description here

+0

好,謝謝!那麼當程序被逆轉時發生了什麼? – Glove 2011-06-14 19:47:03

+0

@biz:'thron of three'解釋得很好,請參考他的回答 – Amro 2011-06-14 20:17:43

3

數字上的結果是不一樣的,但圖像看起來非常相似。

例在數學:

enter image description here

編輯

的回答爲@thron在他的關於線性濾波器和填充減刑答案評論,只考慮以下操作。

雖然高斯和拉普拉斯濾波器的換向,而不填充爲真:

list = {1, 3, 5, 7, 5, 3, 1}; 
gauss[x_] := GaussianFilter[ x, 1] 
lapl[x_] := LaplacianFilter[x, 1] 
Print[gauss[lapl[list]], lapl[gauss[list]]] 
(* 
->{5.15139,0.568439,-1.13688,-9.16589,-1.13688,0.568439,5.15139}  
    {5.15139,0.568439,-1.13688,-9.16589,-1.13688,0.568439,5.15139} 
*) 

否則具有填充相同的,導致在邊緣的差:

gauss[x_] := GaussianFilter[ x, 1, Padding -> 1] 
lapl[x_] := LaplacianFilter[x, 1, Padding -> 1] 
Print[gauss[lapl[list]], lapl[gauss[list]]] 

(* 
->{4.68233,0.568439,-1.13688,-9.16589,-1.13688,0.568439,4.68233} 
    {4.58295,0.568439,-1.13688,-9.16589,-1.13688,0.568439,4.58295} 
*) 
+0

哇非常感謝,如果不是太多問,你可以在Matlab中做一個例子嗎? – Glove 2011-06-13 13:47:03

+0

@biz對不起,我沒有Matlab可用。我相信其他成員可以發佈它。 HTH! – 2011-06-13 13:53:50

+0

感謝您的幫助 – Glove 2011-06-13 13:57:54

6

比方說你有兩個過濾器F1F2和圖像I。如果通過兩個過濾器通過你的形象,你會得到這是在哪裏在這裏我使用*表示convolution定義爲

X = ((I * F1) * F2) 

的響應。按照卷積的聯合規則,這與之相同。

X = (I * (F1 * F2)) 
使用可交換

,我們可以說,

X = (I * (F2 * F1)) = ((I * F2) * F1) 

當然,這是數學的漂亮連續域,一臺機器上做這些事情,意味着將有舍入誤差,一些數據可能迷路了。你也應該考慮一下,如果你的過濾器是FIR,否則將數字過濾作爲卷積分類的思維的整個概念開始崩潰,因爲你的過濾器不能按照你想要的方式行事。


編輯

離散卷積被定義爲

conv2 uses a straightforward formal implementation of the two-dimensional convolution equation in spatial form

所以你的數據的邊緣加零不改變在數學意義上任何東西。正如有些人指出的那樣,你會以數字方式得到不同的答案,但是每當我們處理計算實際數據時,都會有這樣的答案。這些變化應該很小並且限於卷積輸出的低能量分量(即:邊緣)。

考慮卷積運算如何工作也很重要。涉及長度爲X和長度爲Y的兩組數據將產生長度爲X+Y-1的答案。在MATLAB和Mathematica等程序中有一些幕後的魔法可以給你一個長度爲XY的答案。

因此,對於@belisarius的帖子,看起來我們確實在說同樣的事情。

+0

很好,謝謝! – Glove 2011-06-14 20:36:31

+0

應用圖像過濾器通常需要一些填充(特別爲每個過濾器設置,具體取決於圖像邊界上的值)。這打破了交換屬性。 – 2011-06-14 21:35:02

+0

@belisarius我不知道我跟隨如何填充(零或否則)會打破卷積的交換屬性。你能提供一個證明嗎? – 2011-06-14 22:06:04