【问题标题】:Equivalent of Matlab filter2(filter, image, 'valid') in python等价于 python 中的 Matlab filter2(filter, image, 'valid')
【发布时间】:2017-09-02 09:00:05
【问题描述】:

我想知道 python OpenCV 或 scikit-image 库中 Matlab 的 filter2(filter, image, 'valid') 函数的等价物。我主要关心valid 参数,它允许计算滤波器和图像的卷积,而无需对图像进行零填充。我知道similar question 已发布在此论坛上,但与valid 参数等效的filter2 函数尚未正确描述。

【问题讨论】:

    标签: python matlab opencv image-processing scikit-image


    【解决方案1】:

    filter2documentation 表示filter2(H, X, shape) 等同于conv2(X,rot90(H,2),shape)

    python equivalentconv2signal.convolve2d。所以你正在寻找的等价物是:

    signal.convolve2d(X, np.rot90(H), mode='valid')
    

    【讨论】:

    • 另见scipy.ndimage.convolve
    • 如果我错了,请纠正我,但我认为 ndimage.convolve 总是与 matlab 的 filter2 等效,带有选项 'same',并且 OP 专门询问了 'valid' 选项.
    • 我想我的想法是 OP 可以轻松地进行各种填充,但你是对的。
    • 我认为应该是 signal.convolve2d(X, np.rot90(H, k=2), mode='valid') 否则默认为 k=1 并且您将数组旋转 90度
    【解决方案2】:

    在matlab中

    a=[[1, 2, 0, 0];[5, 3, 0, 4];[0, 0, 0, 7]; [9, 3, 0, 0]];
    k=[[1,1,1];[1,1,0];[1,0,0]];
    a_k=filter2(k, a, 'valid')
    ak=conv2(a,rot90(k,2), 'valid')
    

    a_k =

    11     5
    17    10
    

    ak =

    11     5
    17    10
    

    在python中

    a = np.array([[1, 2, 0, 0],[5, 3, 0, 4],[0, 0, 0, 7], [9, 3, 0, 0]])
    k = np.array([[1,1,1],[1,1,0],[1,0,0]])
    from scipy import signal
    print(signal.convolve2d(a, np.rot90(k,2), mode='valid'))
    

    [[11 5] [17 10]]

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 2012-10-18
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2021-11-25
      • 2014-09-07
      相关资源
      最近更新 更多