gpt4 book ai didi

python - convolve2d和filter2D之间的差异。为什么输出形状有所不同?

转载 作者:行者123 更新时间:2023-12-02 17:26:52 27 4
gpt4 key购买 nike

我需要执行2D卷积。我有一个形状为100, 100的相似矩阵和一个形状为5,5的过滤器。

如果我确实使用scipy:

scipy.signal.convolve2d(similarity_matrix, np.diag(filter))

我得到 104,104矩阵作为响应。

但是如果我使用OpenCV的filter2D方法:
cv2.filter2D(similarity_matrix, -1, np.diag(filter))

我得到一个 100,100矩阵作为响应。
  • 这是怎么回事?为什么形状有所不同?
  • 为什么使用convolve2d可以多获得4行和4列?
  • 最佳答案

    scipy.signal.convolve2d的默认输出模式是完整卷积。如果希望输出大小与输入大小相同,请将mode参数设置为“same”。

    scipy.signal.convolve2d(similarity_matrix, np.diag(filter), mode="same")

    更新:将图像与内核进行卷积时,由于缺少某些邻居,因此无法直接计算图像边缘的卷积结果。有多种解决此问题的方法

    1-忽略边的值,例如如果内核为3x3,则忽略边缘的元素,如果内核为5x5,则忽略边缘的最后2个元素,依此类推。
    2-对图像应用某种填充,这意味着暂时以特定方式放大图像,以便可以将卷积核应用于边缘的值。同样,执行此操作的方法也不同(这次是2种以上),但是最基本的方法是零填充。例如,如果您的图像大小为100x100,而内核为5x5,则由于缺少邻居,在图像的每一侧(右,上,左,下),我们无法计算两个外部值的卷积。使用零填充方法,您首先将图像放大到104x104。该放大的图像由位于中心的原始100x100图像和一些添加到边缘的零值组成,现在最主要的是现在您可以将滤镜应用于100x100区域,因为您为边缘值创建了人工邻居。

    关于模式名称:
    1-如果选择“填充方式”,并保持输出大小与输入大小相同,则称为 ,即卷积。通过上面的填充方法,可以通过在放大的图像上放置外部值来完成此操作。
    2-如果选择“忽略边值方式”进行卷积,则输出将较小。这称为 有效卷积。顾名思义,您仅在“有效”区域执行卷积操作。
    3-如果您选择“填充方式”并同时保留附加值,则称为 完整卷积。注意,通过裁剪完整卷积的输出,您也可以获得相同和有效的卷积。

    关于python - convolve2d和filter2D之间的差异。为什么输出形状有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58777438/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com