Issue with skimage.transform.warp - 'numpy.float64' object cannot be interpreted as an index

Alistair Muldal alimuldal at gmail.com
Sun Jul 21 18:33:35 EDT 2013


Hi Johannes,

Spot on - I was indeed computing the output_shape as a tuple of floats 
rather than integers, and casting them to ints fixed the problem. I'm a bit 
surprised it actually worked in v0.7.1!

Cheers,

Alistair

On Sunday, July 21, 2013 10:17:14 PM UTC+1, Johannes Schönberger wrote:
>
> Hi, 
>
> does the **kwargs contain the output_shape? 
>
> Make sure that the the values are integers: `output_shape = (int(rows), 
> int(cols))`. 
>
> Johannes Schönberger 
>
> Am 21.07.2013 um 17:20 schrieb Alistair Muldal <alim... at gmail.com<javascript:>>: 
>
>
> > Hi all, 
> > 
> > I've been using skimage.transform.warp to apply affine transformations 
> to a series of movie frames, using this wrapper function: 
> > 
> > def applytform(img,tmat,**kwargs): 
> >     """ 
> >     A wrapper to call skimage.transform.warp for fast similarity 
> >     transformations. Also returns the mask of the transformed image (a 
> >     boolean array, True only in pixels containing the transformed 
> image). 
> >     All keyword arguments are passed directly to warp. 
> >     """ 
> > 
> >     # warp needs floating point images -1.0 <= I <= 1.0 
> >     origtype, imin, imax = img.dtype, img.min(), img.max() 
> >     tmpimg = (np.float64(img) - imin) / (imax-imin) 
> > 
> >     # tmpimg = np.require(tmpimg,np.float32,'CAOW') 
> >     # tmat = np.require(tmat,np.float32,'CAOW') 
> > 
> >     # construct a callable transform object, apply it using warp 
> >     s = SimilarityTransform(matrix=tmat) 
> >     # import ipdb;ipdb.set_trace() 
> >     tmpimg = warp(tmpimg,s.inverse,mode='constant',cval=np.nan,**kwargs) 
> >     mask = ~np.isnan(tmpimg) 
> >     tmpimg[~mask] = 0. 
> > 
> >     # convert back to original scaling and type 
> >     img = tmpimg*imax + imin 
> >     img = img.astype(origtype) 
> > 
> >     return img,mask 
> > 
> > I've had no problems using skimage v0.7.1, but I've recently tried 
> updating to v0.8.2 and now the same code gives me this error: 
> > 
> > /home/alistair/src/python/ca_tadpoles2/opt/d/imtransform3.pyc in 
> applytform(img, tmat, **kwar 
> > gs) 
> >      50         s = SimilarityTransform(matrix=tmat) 
> >      51         # import ipdb;ipdb.set_trace() 
> > ---> 52         tmpimg = 
> warp(tmpimg,s.inverse,mode='constant',cval=np.nan,**kwargs) 
> >      53         mask = ~np.isnan(tmpimg) 
> >      54         tmpimg[~mask] = 0. 
> > 
> > 
> /home/alistair/.venvs/newskimage/lib/python2.7/site-packages/skimage/transform/_geometric.pyc 
>
> >  in warp(image, inverse_map, map_args, output_shape, order, mode, cval, 
> reverse_map) 
> >     989                 dims.append(_warp_fast(image[..., dim], matrix, 
> >     990                             output_shape=output_shape, 
> > --> 991                             order=order, mode=mode, cval=cval)) 
> >     992             out = np.dstack(dims) 
> >     993             if orig_ndim == 2: 
> > 
> > 
> /home/alistair/.venvs/newskimage/lib/python2.7/site-packages/skimage/transform/_warps_cy.so 
> i 
> > n skimage.transform._warps_cy._warp_fast 
> (skimage/transform/_warps_cy.c:1636)() 
> > 
> > TypeError: 'numpy.float64' object cannot be interpreted as an index 
> > 
> > I've tried casting the image and the transformation matrix to 
> np.float32, but this gave me a different error: 
> > 
> > /home/alistair/src/python/ca_tadpoles2/opt/d/imtransform3.pyc in 
> applytform(img, tmat, **kwargs) 
> >      50         s = SimilarityTransform(matrix=tmat) 
> >      51         # import ipdb;ipdb.set_trace() 
> > ---> 52         tmpimg = 
> warp(tmpimg,s.inverse,mode='constant',cval=np.nan,**kwargs) 
> >      53         mask = ~np.isnan(tmpimg) 
> >      54         tmpimg[~mask] = 0. 
> > 
> > 
> /home/alistair/.venvs/newskimage/lib/python2.7/site-packages/skimage/transform/_geometric.pyc 
> in warp(image, inverse_map, map_args, output_shape, order, mode, cval, 
> reverse_map) 
> >     989                 dims.append(_warp_fast(image[..., dim], matrix, 
> >     990                             output_shape=output_shape, 
> > --> 991                             order=order, mode=mode, cval=cval)) 
> >     992             out = np.dstack(dims) 
> >     993             if orig_ndim == 2: 
> > 
> > 
> /home/alistair/.venvs/newskimage/lib/python2.7/site-packages/skimage/transform/_warps_cy.so 
> in skimage.transform._warps_cy._warp_fast 
> (skimage/transform/_warps_cy.c:1505)() 
> > 
> > ValueError: Buffer dtype mismatch, expected 'double_t' but got 'float' 
> > 
> > Any idea what's going on here? 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups "scikit-image" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an email to scikit-image... at googlegroups.com <javascript:>. 
> > For more options, visit https://groups.google.com/groups/opt_out. 
> >   
> >   
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scikit-image/attachments/20130721/7b9fb39c/attachment.html>


More information about the scikit-image mailing list