예제 #1
0
파일: gfilter.py 프로젝트: bgruening/bcfind
def correlate1d(input, weights, axis=-1, output=None, mode="reflect",
                cval=0.0, origin=0):
    """Calculate a one-dimensional correlation along the given axis.

    The lines of the array along the given axis are correlated with the
    given weights.

    Parameters
    ----------
    %(input)s
    weights : array
        One-dimensional sequence of numbers.
    %(axis)s
    %(output)s
    %(mode)s
    %(cval)s
    %(origin)s
    """
    input = numpy.asarray(input)
    if numpy.iscomplexobj(input):
        raise TypeError('Complex type not supported')
    output, return_value = _ni_support._get_output(output, input)
    weights = numpy.asarray(weights, dtype=numpy.float64)
    if weights.ndim != 1 or weights.shape[0] < 1:
        raise RuntimeError('no filter weights given')
    if not weights.flags.contiguous:
        weights = weights.copy()
    axis = _ni_support._check_axis(axis, input.ndim)
    if ((len(weights) // 2 + origin < 0) or
        (len(weights) // 2 + origin > len(weights))):
        raise ValueError('invalid origin')
    mode = _ni_support._extend_mode_to_code(mode)
    _nd_image.correlate1d(input, weights, axis, output, mode, cval,
                          origin)
    return return_value
예제 #2
0
def correlate1d(input, weights, axis=-1, output=None, mode="reflect",
                cval=0.0, origin=0):
    """Calculate a one-dimensional correlation along the given axis.

    The lines of the array along the given axis are correlated with the
    given weights.

    Parameters
    ----------
    %(input)s
    weights : array
        One-dimensional sequence of numbers.
    %(axis)s
    %(output)s
    %(mode)s
    %(cval)s
    %(origin)s
    """
    input = numpy.asarray(input)
    if numpy.iscomplexobj(input):
        raise TypeError('Complex type not supported')
    output, return_value = _ni_support._get_output(output, input)
    weights = numpy.asarray(weights, dtype=numpy.float64)
    if weights.ndim != 1 or weights.shape[0] < 1:
        raise RuntimeError('no filter weights given')
    if not weights.flags.contiguous:
        weights = weights.copy()
    axis = _ni_support._check_axis(axis, input.ndim)
    if (len(weights) // 2 + origin < 0) or (len(weights) // 2 +
                                            origin > len(weights)):
        raise ValueError('invalid origin')
    mode = _ni_support._extend_mode_to_code(mode)
    _nd_image.correlate1d(input, weights, axis, output, mode, cval,
                          origin)
    return return_value
예제 #3
0
    def __FilterData2D(self, data):
        mode = _ni_support._extend_mode_to_code("reflect")
        #lowpass filter to suppress noise
        #a = ndimage.gaussian_filter(data.astype('f4'), self.filterRadiusLowpass)
        #print data.shape

        data = data - data.mean()

        output, a = _ni_support._get_output(None, data)
        if self.PRIaxis == 'x':
            _nd_image.correlate1d(data, weightsLowpass, 0, output, mode, 0, 0)
            _nd_image.correlate1d(output, weightsHighpass, 1, output, mode, 0,
                                  0)
        else:
            _nd_image.correlate1d(data, weightsHighpass, 0, output, mode, 0, 0)
            _nd_image.correlate1d(output, weightsLowpass, 1, output, mode, 0,
                                  0)
        #print numpy.absolute(a - a_).mean()

        #lowpass filter again to find background
        #b = ndimage.gaussian_filter(a, self.filterRadiusHighpass)

        #output, b = _ni_support._get_output(None, data)
        #_nd_image.correlate1d(data, weightsHighpass, 0, output, mode, 0,0)
        #_nd_image.correlate1d(output, weightsHighpass, 1, output, mode, 0,0)

        return a  #- b
예제 #4
0
    def __FilterData2D(self,data):
        mode = _ni_support._extend_mode_to_code("reflect")
        #lowpass filter to suppress noise
        #a = ndimage.gaussian_filter(data.astype('f4'), self.filterRadiusLowpass)
        #print data.shape
        
        data = data - data.mean()

        output, a = _ni_support._get_output(None, data)
        if self.PRIaxis == 'x':
            _nd_image.correlate1d(data, weightsLowpass, 0, output, mode, 0,0)
            _nd_image.correlate1d(output, weightsHighpass, 1, output, mode, 0,0)
        else:
            _nd_image.correlate1d(data, weightsHighpass, 0, output, mode, 0,0)
            _nd_image.correlate1d(output, weightsLowpass, 1, output, mode, 0,0)
        #print numpy.absolute(a - a_).mean()

        #lowpass filter again to find background
        #b = ndimage.gaussian_filter(a, self.filterRadiusHighpass)

        #output, b = _ni_support._get_output(None, data)
        #_nd_image.correlate1d(data, weightsHighpass, 0, output, mode, 0,0)
        #_nd_image.correlate1d(output, weightsHighpass, 1, output, mode, 0,0)

        return a #- b
예제 #5
0
def fastLaplaceNd(arr):
    """A very fast laplace filter for small arrays directly calling the scipy c++ function
    
    Required Inputs
        arr :: nd.array :: the array to calculate the n-dim laplace filter
    """
    output = np.zeros(arr.shape, 'float64')
    if arr.ndim > 0:
        # send output as a pointer sio no need for equals sign
        _nd_image.correlate1d(arr, laplace_filter, 0, output, 1, 0.0, 0)
        if arr.ndim == 1: return output
        for ax in xrange(1, arr.ndim):
            return_value = np.zeros(arr.shape, dtype=output.dtype)
            _nd_image.correlate1d(arr, laplace_filter, ax, output, 1, 0.0, 0)
            output += return_value
    return output.view(Periodic_Lattice)
예제 #6
0
    def Afunc(self, f):
        """Forward transform - convolve with the PSF"""
        fs = np.reshape(f, (self.height, self.width, self.depth))

        #d = ndimage.gaussian_filter(fs, self.sigma)
        mode = _ni_support._extend_mode_to_code("reflect")
        #lowpass filter to suppress noise
        #a = ndimage.gaussian_filter(data.astype('f4'), self.filterRadiusLowpass)
        #print data.shape

        output, a = _ni_support._get_output(None, fs)
        _nd_image.correlate1d(fs, self.kernel, 0, output, mode, 0, 0)
        _nd_image.correlate1d(output, self.kernel, 1, output, mode, 0, 0)

        #ndimage.uniform_filter(output, self.oversamp, output=output)

        #d = real(d);
        return np.ravel(output)  #[::oversamp,::oversamp,:])
예제 #7
0
    def Afunc(self, f):
        '''Forward transform - convolve with the PSF'''
        fs = reshape(f, (self.height, self.width, self.depth))

        #d = ndimage.gaussian_filter(fs, self.sigma)
        mode = _ni_support._extend_mode_to_code("reflect")
        #lowpass filter to suppress noise
        #a = ndimage.gaussian_filter(data.astype('f4'), self.filterRadiusLowpass)
        #print data.shape

        output, a = _ni_support._get_output(None, fs)
        _nd_image.correlate1d(fs, self.kernel, 0, output, mode, 0,0)
        _nd_image.correlate1d(output, self.kernel, 1, output, mode, 0,0)
        
        #ndimage.uniform_filter(output, self.oversamp, output=output)

        #d = real(d);
        return ravel(output)#[::oversamp,::oversamp,:])
예제 #8
0
    def __FilterDataFast(self):
        data = self.data[:,:,0]
        mode = _ni_support._extend_mode_to_code("reflect")
        # lowpass filter to suppress noise
        output, a = _ni_support._get_output(None, data)
        _nd_image.correlate1d(data, ofdP.weightsLowpass, 0, output, mode, 0, 0)
        _nd_image.correlate1d(output, ofdP.weightsLowpass, 1, output, mode, 0, 0)

        # lowpass filter again to find background
        output, b = _ni_support._get_output(None, data)
        _nd_image.correlate1d(data, ofdP.weightsHighpass, 0, output, mode, 0, 0)
        _nd_image.correlate1d(output, ofdP.weightsHighpass, 1, output, mode, 0, 0)

        return a - b
예제 #9
0
    def __FilterDataFast(self):
        data = self.data[:, :, 0]
        mode = _ni_support._extend_mode_to_code("reflect")
        # lowpass filter to suppress noise
        output, a = _ni_support._get_output(None, data)
        _nd_image.correlate1d(data, ofdP.weightsLowpass, 0, output, mode, 0, 0)
        _nd_image.correlate1d(output, ofdP.weightsLowpass, 1, output, mode, 0,
                              0)

        # lowpass filter again to find background
        output, b = _ni_support._get_output(None, data)
        _nd_image.correlate1d(data, ofdP.weightsHighpass, 0, output, mode, 0,
                              0)
        _nd_image.correlate1d(output, ofdP.weightsHighpass, 1, output, mode, 0,
                              0)

        return a - b
예제 #10
0
    def __FilterData2D(self, data):
        mode = _ni_support._extend_mode_to_code("reflect")
        #lowpass filter to suppress noise
        #a = ndimage.gaussian_filter(data.astype('f4'), self.filterRadiusLowpass)
        #print data.shape

        #output, a = _ni_support._get_output(None, data)
        a = np.zeros(data.shape, dtype=data.dtype.name)
        _nd_image.correlate1d(data, weightsLowpass, 0, a, mode, 0, 0)
        _nd_image.correlate1d(a, weightsLowpass, 1, a, mode, 0, 0)

        #print np.absolute(a - a_).mean()

        #lowpass filter again to find background
        #b = ndimage.gaussian_filter(a, self.filterRadiusHighpass)

        b = np.zeros(data.shape, dtype=data.dtype.name)
        _nd_image.correlate1d(data, weightsHighpass, 0, b, mode, 0, 0)
        _nd_image.correlate1d(b, weightsHighpass, 1, b, mode, 0, 0)

        return a - b