Jump to content

Python image filtering with PIL + NumPy too slow

- - - - -

  • Please log in to reply
1 reply to this topic

#1
Denis Yershov

Denis Yershov

    Newbie

  • Members
  • Pip
  • 1 posts
Hello!
I'm trying to implement the simpliest blur filter on python:


import os, sys, time

import Image, ImageEnhance

import numpy as np


if (len(sys.argv) > 1):

    im = Image.open(sys.argv[1])

    data = np.array(im.resize((128,128)))

    out_data = np.array(data)

    chs = len(data[0][0])

    im_size = (data.shape[0], data.shape[1])


    #defining filter kernel (mask)

    #let's believe it's square anytime

    kernel = np.array([[1.,2,1],

                       [2,3,2],

                       [1,2,1]])

    ctr = 1

    ker_size = kernel.shape[0]

    kernel = kernel/np.sum(kernel)


    #let's go looping!

    start_time = time.time()

    #loop over image dimensions

    for x in xrange(im_size[0]):

        for y in xrange(im_size[1]):

            #loop over channels

            for c in xrange(chs):

                acc = 0

                #loop over kernel

                for i in xrange(ker_size):

                    for j in xrange(ker_size):

                        m = x + i - ctr

                        n = y + j - ctr

                        if (m >= 0 and n >= 0 and m < im_size[0] and n < im_size[1]):

                            acc += data[m][n][c]*kernel[i][j]

                out_data[x][y][c] = acc

    elapsed = time.time() - start_time


    #it's over, let's do the rest

    out = Image.new(im.mode, (im_size[0], im_size[1]))

    out = Image.fromarray(out_data)

    out.show()

    print elapsed, "sec."

else:

    print "no file was passed"


It takes 4 seconds to process 128x128 image on my processor. It shouldn't be so slow. I know multithreading and parallelization would help. But this isn't the solution.
Can't figure out what i am doing wrong. Could you please help?

#2
zarkyoc

zarkyoc

    Newbie

  • Members
  • Pip
  • 2 posts
u has too many loop




1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users