【问题标题】:averaging mask and laplacian mask in image processing图像处理中的平均掩模和拉普拉斯掩模
【发布时间】:2011-09-13 14:42:22
【问题描述】:

在给定的应用程序中,我将平均蒙版应用于输入图像以减少噪点,然后使用拉普拉斯蒙版来增强小细节。任何人都知道如果我在 Matlab 中颠倒这些操作的顺序,我是否会得到相同的结果?

【问题讨论】:

    标签: matlab image-processing noise-reduction image-enhancement


    【解决方案1】:

    假设您有两个过滤器F1F2,以及一个图像I。如果你通过两个过滤器传递你的图像,你会得到一个定义为

    的响应
    X = ((I * F1) * F2)
    

    这里我用* 代表convolution

    通过卷积的关联规则,这与。

    X = (I * (F1 * F2))
    

    使用交换性,我们可以说

    X = (I * (F2 * F1)) = ((I * F2) * F1)
    

    当然,这是数学的连续领域,在机器上做这些事情意味着会出现舍入错误并且一些数据可能会丢失。您还应该考虑您的过滤器是否为FIR,否则将数字过滤视为卷积排序的整个概念开始崩溃,因为您的过滤器不能真正按照您想要的方式运行。


    编辑

    离散卷积定义为

    因此在数据边缘添加零不会改变任何数学意义上的内容。

    正如一些人所指出的,你会在数字上得到不同的答案,但每当我们处理计算实际数据时,这是意料之中的。这些变化应该很小,并且仅限于卷积输出的低能量分量(即:边缘)。

    考虑卷积操作的工作方式也很重要。卷积长度为X 和长度为Y 的两组数据将得到长度为X+Y-1 的答案。对于像 MATLAB 和 Mathematica 这样的程序来说,有一些幕后的魔法可以给你一个长度为 XY 的答案。

    所以关于@belisarius 的帖子,我们似乎真的在说同样的话。

    【讨论】:

    • 应用图像过滤器通常需要一些填充(特别是为每个过滤器设置,取决于图像边界上的值)。这会破坏 commutation 属性。
    • @belisarius 我不确定我是否遵循填充(零或其他)将如何破坏卷积的交换属性。你能提供证据吗?
    • @belisarius 我想我们在这里可能会说同样的话。查看我的编辑。
    【解决方案2】:

    从数值上看,结果并不相同,但图像看起来非常相似。

    Mathematica 中的示例:

    编辑

    作为对@thron 评论中关于线性过滤器和填充的交换的回答,只需考虑以下操作。

    虽然没有填充的高斯和拉普拉斯滤波器的交换是正确的:

    list = {1, 3, 5, 7, 5, 3, 1};
    gauss[x_] := GaussianFilter[ x, 1]
    lapl[x_] := LaplacianFilter[x, 1]
    Print[gauss[lapl[list]], lapl[gauss[list]]]
    (*
    ->{5.15139,0.568439,-1.13688,-9.16589,-1.13688,0.568439,5.15139}    
      {5.15139,0.568439,-1.13688,-9.16589,-1.13688,0.568439,5.15139}
    *)
    

    对填充做同样的事情,会导致边缘的差异:

    gauss[x_] := GaussianFilter[ x, 1, Padding -> 1]
    lapl[x_] := LaplacianFilter[x, 1, Padding -> 1]
    Print[gauss[lapl[list]], lapl[gauss[list]]]
    
    (*
    ->{4.68233,0.568439,-1.13688,-9.16589,-1.13688,0.568439,4.68233}
      {4.58295,0.568439,-1.13688,-9.16589,-1.13688,0.568439,4.58295}
    *)
    

    【讨论】:

    • 哇 非常感谢,如果不是问的太多,你能在Matlab中做一个例子吗?
    • @biz 抱歉,我没有 Matlab。我相信其他成员可以发布它。 HTH!
    【解决方案3】:

    使用拉普拉斯核卷积类似于使用有关强度变化的二阶导数信息。由于该导数对噪声敏感,因此我们通常在应用拉普拉斯滤波器之前使用高斯对图像进行平滑处理。


    这是一个类似于 @belisarius 发布的 MATLAB 示例:

    f='http://upload.wikimedia.org/wikipedia/commons/f/f4/Noise_salt_and_pepper.png';
    I = imread(f);
    
    kAvg = fspecial('average',[5 5]);
    kLap = fspecial('laplacian',0.2);
    
    lapMask = @(I) imsubtract(I,imfilter(I,kLap));
    
    subplot(131), imshow(I)
    subplot(132), imshow( imfilter(lapMask(I),kAvg) )
    subplot(133), imshow( lapMask(imfilter(I,kAvg)) )
    

    【讨论】:

    • 很好,谢谢!那么当程序颠倒时发生了什么?
    • @biz: 'thron of three' 解释的很好,参考他的回答
    猜你喜欢
    • 2018-11-20
    • 1970-01-01
    • 2021-12-07
    • 2021-05-20
    • 2016-08-09
    • 2011-04-29
    • 1970-01-01
    • 2020-06-28
    • 2020-06-23
    相关资源
    最近更新 更多