Image-Contrast-Enhancement icon indicating copy to clipboard operation
Image-Contrast-Enhancement copied to clipboard

File "<ipython-input-18-8ca944b6a0f0>", line 120 isBad = t_our < 0.5 ^ SyntaxError: invalid syntax

Open ADITYASHAH-IITP opened this issue 3 years ago • 0 comments

import numpy as np import matplotlib.pyplot as plt import imageio import scipy, scipy.misc, scipy.signal import cv2 import sys

def computeTextureWeights(fin, sigma, sharpness): dt0_v = np.vstack((np.diff(fin, n=1, axis=0), fin[0,:]-fin[-1,:])) dt0_h = np.vstack((np.diff(fin, n=1, axis=1).conj().T, fin[:,0].conj().T-fin[:,-1].conj().T)).conj().T

gauker_h = scipy.signal.convolve2d(dt0_h, np.ones((1,sigma)), mode='same')
gauker_v = scipy.signal.convolve2d(dt0_v, np.ones((sigma,1)), mode='same')

W_h = 1/(np.abs(gauker_h)*np.abs(dt0_h)+sharpness)
W_v = 1/(np.abs(gauker_v)*np.abs(dt0_v)+sharpness)

return  W_h, W_v

def solveLinearEquation(IN, wx, wy, lamda): [r, c] = IN.shape k = r * c dx = -lamda * wx.flatten('F') dy = -lamda * wy.flatten('F') tempx = np.roll(wx, 1, axis=1) tempy = np.roll(wy, 1, axis=0) dxa = -lamda *tempx.flatten('F') dya = -lamda *tempy.flatten('F') tmp = wx[:,-1] tempx = np.concatenate((tmp[:,None], np.zeros((r,c-1))), axis=1) tmp = wy[-1,:] tempy = np.concatenate((tmp[None,:], np.zeros((r-1,c))), axis=0) dxd1 = -lamda * tempx.flatten('F') dyd1 = -lamda * tempy.flatten('F')

wx[:,-1] = 0
wy[-1,:] = 0
dxd2 = -lamda * wx.flatten('F')
dyd2 = -lamda * wy.flatten('F')

Ax = scipy.sparse.spdiags(np.concatenate((dxd1[:,None], dxd2[:,None]), axis=1).T, np.array([-k+r,-r]), k, k)
Ay = scipy.sparse.spdiags(np.concatenate((dyd1[None,:], dyd2[None,:]), axis=0), np.array([-r+1,-1]), k, k)
D = 1 - ( dx + dy + dxa + dya)
A = ((Ax+Ay) + (Ax+Ay).conj().T + scipy.sparse.spdiags(D, 0, k, k)).T

tin = IN[:,:]
tout = scipy.sparse.linalg.spsolve(A, tin.flatten('F'))
OUT = np.reshape(tout, (r, c), order='F')

return OUT

def tsmooth(img, lamda=0.01, sigma=3.0, sharpness=0.001): I = cv2.normalize(img.astype('float64'), None, 0.0, 1.0, cv2.NORM_MINMAX) x = np.copy(I) wx, wy = computeTextureWeights(x, sigma, sharpness) S = solveLinearEquation(I, wx, wy, lamda) return S

def rgb2gm(I): if (I.shape[2] == 3): I = cv2.normalize(I.astype('float64'), None, 0.0, 1.0, cv2.NORM_MINMAX) I = np.abs((I[:,:,0]*I[:,:,1]*I[:,:,2]))**(1/3)

return I

def applyK(I, k, a=-0.3293, b=1.1258): f = lambda x: np.exp((1-xa)*b) beta = f(k) gamma = ka J = (I**gamma)*beta return J

def entropy(X): tmp = X * 255 tmp[tmp > 255] = 255 tmp[tmp<0] = 0 tmp = tmp.astype(np.uint8) _, counts = np.unique(tmp, return_counts=True) pk = np.asarray(counts) pk = 1.0*pk / np.sum(pk, axis=0) S = -np.sum(pk * np.log2(pk), axis=0) return S

def maxEntropyEnhance(I, isBad, a=-0.3293, b=1.1258): # Esatimate k tmp = cv2.resize(I, (50,50), interpolation=cv2.INTER_AREA) tmp[tmp<0] = 0 tmp = tmp.real Y = rgb2gm(tmp)

isBad = isBad * 1
isBad = scipy.misc.imresize(isBad, (50,50), interp='bicubic', mode='F')
isBad[isBad<0.5] = 0
isBad[isBad>=0.5] = 1
Y = Y[isBad==1]

if Y.size == 0:
   J = I
   return J

f = lambda k: -entropy(applyK(Y, k))
opt_k = scipy.optimize.fminbound(f, 1, 7)

# Apply k
J = applyK(I, opt_k, a, b) - 0.01
return J

def Ying_2017_CAIP(img, mu=0.5, a=-0.3293, b=1.1258): lamda = 0.5 sigma = 5 I = cv2.normalize(img.astype('float64'), None, 0.0, 1.0, cv2.NORM_MINMAX)

# Weight matrix estimation
t_b = np.max(I, axis=2)
t_our = cv2.resize(tsmooth(np.array(Image.fromarray(t_b, mode="F").resize((int(0.5 * t_b.shape[0]), int(t_b.shape[1] * 0.5)),resample=PIL.Image.BICUBIC), lamda, sigma), (t_b.shape[1], t_b.shape[0]), interpolation=cv2.INTER_AREA)
 
# Apply camera model with k(exposure ratio)
isBad = t_our < 0.5
J = maxEntropyEnhance(I, isBad)

# W: Weight Matrix
t = np.zeros((t_our.shape[0], t_our.shape[1], I.shape[2]))
for i in range(I.shape[2]):
    t[:,:,i] = t_our
W = t**mu

I2 = I*W
J2 = J*(1-W)

result = I2 + J2
result = result * 255
result[result > 255] = 255
result[result<0] = 0
return result.astype(np.uint8)

def main(): img_name = sys.argv[1] img = imageio.imread('02.jpg') result = Ying_2017_CAIP(img) plt.imshow(result) plt.show()

if name == 'main': main()

its not working,first there was some problem with weight matrix estimation because of some module were removed from it,so I find another way ,but its still not working

ADITYASHAH-IITP avatar Oct 30 '20 04:10 ADITYASHAH-IITP