Fastest 2D convolution or image filter in Python

前端 未结 5 1576
遥遥无期
遥遥无期 2020-12-24 03:35

Several users have asked about the speed or memory consumption of image convolutions in numpy or scipy [1, 2, 3, 4]. From the responses and my experience using Numpy, I bel

5条回答
  •  失恋的感觉
    2020-12-24 04:04

    I have been trying to improve the convolution speed in my application and I have been using signal.correlate which happens to be about 20 times slower than signal.correlate2d, my input matrices are smaller(27x27 and 5x5). As of 2018, this is what I observed on my machine(Dell Inspiron 13, Core i5) for the specified matrices in the actual question.

    OpenCV did the best but the caveat with that is that it doesn't given "mode" options. Input and Output are of the same size.

    >>> img= np.random.rand(2048,2048)
    >>> kernel = np.ones((32,32), dtype=np.float)
    >>> t1= time.time();dst1 = cv2.filter2D(img,-1,kernel);print(time.time()-t1)
    0.208490133286
    >>> t1= time.time();dst2 = signal.correlate(img,kernel,mode='valid',method='fft');print(time.time()-t1)
    0.582989931107
    >>> t1= time.time();dst3 = signal.convolve2d(img,kernel,mode='valid');print(time.time()-t1)
    11.2672450542
    >>> t1= time.time();dst4 = signal.correlate2d(img,kernel,mode='valid');print(time.time()-t1)
    11.2443971634
    >>> t1= time.time();dst5 = signal.fftconvolve(img,kernel,mode='valid');print(time.time()-t1)
    0.581533193588
    

提交回复
热议问题