我正在尝试生成可以应用于图像的高斯滤波器,但我想应用它一维两次:水平和垂直。此外,我希望将其分别应用于每个平面。
这意味着我想要设计一维高斯滤波器来水平应用于红色,绿色,蓝色分量,然后我有相同的一维高斯滤波器来垂直应用于红色,绿色,蓝色分量。
我认为这个操作应该等同于在原始彩色图像上应用2D高斯滤波器。
我在Matlab和图像处理过滤器方面是新手。
发布于 2014-11-02 10:08:13
2D高斯卷积可以用两个1D高斯卷积来执行,如下所示:
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其他阅读:
Stackoverflow.com上的
为什么你更喜欢两个一维卷积而不是一个二维卷积(也在上面提到的链接2中给出了):
假设你有一个大小为MxN的图像和一个大小为PxQ的滤波器,那么对于2D卷积,你需要~ M*P*N*Q乘法和加法。对于两个一维过滤器(大小分别为P和Q),您只需要~ MNP+MNQ = MN(P+Q)操作。因此,您可以获得PQ/(P+Q)级别的加速。
https://stackoverflow.com/questions/26695046
复制相似问题