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...@gmail.com>:
> 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...@googlegroups.com .
> For more options, visit https://groups.google.com/groups/opt_out .
>
>