[Image-SIG] Feature request: Median filter
Josh Levenberg
joshjunk@pacbell.net
Thu, 22 Aug 2002 01:23:12 -0700
I've tried several python implementations of a median filter. So far my
fastest (included below) is still quite slow (it takes minutes rather
than seconds). Is there a way of speeding this up? Is there going to
be a median filter included in future versions of PIL?
Thanks!
def MedianOnString(imstr, imsize, kernelsize):
(width,height) = imsize
rows=[imstr[row*width:(row+1)*width] for row in range(height)]
retrows=['']*height
for x in range(width):
sys.stdout.write('.')
mnx = max(x-kernelsize, 0)
mxx = min(x+kernelsize+1, width)
window=[]
for y in range(min(kernelsize+1, height)):
window.append(rows[y][mnx:mxx])
for y in range(height):
if y>kernelsize:
# remove first row from window
del window[0]
if y+kernelsize<height:
# add last row to window
window.append(rows[y+kernelsize][mnx:mxx])
lst=list(''.join(window))
lst.sort()
retrows[y]= retrows[y]+lst[len(lst)/2]
sys.stdout.write('\n')
return ''.join(retrows)
def MedianFilter(im, kernelsize):
imagedata=[MedianOnString(impart.tostring(), im.size, kernelsize)
for impart in im.split()]
return Image.merge('RGB', [Image.fromstring('L', im.size, imstring)
for imstring in imagedata])
--
Josh Levenberg