首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >水平和垂直方向的一维高斯滤波器

水平和垂直方向的一维高斯滤波器
EN

Stack Overflow用户
提问于 2014-11-02 09:16:52
回答 1查看 16K关注 0票数 2

我正在尝试生成可以应用于图像的高斯滤波器,但我想应用它一维两次:水平和垂直。此外,我希望将其分别应用于每个平面。

这意味着我想要设计一维高斯滤波器来水平应用于红色,绿色,蓝色分量,然后我有相同的一维高斯滤波器来垂直应用于红色,绿色,蓝色分量。

我认为这个操作应该等同于在原始彩色图像上应用2D高斯滤波器。

我在Matlab和图像处理过滤器方面是新手。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-02 10:08:13

2D高斯卷积可以用两个1D高斯卷积来执行,如下所示:

代码语言:javascript
复制
G(x,y)*I=G(x)*(G(y)*I);

您可以在MATLAB中执行以下操作:

代码语言:javascript
复制
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上的

  1. This回答,它告诉你如何确定给定的内核是否是可分的。例如,对于上述问题,高斯是可分离的,而磁盘内核是not.
  2. Original article

为什么你更喜欢两个一维卷积而不是一个二维卷积(也在上面提到的链接2中给出了):

假设你有一个大小为MxN的图像和一个大小为PxQ的滤波器,那么对于2D卷积,你需要~ M*P*N*Q乘法和加法。对于两个一维过滤器(大小分别为PQ),您只需要~ MNP+MNQ = MN(P+Q)操作。因此,您可以获得PQ/(P+Q)级别的加速。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26695046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档