def _correlate2(data, h, dev=None): """computes normalized cross correlation of 2d <data> with template <h> on the GPU Device <dev> boundary conditions are clamping to edge. h is converted to float32 if dev == None a new one is created """ if not dev: dev = OCLDevice(useDevice=imgtools.__OPENCLDEVICE__) dtype = data.dtype.type dtypes_kernels = { np.float32: "correlate2d_float", np.uint16: "correlate2d_short" } if not dtype in dtypes_kernels.keys(): raise TypeError( "data type %s not supported yet, please convert to:" % dtype, dtypes_kernels.keys()) proc = OCLProcessor(dev, absPath("kernels/correlate_kernels.cl")) Ny, Nx = h.shape hbuf = dev.createBuffer(Nx * Ny, dtype=np.float32, mem_flags=cl.mem_flags.READ_ONLY) inImg = dev.createImage_like(data) outImg = dev.createImage_like(data, mem_flags="READ_WRITE") dev.writeImage(inImg, data) dev.writeBuffer(hbuf, h.astype(np.float32).flatten()) proc.runKernel(dtypes_kernels[dtype], inImg.shape, None, inImg, hbuf, np.int32(Nx), np.int32(Ny), outImg) return dev.readImage(outImg)
def _correlate2(data,h, dev = None): """computes normalized cross correlation of 2d <data> with template <h> on the GPU Device <dev> boundary conditions are clamping to edge. h is converted to float32 if dev == None a new one is created """ if not dev: dev = OCLDevice(useDevice = imgtools.__OPENCLDEVICE__) dtype = data.dtype.type dtypes_kernels = {np.float32:"correlate2d_float", np.uint16:"correlate2d_short"} if not dtype in dtypes_kernels.keys(): raise TypeError("data type %s not supported yet, please convert to:"%dtype,dtypes_kernels.keys()) proc = OCLProcessor(dev,absPath("kernels/correlate_kernels.cl")) Ny,Nx = h.shape hbuf = dev.createBuffer(Nx*Ny,dtype=np.float32,mem_flags= cl.mem_flags.READ_ONLY) inImg = dev.createImage_like(data) outImg = dev.createImage_like(data,mem_flags="READ_WRITE") dev.writeImage(inImg,data) dev.writeBuffer(hbuf,h.astype(np.float32).flatten()) proc.runKernel(dtypes_kernels[dtype],inImg.shape,None,inImg,hbuf,np.int32(Nx),np.int32(Ny),outImg) return dev.readImage(outImg)