summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniil Kazantsev <dkazanc@hotmail.com>2018-05-11 15:42:35 +0100
committerDaniil Kazantsev <dkazanc@hotmail.com>2018-05-11 15:42:35 +0100
commitcfd675c4dcc9ca090e6401f70c68bdc34da004db (patch)
treedba4ed6ea4cfb31161a2e6931e86c159281a3646
parent0dd1cadcfead9a2a5f225e1500c97cc00a8068d6 (diff)
downloadframework-plugins-cfd675c4dcc9ca090e6401f70c68bdc34da004db.tar.gz
framework-plugins-cfd675c4dcc9ca090e6401f70c68bdc34da004db.tar.bz2
framework-plugins-cfd675c4dcc9ca090e6401f70c68bdc34da004db.tar.xz
framework-plugins-cfd675c4dcc9ca090e6401f70c68bdc34da004db.zip
further corrections, SB-TV added
-rw-r--r--Wrappers/Python/ccpi/plugins/regularisers.py12
-rw-r--r--Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py35
2 files changed, 31 insertions, 16 deletions
diff --git a/Wrappers/Python/ccpi/plugins/regularisers.py b/Wrappers/Python/ccpi/plugins/regularisers.py
index 6d865cc..9f4d3fc 100644
--- a/Wrappers/Python/ccpi/plugins/regularisers.py
+++ b/Wrappers/Python/ccpi/plugins/regularisers.py
@@ -32,10 +32,10 @@ class _ROF_TV_(Operator):
self.iterationsTV = iterationsTV
self.time_marchstep = time_marchstep
self.device = device # string for 'cpu' or 'gpu'
- def __call__(self,x,x1,typeEnergy):
+ 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(x1.as_array(), dtype=np.float32), self.lambdaReg, typeEnergy)
+ EnergyValTV = TV_ENERGY(np.asarray(x.as_array(), dtype=np.float32), np.asarray(x.as_array(), dtype=np.float32), self.lambdaReg, 2)
return EnergyValTV
def prox(self,x,Lipshitz):
pars = {'algorithm' : ROF_TV, \
@@ -60,10 +60,10 @@ class _FGP_TV_(Operator):
self.nonnegativity = nonnegativity
self.printing = printing
self.device = device # string for 'cpu' or 'gpu'
- def __call__(self,x,x1,typeEnergy):
+ 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(x1.as_array(), dtype=np.float32), self.lambdaReg, typeEnergy)
+ EnergyValTV = TV_ENERGY(np.asarray(x.as_array(), dtype=np.float32), np.asarray(x.as_array(), dtype=np.float32), self.lambdaReg, 2)
return EnergyValTV
def prox(self,x,Lipshitz):
pars = {'algorithm' : FGP_TV, \
@@ -94,10 +94,10 @@ class _SB_TV_(Operator):
self.methodTV = methodTV
self.printing = printing
self.device = device # string for 'cpu' or 'gpu'
- def __call__(self,x,typeEnergy):
+ 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, typeEnergy)
+ EnergyValTV = TV_ENERGY(np.asarray(x.as_array(), dtype=np.float32), np.asarray(x.as_array(), dtype=np.float32), self.lambdaReg, 2)
return EnergyValTV
def prox(self,x,Lipshitz):
pars = {'algorithm' : SB_TV, \
diff --git a/Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py b/Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py
index dd9044e..07f4090 100644
--- a/Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py
+++ b/Wrappers/Python/wip/demo_compare_RGLTK_TV_denoising.py
@@ -5,7 +5,7 @@ from ccpi.optimisation.funcs import Norm2sq, ZeroFun, Norm1, TV2D, Identity
from ccpi.optimisation.ops import LinearOperatorMatrix
-from ccpi.plugins.regularisers import _ROF_TV_, _FGP_TV_
+from ccpi.plugins.regularisers import _ROF_TV_, _FGP_TV_, _SB_TV_
import numpy as np
import matplotlib.pyplot as plt
@@ -72,12 +72,12 @@ if use_cvxpy:
# print(xtv_denoise.value)
# print(objectivetv_denoise.value)
+plt.figure()
plt.imshow(xtv_denoise.value)
-plt.title('CVX TV')
+plt.title('CVX TV with objective equal to {:.2f}'.format(objectivetv_denoise.value))
plt.show()
print(objectivetv_denoise.value)
-
#%% THen FBPD
# Data fidelity term
@@ -97,7 +97,7 @@ x_fbpdtv_denoise, itfbpdtv_denoise, timingfbpdtv_denoise, criterfbpdtv_denoise =
print("CVXPY least squares plus TV solution and objective value:")
plt.figure()
plt.imshow(x_fbpdtv_denoise.as_array())
-plt.title('FBPD TV')
+plt.title('FBPD TV with objective equal to {:.2f}'.format(criterfbpdtv_denoise[-1]))
plt.show()
print(criterfbpdtv_denoise[-1])
@@ -108,30 +108,45 @@ plt.loglog(criterfbpdtv_denoise, label='FBPD TV')
plt.show()
#%% FISTA with ROF-TV regularisation
-g_rof = _ROF_TV_(lambdaReg = lam_tv,iterationsTV=5000,tolerance=0,time_marchstep=0.001,device='cpu')
+g_rof = _ROF_TV_(lambdaReg = lam_tv,iterationsTV=5000,tolerance=0,time_marchstep=0.0009,device='cpu')
xtv_rof = g_rof.prox(y,1.0)
print("CCPi-RGL TV ROF:")
plt.figure()
plt.imshow(xtv_rof.as_array())
-plt.title('ROF TV prox')
+valObjRof = g_rof(xtv_rof)
+plt.title('ROF TV prox with objective equal to {:.2f}'.format(valObjRof[0]))
plt.show()
-print(g_rof(xtv_rof,y,typeEnergy=1))
+print(valObjRof[0])
#%% FISTA with FGP-TV regularisation
-g_fgp = _FGP_TV_(lambdaReg = lam_tv,iterationsTV=5000,tolerance=1e-7,methodTV=0,nonnegativity=0,printing=0,device='cpu')
+g_fgp = _FGP_TV_(lambdaReg = lam_tv,iterationsTV=5000,tolerance=0,methodTV=0,nonnegativity=0,printing=0,device='cpu')
xtv_fgp = g_fgp.prox(y,1.0)
print("CCPi-RGL TV FGP:")
plt.figure()
plt.imshow(xtv_fgp.as_array())
-plt.title('FGP TV prox')
+valObjFGP = g_fgp(xtv_fgp)
+plt.title('FGP TV prox with objective equal to {:.2f}'.format(valObjFGP[0]))
plt.show()
-print(g_fgp(xtv_fgp,y,typeEnergy=1))
+print(valObjFGP[0])
+#%% Split-Bregman-TV regularisation
+g_sb = _SB_TV_(lambdaReg = lam_tv,iterationsTV=150,tolerance=0,methodTV=0,printing=0,device='cpu')
+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)
+plt.title('SB TV prox with objective equal to {:.2f}'.format(valObjSB[0]))
+plt.show()
+print(valObjSB[0])
#%%
+
+
# Compare all reconstruction
clims = (-0.2,1.2)
dlims = (-0.2,0.2)