2014-02-28 25 views
0

我有一個尺寸爲5 * 5的窗口。尺寸爲360 * 300的圖像。當我使用該函數對兩者進行卷積時,我正在使用matlab。當卷積圖像和窗口時,Conv2函數值高於255?

conv2(image,window,'same'); 

的像素的值變得高於255.I使用下面的代碼來限制下面255

(conv2(image,window,'same')/sum(sum(window)); 

I的值具有下面列出3個問題。

  1. 是否繼續?
  2. 函數是否也處理這個約束?
  3. 任何替代方法?
+0

或者你可以確保窗口的總和等於1。也btw總和(總和(窗口))'可以寫成總和(窗口(:))' – Dan

+0

@丹如果我的窗戶總和等於一我如何限制值小於255? – kadu

+0

如果'window'中所有元素的和小於'1',那麼卷積的結果永遠不會大於我假設的圖像的最大值爲'255'。所以這對你有限制。這與你正在做的事情基本相同。 – Dan

回答

1

要指定什麼在評論中說: 你的窗口

ws = sum(window(:)) 

的總金額是一樣的放大。如果ws>1,那麼你的圖像會變得更亮。如果0 < ws < 1您的圖像會變暗。如果ws = 0,那麼你會收到一個圖像,平均約爲零。在邊緣檢測場景中通常是這種情況。例如,Sobel Operator總和爲零。

卷積通常以等於1的放大率執行,以將放大與卷積分開。由於卷積是一個線性算子,所以將窗口除以ws或生成的圖像無關緊要。

特別回答問題1和3:通常的方法是使窗口標準化。那就是:

window = window ./ sum(window(:)); % Normalize convolution kernel 
conv2(image,window,'same');