Esempio n. 1
0
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)
Esempio n. 2
0
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)