我试图生成可应用于图像的高斯滤镜,但我想将其一维应用两次:水平和垂直。另外,我想将其分别应用于每个平面。
这意味着我要设计一维高斯滤光片以将其水平应用到红色,绿色,蓝色分量中,然后使用相同的一维高斯滤光片以将其垂直应用到红色,绿色和蓝色分量中。
而且我认为该操作应等同于在原始彩色图像上应用2D高斯滤波器。
我是Matlab和图像处理过滤器的新手。
可以使用两个1D高斯进行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
补充阅读:
为什么您更喜欢两个1D卷积而不是一个2D卷积(也在上面提到的链接2中给出):
假设您有一个MxN
尺寸PxQ
为1的图像和一个尺寸为2的卷积,然后进行2D卷积,则需要~ M*P*N*Q
乘法和加法。对于两个1D过滤器(大小P
和Q
),您只需要进行~ MNP+MNQ = MN(P+Q)
操作。因此,您的加速比为PQ/(P+Q)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句