我想生成可以在圖像上應用高斯濾波器,但是我想申請這兩次1D:水平和垂直。另外,我想分別將它應用於每架飛機。1D高斯濾波器水平和垂直
意味着我要設計出一維高斯濾波器在紅,綠,藍組件水平應用它,那麼我有同樣的1D高斯濾波器在紅,綠,藍組件垂直應用它。
而且我覺得這種操作應該等於原來的彩色圖像應用二維高斯濾波器。
我在Matlab和圖像處理過濾器是新的。
我想生成可以在圖像上應用高斯濾波器,但是我想申請這兩次1D:水平和垂直。另外,我想分別將它應用於每架飛機。1D高斯濾波器水平和垂直
意味着我要設計出一維高斯濾波器在紅,綠,藍組件水平應用它,那麼我有同樣的1D高斯濾波器在紅,綠,藍組件垂直應用它。
而且我覺得這種操作應該等於原來的彩色圖像應用二維高斯濾波器。
我在Matlab和圖像處理過濾器是新的。
與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
補充閱讀:
假設你有大小MxN
的圖像和大小PxQ
的過濾器:
爲什麼你會喜歡兩個一維卷積,而不是一個二維卷積(在上述鏈接2還給出)那麼對於2D卷積,則需要乘以和增加~ M*P*N*Q
。對於兩個1D濾波器(大小爲P
和Q
),您只需要操作~ MNP+MNQ = MN(P+Q)
。因此,您可以獲得PQ/(P+Q)
的訂單加速。
感謝Parag S. Chandakkar爲您提供幫助...我有問題,您爲什麼選擇[3 3]? ....如何確定這裏的大小? – Seereen2004 2014-11-02 02:28:40
這只是一個例子。請檢查更新後的答案。如果您發現答案有幫助,請點擊左側的複選標記以接受答案。 – 2014-11-02 02:37:50
paisanco我看到這篇文章......它不幫助我......因爲我想在matlab中使用fspecial,imfilter,conv函數 – Seereen2004 2014-11-02 01:45:00
不夠公平,但如果你有圖像處理工具箱,我不確定是什麼問題是,這些函數的Matlab文檔中是否包含某些方面? – paisanco 2014-11-02 01:55:38
我不熟悉Matlab的圖像處理工具箱......還我仍然在這些過濾器新的....我的問題是我怎麼能應用水平高斯濾波器的圖像中,例如(1D不是2D) – Seereen2004 2014-11-02 01:58:19