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

Alistair Muldal alimuldal at gmail.com
Sun Jul 21 11:20:03 EDT 2013


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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scikit-image/attachments/20130721/dcc429a6/attachment.html>


More information about the scikit-image mailing list