Last time I've tried on skimage I think that I didn't do really understand 
how it works. As you seem pretty confident, I take a little time to study 
it. As I often switch between OpenCV and skimage I've performed the 
coordinate interpolation using both methods. I've also used the 
scipy.interpolation.griddata which is the only one that I figure out to 
make work.
As usual OpenCV is  6x faster but skimage perform good even with 4096x4096 
images. 

I just create a disk and transform it in ellipse using warping function.

For Ndimage, you can find an example of geometric_transform, but it doesn't 
work for me, map_coordinate is not suited for a full image mapping. 


I'm pretty sure both ndimage and scikit-image can handle larger images than 
> that.  Did you see these fail in practice?
>
> Stéfan
>
>
>

-- 
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+unsubscr...@googlegroups.com.
To post to this group, send an email to scikit-image@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/scikit-image/c59117bc-4415-41db-be69-7ac3ce52a424%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
import numpy as np
import scipy.interpolate as ip
import scipy.ndimage as nd
import time
from skimage.transform import warp
import cv2 


Size_x=1024
Size_y=1024
radius=100

Y,X = np.meshgrid(range(0,Size_x), range(0,Size_y))
Img=np.zeros(Y.shape)

# Creation of a dummy image
Img[((X-X.max()/2)**2+(Y-Y.max()/2)**2)**0.5<radius]=255

# Displacement and transformation creation 
U=-0.2*(X-X.max()/2)
V=0.1*(Y-Y.max()/2)
Xi=X+U # compression
Yi=Y+V # elongation

# griddata from interpolate 
## Need delaunay triangulation that consume a lot of memory don't go over 1024x1024 ...
points=(X.reshape(X.shape[0]*X.shape[1],1)[:,0],Y.reshape(X.shape[0]*X.shape[1],1)[:,0])
value=Img.reshape(X.shape[0]*X.shape[1],1)[:,0]
t0=time.time()
Imgi_griddata = ip.griddata(points,value , (Xi,Yi), method='linear')
print("Griddata time : %f"%(time.time()-t0))


Trans=np.zeros((2,Img.shape[0],Img.shape[1]))
Trans[0,::,::]=Xi
Trans[1,::,::]=Yi

t0=time.time()
Imgi_skimage=warp(Img,Trans)
print("Skimage warp time : %f"%(time.time()-t0))


t0=time.time()
Imgi_cv2=cv2.remap(Img.astype('float32'),Yi.astype('float32'),Xi.astype('float32'),cv2.INTER_LINEAR)
print("OpenCV remap time : %f"%(time.time()-t0))

## ndimage interpolation tools
# Does not work on my PC
#def shift_func(output_coordinates, s0, s1):
    #return (output_coordinates[0] + s0, output_coordinates[1] + s1)

#t0=time.time()
#imgi_nd=nd.geometric_transform(Img,shift_func,extra_arguments = (U, V))
#print("Ndimage time : %d"%(time.time()-t0))

Reply via email to