Exemplo n.º 1
0
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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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