【问题标题】:Combination of two convolution filters两个卷积滤波器的组合
【发布时间】:2012-11-08 10:04:18
【问题描述】:

什么是一个过滤器矩阵,相当于使用带有参数“full”的 imfilter 在图像上应用 [1 1 1] 两次?它仍然是一个 1x3 矩阵吗?

【问题讨论】:

    标签: matlab convolution


    【解决方案1】:

    卷积是关联的,这意味着(f*g)*h = f*(g*h)。所以不是

    r = conv(conv(x, [1,1,1]), [1,1,1])
    

    您可以预先计算两个过滤器的卷积,然后将其仅应用于每个图像一次:

    tmp_filter = conv([1,1,1], [1,1,1]);
    ...
    r1 = conv(x1, tmp_filter)
    r2 = conv(x2, tmp_filter)
    

    其中新过滤器是[1 2 3 2 1],但它与原始过滤器的大小不同。

    【讨论】:

    • 啊,明白了!为什么是 1 2 3 2 1 而不是 0 2 3 2 0?谢谢!
    • 好吧,如果您以图形方式计算,1s 是仅四肢重叠时,2s 是两个元素重叠时,3 是功能完全重叠时跨度>
    • 除非你使用same参数,它返回一个与第一个参数大小相同的输出,它给你[2,3,2](相当于[0,2,3,2,0])。
    • 注意,如果在对两个内核进行卷积时使用same,得到的内核并不等同于两个内核的合成。编写内核时需要使用full。这与用于将卷积应用于图像的模式无关。
    【解决方案2】:

    full 参数告诉filter 函数返回与过滤后的图像大小相同的图像。您可以多次应用相同的过滤器,但如果您每次都使用full,则大小不应改变。

    【讨论】:

    • 感谢您的回复。不过我想知道,我们可以只使用一次卷积滤波器,而不是使用 [1 1 1] 进行两次卷积?
    • 这是错误的。 full 导致输出大于输入。 same 保留大小。此外,这个答案并没有解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多