2014-11-02 134 views
1

我想生成可以在圖像上應用高斯濾波器,但是我想申請這兩次1D:水平和垂直。另外,我想分別將它應用於每架飛機。1D高斯濾波器水平和垂直

意味着我要設計出一維高斯濾波器在紅,綠,藍組件水平應用它,那麼我有同樣的1D高斯濾波器在紅,綠,藍組件垂直應用它。

而且我覺得這種操作應該等於原來的彩色圖像應用二維高斯濾波器。

我在Matlab和圖像處理過濾器是新的。

+0

paisanco我看到這篇文章......它不幫助我......因爲我想在matlab中使用fspecial,imfilter,conv函數 – Seereen2004 2014-11-02 01:45:00

+0

不夠公平,但如果你有圖像處理工具箱,我不確定是什麼問題是,這些函數的Matlab文檔中是否包含某些方面? – paisanco 2014-11-02 01:55:38

+0

我不熟悉Matlab的圖像處理工具箱......還我仍然在這些過濾器新的....我的問題是我怎麼能應用水平高斯濾波器的圖像中,例如(1D不是2D) – Seereen2004 2014-11-02 01:58:19

回答

5

與2D高斯卷積可以用兩個一維高斯被執行爲:

G(x,y)*I=G(x)*(G(y)*I); 

可以在MATLAB做法如下:

img=im2double(imread('cameraman.tif')); 

yourFilterSize=[3 5] %3 rows, 5 columns, can be anything 

%two 1D Gaussians 
g_x=fspecial('gaussian',[1 yourFilterSize(2)]); 
g_y=fspecial('gaussian',[yourFilterSize(1) 1]); 

%applying 1D gaussian in X-direction to the original image 
img_X=imfilter(img,g_x); 

%applying 1D gaussian in Y-direction to img_X 
img_XY=imfilter(img_X,g_y); %DONE 

%verifying that the result is correct 
g_xy=fspecial('gaussian',yourFilterSize); 
img_XY2D=imfilter(img,g_xy); 
max(max(abs(img_XY-img_XY2D))) %this should be very small, 
           %of the order of machine precision 
           %for the result to be correct 

補充閱讀:

  1. This在Stackoverflow.com上的答案,它告訴你如何確定給定的內核是否可分離。例如,高斯是可分離的,而磁盤內核則不是。
  2. Original article上面提到的問題。

    假設你有大小MxN的圖像和大小PxQ的過濾器:


爲什麼你會喜歡兩個一維卷積,而不是一個二維卷積(在上述鏈接2還給出)那麼對於2D卷積,則需要乘以和增加~ M*P*N*Q。對於兩個1D濾波器(大小爲PQ),您只需要操作~ MNP+MNQ = MN(P+Q)。因此,您可以獲得PQ/(P+Q)的訂單加速。

+0

感謝Parag S. Chandakkar爲您提供幫助...我有問題,您爲什麼選擇[3 3]? ....如何確定這裏的大小? – Seereen2004 2014-11-02 02:28:40

+0

這只是一個例子。請檢查更新後的答案。如果您發現答案有幫助,請點擊左側的複選標記以接受答案。 – 2014-11-02 02:37:50