Example #1
0
def asinhScale(data, nonlin, shift, minCut=None, maxCut=None, fname="", rgb=False, fscale=True):
    print "Enter asinhScale.............................."
    minX=data.min()
    maxX=data.max()

    if minCut == None:
        minCut=minX
    if maxCut == None:
        maxCut=maxX
        
    output = numpy.array(data, copy=True)
    
    fact=numpy.arcsinh((maxCut-minCut)/nonlin)
    print "factor:",fact
    
    output = output + shift
    
    lowCut = numpy.where(output < minCut)
    data_i = numpy.where((output > minCut) & (output < maxCut))
    hiCut = numpy.where(output > maxCut)
    
    # Zero out low end to avoid negatives
    output[lowCut] = 0.0
    
    # perform asinh and scaling to 0.0-1.0
    if fscale is True:
        output[data_i] = numpy.arcsinh(((output[data_i])/nonlin))/fact
    else:
        output[data_i] = numpy.arcsinh(((output[data_i])/nonlin))
    
    # Cut off high end
    output[hiCut] = 1.0
        
    if rgb is True:
        rgbImg = numpy.zeros((output.shape[0], output.shape[1], 3), dtype=float)
        
        # Make RGB gray scale
        rgbImg[data_i[0],data_i[1],0] = output[data_i]
        rgbImg[data_i[0],data_i[1],1] = output[data_i]
        rgbImg[data_i[0],data_i[1],2] = output[data_i]
        
        # Add in lows in Blue and highs in Red
        # lows are set to 0.0 and therefore wont show up.
        # to make low end visible uncomment:
        #output[lowCut] = 1.0
        rgbImg[lowCut[0],lowCut[1],2] = output[lowCut]
        rgbImg[hiCut[0],hiCut[1],0] = output[hiCut]
        
        # Write out image
        if fname != "":
            imagetools.imwrite(rgbImg, fname+"_RGB_"+(str(nonlin)+'_'+str(shift)+'_'+str(minCut)+'_'+str(maxCut))+".png")
            
        print "Leaving asinhScale.........................RGB"
        return numpy.array(rgbImg, copy=True)
    else:
        print "out min/max", output.min(), output.max()
        # Write out image
        if fname != "":
            imagetools.imwrite(output, fname+"_"+(str(nonlin)+'_'+str(shift)+'_'+str(minCut)+'_'+str(maxCut))+".png")
        print "Leaving asinhScale.........................GRAY"
        return numpy.array(output, copy=True)
    # multiplicative update is used which preserves positivity 
    factor_gpu = F.cnvtp(mask_gpu*y_gpu)/(F.cnvtp(mask_gpu*F.cnv(x_gpu))+tol)
    gputools.cliplower_GPU(factor_gpu, tol)
    x_gpu = x_gpu * factor_gpu
    x_max = x_gpu.get()[sf[0]:-sf[0],sf[1]:-sf[1]].max()
    gputools.clipupper_GPU(x_gpu, x_max)

    del factor_gpu
    del F
    
    # ------------------------------------------------------------------------
    # For backup intermediate results
    # ------------------------------------------------------------------------
    if backup:
        # Write intermediate results to disk incl. input
         imagetools.imwrite(y_gpu.get(), yname(i))

         # Crop image to input size
         xi = x_gpu.get()[sf2[0]:-sf2[0],sf2[1]:-sf2[1]] / x_max
         imagetools.imwrite(xi, xname(i))

         # Concatenate PSF kernels for ease of visualisation
         f = imagetools.gridF(fs,csf)
         imagetools.imwrite(f/f.max(), fname(i))


    # ------------------------------------------------------------------------
    # For displaying intermediate results
    # ------------------------------------------------------------------------
    if np.mod(i,1) == 0 and doshow:
        pl.figure(1)
    factor_gpu = F.cnvtp(
        mask_gpu * y_gpu) / (F.cnvtp(mask_gpu * F.cnv(x_gpu)) + tol)
    gputools.cliplower_GPU(factor_gpu, tol)
    x_gpu = x_gpu * factor_gpu
    x_max = x_gpu.get()[sf[0]:-sf[0], sf[1]:-sf[1]].max()
    gputools.clipupper_GPU(x_gpu, x_max)

    del factor_gpu
    del F

    # ------------------------------------------------------------------------
    # For backup intermediate results
    # ------------------------------------------------------------------------
    if backup:
        # Write intermediate results to disk incl. input
        imagetools.imwrite(y_gpu.get(), yname(i))

        # Crop image to input size
        xi = x_gpu.get()[sf2[0]:-sf2[0], sf2[1]:-sf2[1]] / x_max
        imagetools.imwrite(xi, xname(i))

        # Concatenate PSF kernels for ease of visualisation
        f = imagetools.gridF(fs, csf)
        imagetools.imwrite(f / f.max(), fname(i))

    # ------------------------------------------------------------------------
    # For displaying intermediate results
    # ------------------------------------------------------------------------
    if np.mod(i, 1) == 0 and doshow:
        pl.figure(1)
        pl.subplot(121)
Example #4
0
def asinhScale(data,
               nonlin,
               shift,
               minCut=None,
               maxCut=None,
               fname="",
               rgb=False,
               fscale=True):
    print "Enter asinhScale.............................."
    minX = data.min()
    maxX = data.max()

    if minCut == None:
        minCut = minX
    if maxCut == None:
        maxCut = maxX

    output = numpy.array(data, copy=True)

    fact = numpy.arcsinh((maxCut - minCut) / nonlin)
    print "factor:", fact

    output = output + shift

    lowCut = numpy.where(output < minCut)
    data_i = numpy.where((output > minCut) & (output < maxCut))
    hiCut = numpy.where(output > maxCut)

    # Zero out low end to avoid negatives
    output[lowCut] = 0.0

    # perform asinh and scaling to 0.0-1.0
    if fscale is True:
        output[data_i] = numpy.arcsinh(((output[data_i]) / nonlin)) / fact
    else:
        output[data_i] = numpy.arcsinh(((output[data_i]) / nonlin))

    # Cut off high end
    output[hiCut] = 1.0

    if rgb is True:
        rgbImg = numpy.zeros((output.shape[0], output.shape[1], 3),
                             dtype=float)

        # Make RGB gray scale
        rgbImg[data_i[0], data_i[1], 0] = output[data_i]
        rgbImg[data_i[0], data_i[1], 1] = output[data_i]
        rgbImg[data_i[0], data_i[1], 2] = output[data_i]

        # Add in lows in Blue and highs in Red
        # lows are set to 0.0 and therefore wont show up.
        # to make low end visible uncomment:
        #output[lowCut] = 1.0
        rgbImg[lowCut[0], lowCut[1], 2] = output[lowCut]
        rgbImg[hiCut[0], hiCut[1], 0] = output[hiCut]

        # Write out image
        if fname != "":
            imagetools.imwrite(
                rgbImg,
                fname + "_RGB_" + (str(nonlin) + '_' + str(shift) + '_' +
                                   str(minCut) + '_' + str(maxCut)) + ".png")

        print "Leaving asinhScale.........................RGB"
        return numpy.array(rgbImg, copy=True)
    else:
        print "out min/max", output.min(), output.max()
        # Write out image
        if fname != "":
            imagetools.imwrite(
                output,
                fname + "_" + (str(nonlin) + '_' + str(shift) + '_' +
                               str(minCut) + '_' + str(maxCut)) + ".png")
        print "Leaving asinhScale.........................GRAY"
        return numpy.array(output, copy=True)