[SciPy-dev] ndimage problems

Stefan van der Walt stefan at sun.ac.za
Tue Oct 9 20:07:51 EDT 2007


Hi Chris

On Tue, Jul 03, 2007 at 12:25:55PM -0400, Christopher Hanley wrote:
> We have found two problems with ndimage.  I have filed a ticket #455 on 
> the scipy trac page.  The first problem can be seen with this example:
> 
>  > import numpy as n
>  > from scipy import ndimage as nd
>  > a = n.ones((10,5),dtype=n.float32) * 12.3
>  > x = nd.rotate(a,90.0)
>  > x
> Out[17]:
> array([[ 12.30000019,  12.30000019,  12.30000019,  12.30000019,
>         12.30000019,  12.30000019,  12.30000019,  12.30000019,
>          0.        ,   0.        ],
>       [ 12.30000019,  12.30000019,  12.30000019,  12.30000019,
>         12.30000019,  12.30000019,  12.30000019,  12.30000019,
>         12.30000019,  12.30000019],
>       [ 12.30000019,  12.30000019,  12.30000019,  12.30000019,
>         12.30000019,  12.30000019,  12.30000019,  12.30000019,
>         12.30000019,  12.30000019],
>       [ 12.30000019,  12.30000019,  12.30000019,  12.30000019,
>         12.30000019,  12.30000019,  12.30000019,  12.30000019,
>         12.30000019,  12.30000019],
>       [ 12.30000019,  12.30000019,  12.30000019,  12.30000019,
>         12.30000019,  12.30000019,  12.30000019,  12.30000019,
>         12.30000019,  12.30000019]], dtype=float32)
> }}}
> 
> Notice that the last two entries of the first row are now 0.

This is due to a slight round-off error when calculating the affine
transformation matrix.  cos(pi/180 * angle) isn't exactly zero, so you
find that elements that fall *just* outside the boundary gets
converted to the cval (0).  You can work around the problem in two
ways.

The first is to setup your own transformation matrix:

nd.affine_transform(a,[[0,1],[-1,0]],offset=[0,4],output_shape=(5,10))

The second is to use 'mirror' boundary mode, instead of 'cval',
thereby nudging those outliers back into place.

> The second problem has to do with the reversing of byte order if you 
> have big-endian data on a little endian machine.  Please see the example 
> below:

Thanks, I'll have a look at that.

Regards
Stéfan



More information about the SciPy-Dev mailing list