[SciPy-user] PIL and gaussian_filter?

Zachary Pincus zachary.pincus@yale....
Wed May 21 09:26:58 CDT 2008


> When I use the asarray() method on my PIL image I get a 3-dimensional
> array, shape is  (w, h, 3 [rgb-values]).
> I am wondering how I can transform this to something that is
> compatible with f.e. ndimage.gaussian_filter? (When I run it directly
> it simply removes color from the image).

ndimage works as the name implies: it is a library for dealing with n- 
dimensional images. So in this case, it treated your input as a [w,h, 
3] array of voxels (a 3D image), and then applied the gaussian  
smoothing of the requested variance across all three dimensions. The  
result of which was probably (a) some degree of smoothing in the x and  
y dimensions (as requested), and (b) the same degree of smoothing  
across the "z" (color channel) dimension, which (as it is only "3  
voxels high" translates into quite a bit of mixing of the pixels).  
This "z smoothing" of course translates into mixing the color  
channels, probably by quite a large degree if your gaussian variance  
was anything above one pixel. Which would give the effect of "removing  
the color" from the image.

So, you need to apply the gaussian filter to each channel  
independently. You could either do this with a for loop, or even  
easier, pass a tuple to the sigma parameter to describe the requested  
variance in each dimension. To smooth by a 2-pixel stdev gaussian in  
w, a 4-pixel gaussian in h, and to do no smoothing across color  
channels, just pass 'sigma=[2,4,0]' to gaussian_filter.


More information about the SciPy-user mailing list