From d1875172687fc854df35fa9bfc6ac07a148d7f18 Mon Sep 17 00:00:00 2001 From: Daniil Kazantsev Date: Sat, 12 May 2018 19:03:26 +0100 Subject: fixed objective2 --- Wrappers/Python/ccpi/plugins/regularisers.py | 9 +++------ Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py | 18 +++++++----------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/Wrappers/Python/ccpi/plugins/regularisers.py b/Wrappers/Python/ccpi/plugins/regularisers.py index 9f4d3fc..46464a9 100644 --- a/Wrappers/Python/ccpi/plugins/regularisers.py +++ b/Wrappers/Python/ccpi/plugins/regularisers.py @@ -34,9 +34,8 @@ class _ROF_TV_(Operator): self.device = device # string for 'cpu' or 'gpu' def __call__(self,x): # evaluate objective function of TV gradient - # typeEnergy is either 1 (LS + TV for denoising) or 2 (just TV fidelity) EnergyValTV = TV_ENERGY(np.asarray(x.as_array(), dtype=np.float32), np.asarray(x.as_array(), dtype=np.float32), self.lambdaReg, 2) - return EnergyValTV + return 0.5*EnergyValTV[0] def prox(self,x,Lipshitz): pars = {'algorithm' : ROF_TV, \ 'input' : np.asarray(x.as_array(), dtype=np.float32),\ @@ -62,9 +61,8 @@ class _FGP_TV_(Operator): self.device = device # string for 'cpu' or 'gpu' def __call__(self,x): # evaluate objective function of TV gradient - # typeEnergy is either 1 (LS + TV for denoising) or 2 (just TV fidelity) EnergyValTV = TV_ENERGY(np.asarray(x.as_array(), dtype=np.float32), np.asarray(x.as_array(), dtype=np.float32), self.lambdaReg, 2) - return EnergyValTV + return 0.5*EnergyValTV[0] def prox(self,x,Lipshitz): pars = {'algorithm' : FGP_TV, \ 'input' : np.asarray(x.as_array(), dtype=np.float32),\ @@ -96,9 +94,8 @@ class _SB_TV_(Operator): self.device = device # string for 'cpu' or 'gpu' def __call__(self,x): # evaluate objective function of TV gradient - # typeEnergy is either 1 (LS + TV for denoising) or 2 (just TV fidelity) EnergyValTV = TV_ENERGY(np.asarray(x.as_array(), dtype=np.float32), np.asarray(x.as_array(), dtype=np.float32), self.lambdaReg, 2) - return EnergyValTV + return 0.5*EnergyValTV[0] def prox(self,x,Lipshitz): pars = {'algorithm' : SB_TV, \ 'input' : np.asarray(x.as_array(), dtype=np.float32),\ diff --git a/Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py b/Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py index 0d57e5e..2bf1286 100644 --- a/Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py +++ b/Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py @@ -75,11 +75,13 @@ plt.title('CVX TV with objective equal to {:.2f}'.format(objectivetv_denoise.va plt.show() print(objectivetv_denoise.value) -#%% THen FBPD - +#%% # Data fidelity term f_denoise = Norm2sq(I,y,c=0.5) +#%% + +#%% THen FBPD # Initial guess x_init_denoise = ImageData(np.zeros((N,N))) @@ -112,9 +114,7 @@ xtv_rof = g_rof.prox(y,1.0) print("CCPi-RGL TV ROF:") plt.figure() plt.imshow(xtv_rof.as_array()) -valObjRof = g_rof(xtv_rof) -data_energy = 0.5*np.sum(np.power((xtv_rof.as_array() - y.array),2)) -EnergytotalROF = data_energy + 0.5*valObjRof[0] +EnergytotalROF = f_denoise(xtv_rof) + g_rof(xtv_rof) plt.title('ROF TV prox with objective equal to {:.2f}'.format(EnergytotalROF)) plt.show() print(EnergytotalROF) @@ -127,9 +127,7 @@ xtv_fgp = g_fgp.prox(y,1.0) print("CCPi-RGL TV FGP:") plt.figure() plt.imshow(xtv_fgp.as_array()) -valObjFGP = g_fgp(xtv_fgp) -data_energy = 0.5*np.sum(np.power((xtv_fgp.as_array() - y.array),2)) -EnergytotalFGP = data_energy + 0.5*valObjFGP[0] +EnergytotalFGP = f_denoise(xtv_fgp) + g_fgp(xtv_fgp) plt.title('FGP TV prox with objective equal to {:.2f}'.format(EnergytotalFGP)) plt.show() print(EnergytotalFGP) @@ -141,9 +139,7 @@ xtv_sb = g_sb.prox(y,1.0) print("CCPi-RGL TV SB:") plt.figure() plt.imshow(xtv_sb.as_array()) -valObjSB = g_sb(xtv_sb) -data_energy = 0.5*np.sum(np.power((xtv_sb.as_array() - y.array),2)) -EnergytotalSB = data_energy + 0.5*valObjSB[0] +EnergytotalSB = f_denoise(xtv_sb) + g_fgp(xtv_sb) plt.title('SB TV prox with objective equal to {:.2f}'.format(EnergytotalSB)) plt.show() print(EnergytotalSB) -- cgit v1.2.3