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)
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)