def toneMap(im, targetBase=100, detailAmp=1, useBila=False): (lum, chrom) = lumiChromi(im) # find smallest non-zero value smallestValue = np.min(lum[np.nonzero(lum)]) # set zero values to smallest value lum[lum == 0] = smallestValue # change lum to log domain lumLogged = np.log10(lum) # compute the base sigmaS = max(np.shape(im)[0], np.shape(im)[1]) / 50.0 if useBila: sigmaR = 0.4 base = bilateral_grid(lumLogged, sigmaS, sigmaR) else: sigma = [sigmaS, sigmaS, 0] base = scipy.ndimage.filters.gaussian_filter(lumLogged, sigma) # compute the detail detail = lumLogged - base # compute scale factor largeRange = np.max(base) - np.min(base) k = np.log10(targetBase) / largeRange # compute log output outLog = detailAmp * detail + k * (base - np.max(base)) # Convert back to normal image return 10**outLog * chrom
def toneMap(im, targetBase=100, detailAmp=1, useBila=False): imL, imC = lumiChromi(im) imL[imL == 0] = np.min(imL[imL.nonzero()]) logimL = np.log10(imL) domainSigma = max(im.shape[0], im.shape[1]) / 50.0 if useBila: rangeSigma = 0.4 largeScale = bilagrid.bilateral_grid(logimL, domainSigma, rangeSigma) else: largeScale = scipy.ndimage.filters.gaussian_filter(logimL, [domainSigma, domainSigma, 0]) detail = logimL - largeScale k = np.log10(targetBase) / (np.max(largeScale) - np.min(largeScale)) logOut = detailAmp * detail + k * (largeScale - np.max(largeScale)) return (10 ** logOut) * imC
def toneMap(im, targetBase=100, detailAmp=1, useBila=False): img = im.copy() #clip zeros to smallest val img[img == 0] = np.inf small = np.min(img) img[img == np.inf] = small #lumi-chromi (imL, imC) = lumiChromi(im) imL_orig = imL #Determine smallest non-zero val imL[imL == 0] = np.inf epsilon = np.min(imL) #Compute log imL_orig += epsilon imL_log = np.log10( imL_orig ) #Determine standard dev dim = np.max([ im.shape[0], im.shape[1] ]) sdev = dim/float(50) #Base (Large) Log if( useBila ): base_log = bl.bilateral_grid( imL_log, sdev, 0.4 ) else: base_log = sp.ndimage.filters.gaussian_filter( imL_log, [sdev, sdev, 0] ) #Detail Log detail_log = imL_log - base_log #Factors baseRange = np.max( base_log ) - np.min( base_log ) k = np.log10(targetBase)/baseRange #Output outLog = detailAmp*detail_log + k*(base_log - np.max( base_log )) outIntensity = np.power(10, outLog) out = outIntensity * imC return out