This example compares the use of parcbpdn.ParConvBPDN with cbpdn.ConvBPDNMaskDcpl for convolutional sparse coding with a spatial mask [29]. The example problem is inpainting of randomly distributed corruption of a greyscale image.
from __future__ import print_function
from builtins import input
from builtins import range
import pyfftw # See https://github.com/pyFFTW/pyFFTW/issues/40
import numpy as np
from sporco.admm import tvl2
from sporco.admm import cbpdn
from sporco.admm import parcbpdn
from sporco import util
from sporco import metric
from sporco import plot
plot.config_notebook_plotting()
Load a reference image.
img = util.ExampleImages().image('monarch.png', zoom=0.25, scaled=True,
gray=True, idxexp=np.s_[:, 160:672])
Create random mask and apply to reference image to obtain test image. (The call to numpy.random.seed
ensures that the pseudo-random noise is reproducible.)
t = 0.5
np.random.seed(12345)
msk = np.random.randn(*(img.shape))
msk[np.abs(msk) > t] = 1
msk[np.abs(msk) < t] = 0
imgw = msk * img
Define pad and crop functions.
pn = 8
spad = lambda x: np.pad(x, pn, mode='symmetric')
zpad = lambda x: np.pad(x, pn, mode='constant')
crop = lambda x: x[pn:-pn, pn:-pn]
Construct padded mask and test image.
mskp = zpad(msk)
imgwp = spad(imgw)
$\ell_2$-TV denoising with a spatial mask as a non-linear lowpass filter. The highpass component is the difference between the test image and the lowpass component, multiplied by the mask for faster convergence of the convolutional sparse coding (see [39]).
lmbda = 0.05
opt = tvl2.TVL2Denoise.Options({'Verbose': False, 'MaxMainIter': 200,
'DFidWeight': mskp, 'gEvalY': False,
'AutoRho': {'Enabled': True}})
b = tvl2.TVL2Denoise(imgwp, lmbda, opt)
sl = b.solve()
sh = mskp * (imgwp - sl)
Load dictionary.
D = util.convdicts()['G:12x12x216']
plot.imview(util.tiledict(D), fgsz=(7, 7))
lmbda = 2e-2
The RelStopTol was chosen for the two different methods to stop with similar functional values
Initialise and run serial CSC solver using masked decoupling [19].
opt = cbpdn.ConvBPDNMaskDcpl.Options({'Verbose': True, 'MaxMainIter': 200,
'HighMemSolve': True, 'RelStopTol': 5e-2,
'AuxVarObj': False, 'RelaxParam': 1.8,
'rho': 5e1*lmbda + 1e-1, 'AutoRho':
{'Enabled': False, 'StdResiduals': False}})
b = cbpdn.ConvBPDNMaskDcpl(D, sh, lmbda, mskp, opt=opt)
X = b.solve()
Itn Fnc DFid Regℓ1 r s ------------------------------------------------------ 0 1.21e+01 5.53e-03 6.03e+02 1.06e-01 9.64e-01 1 1.10e+01 3.80e-02 5.48e+02 9.76e-02 1.16e+00 2 1.02e+01 8.11e-02 5.04e+02 9.16e-02 1.16e+00 3 9.74e+00 1.17e-01 4.81e+02 8.80e-02 1.05e+00 4 9.63e+00 1.40e-01 4.74e+02 8.58e-02 8.99e-01 5 9.64e+00 1.53e-01 4.74e+02 8.36e-02 7.59e-01 6 9.59e+00 1.61e-01 4.71e+02 7.97e-02 6.52e-01 7 9.47e+00 1.68e-01 4.65e+02 7.60e-02 5.75e-01 8 9.35e+00 1.76e-01 4.59e+02 7.27e-02 5.15e-01 9 9.28e+00 1.83e-01 4.55e+02 6.98e-02 4.61e-01 10 9.28e+00 1.92e-01 4.54e+02 6.73e-02 4.12e-01 11 9.25e+00 2.01e-01 4.53e+02 6.48e-02 3.71e-01 12 9.22e+00 2.09e-01 4.51e+02 6.24e-02 3.38e-01 13 9.18e+00 2.16e-01 4.48e+02 6.02e-02 3.12e-01 14 9.14e+00 2.21e-01 4.46e+02 5.81e-02 2.93e-01 15 9.07e+00 2.23e-01 4.42e+02 5.61e-02 2.80e-01 16 8.97e+00 2.24e-01 4.38e+02 5.43e-02 2.72e-01 17 8.85e+00 2.24e-01 4.32e+02 5.25e-02 2.67e-01 18 8.70e+00 2.24e-01 4.24e+02 5.09e-02 2.63e-01 19 8.58e+00 2.24e-01 4.18e+02 4.95e-02 2.58e-01 20 8.46e+00 2.26e-01 4.12e+02 4.81e-02 2.52e-01 21 8.33e+00 2.28e-01 4.05e+02 4.69e-02 2.46e-01 22 8.22e+00 2.32e-01 3.99e+02 4.57e-02 2.40e-01 23 8.12e+00 2.35e-01 3.94e+02 4.47e-02 2.35e-01 24 8.03e+00 2.39e-01 3.90e+02 4.36e-02 2.30e-01 25 7.96e+00 2.42e-01 3.86e+02 4.28e-02 2.25e-01 26 7.90e+00 2.45e-01 3.83e+02 4.19e-02 2.21e-01 27 7.83e+00 2.48e-01 3.79e+02 4.10e-02 2.18e-01 28 7.75e+00 2.51e-01 3.75e+02 4.02e-02 2.15e-01 29 7.68e+00 2.54e-01 3.71e+02 3.95e-02 2.11e-01 30 7.60e+00 2.57e-01 3.67e+02 3.87e-02 2.08e-01 31 7.51e+00 2.60e-01 3.63e+02 3.80e-02 2.04e-01 32 7.42e+00 2.63e-01 3.58e+02 3.73e-02 2.00e-01 33 7.32e+00 2.66e-01 3.53e+02 3.66e-02 1.96e-01 34 7.23e+00 2.70e-01 3.48e+02 3.59e-02 1.91e-01 35 7.15e+00 2.73e-01 3.44e+02 3.53e-02 1.87e-01 36 7.08e+00 2.76e-01 3.40e+02 3.46e-02 1.82e-01 37 7.02e+00 2.79e-01 3.37e+02 3.40e-02 1.78e-01 38 6.98e+00 2.82e-01 3.35e+02 3.35e-02 1.73e-01 39 6.95e+00 2.84e-01 3.33e+02 3.29e-02 1.69e-01 40 6.91e+00 2.86e-01 3.31e+02 3.24e-02 1.65e-01 41 6.87e+00 2.88e-01 3.29e+02 3.18e-02 1.62e-01 42 6.83e+00 2.90e-01 3.27e+02 3.13e-02 1.59e-01 43 6.79e+00 2.91e-01 3.25e+02 3.08e-02 1.56e-01 44 6.76e+00 2.93e-01 3.23e+02 3.03e-02 1.53e-01 45 6.72e+00 2.94e-01 3.21e+02 2.99e-02 1.50e-01 46 6.68e+00 2.95e-01 3.19e+02 2.94e-02 1.48e-01 47 6.63e+00 2.96e-01 3.17e+02 2.90e-02 1.46e-01 48 6.57e+00 2.97e-01 3.14e+02 2.85e-02 1.44e-01 49 6.51e+00 2.98e-01 3.11e+02 2.81e-02 1.42e-01 50 6.45e+00 3.00e-01 3.08e+02 2.77e-02 1.41e-01 51 6.40e+00 3.01e-01 3.05e+02 2.73e-02 1.39e-01 52 6.34e+00 3.03e-01 3.02e+02 2.69e-02 1.38e-01 53 6.30e+00 3.04e-01 3.00e+02 2.65e-02 1.37e-01 54 6.25e+00 3.06e-01 2.97e+02 2.61e-02 1.36e-01 55 6.20e+00 3.07e-01 2.95e+02 2.58e-02 1.34e-01 56 6.16e+00 3.09e-01 2.93e+02 2.54e-02 1.33e-01 57 6.12e+00 3.10e-01 2.90e+02 2.51e-02 1.32e-01 58 6.08e+00 3.12e-01 2.88e+02 2.48e-02 1.30e-01 59 6.04e+00 3.13e-01 2.86e+02 2.45e-02 1.29e-01 60 6.01e+00 3.14e-01 2.85e+02 2.42e-02 1.28e-01 61 5.99e+00 3.16e-01 2.84e+02 2.39e-02 1.26e-01 62 5.96e+00 3.17e-01 2.82e+02 2.36e-02 1.24e-01 63 5.94e+00 3.18e-01 2.81e+02 2.33e-02 1.22e-01 64 5.91e+00 3.19e-01 2.79e+02 2.30e-02 1.21e-01 65 5.88e+00 3.20e-01 2.78e+02 2.27e-02 1.19e-01 66 5.85e+00 3.21e-01 2.77e+02 2.24e-02 1.17e-01 67 5.83e+00 3.21e-01 2.75e+02 2.22e-02 1.16e-01 68 5.81e+00 3.22e-01 2.74e+02 2.19e-02 1.14e-01 69 5.79e+00 3.23e-01 2.73e+02 2.16e-02 1.13e-01 70 5.77e+00 3.23e-01 2.72e+02 2.14e-02 1.11e-01 71 5.74e+00 3.23e-01 2.71e+02 2.11e-02 1.10e-01 72 5.72e+00 3.24e-01 2.70e+02 2.09e-02 1.09e-01 73 5.69e+00 3.24e-01 2.68e+02 2.06e-02 1.08e-01 74 5.66e+00 3.24e-01 2.67e+02 2.04e-02 1.07e-01 75 5.64e+00 3.25e-01 2.66e+02 2.02e-02 1.06e-01 76 5.62e+00 3.25e-01 2.65e+02 2.00e-02 1.05e-01 77 5.59e+00 3.26e-01 2.63e+02 1.98e-02 1.03e-01 78 5.57e+00 3.26e-01 2.62e+02 1.96e-02 1.02e-01 79 5.55e+00 3.27e-01 2.61e+02 1.94e-02 1.01e-01 80 5.53e+00 3.27e-01 2.60e+02 1.92e-02 9.93e-02 81 5.51e+00 3.28e-01 2.59e+02 1.90e-02 9.80e-02 82 5.48e+00 3.28e-01 2.57e+02 1.88e-02 9.70e-02 83 5.45e+00 3.29e-01 2.56e+02 1.87e-02 9.60e-02 84 5.42e+00 3.30e-01 2.54e+02 1.85e-02 9.52e-02 85 5.39e+00 3.30e-01 2.53e+02 1.83e-02 9.45e-02 86 5.36e+00 3.31e-01 2.52e+02 1.81e-02 9.39e-02 87 5.34e+00 3.32e-01 2.50e+02 1.80e-02 9.34e-02 88 5.32e+00 3.32e-01 2.49e+02 1.78e-02 9.28e-02 89 5.30e+00 3.33e-01 2.48e+02 1.77e-02 9.23e-02 90 5.28e+00 3.33e-01 2.47e+02 1.75e-02 9.17e-02 91 5.26e+00 3.34e-01 2.46e+02 1.74e-02 9.11e-02 92 5.25e+00 3.34e-01 2.46e+02 1.72e-02 9.04e-02 93 5.23e+00 3.35e-01 2.45e+02 1.71e-02 8.97e-02 94 5.22e+00 3.36e-01 2.44e+02 1.69e-02 8.90e-02 95 5.20e+00 3.36e-01 2.43e+02 1.68e-02 8.82e-02 96 5.19e+00 3.37e-01 2.43e+02 1.67e-02 8.74e-02 97 5.17e+00 3.37e-01 2.42e+02 1.65e-02 8.65e-02 98 5.16e+00 3.38e-01 2.41e+02 1.64e-02 8.57e-02 99 5.14e+00 3.38e-01 2.40e+02 1.63e-02 8.49e-02 100 5.12e+00 3.39e-01 2.39e+02 1.62e-02 8.42e-02 101 5.11e+00 3.39e-01 2.38e+02 1.60e-02 8.35e-02 102 5.09e+00 3.40e-01 2.37e+02 1.59e-02 8.29e-02 103 5.07e+00 3.40e-01 2.36e+02 1.58e-02 8.23e-02 104 5.05e+00 3.41e-01 2.35e+02 1.57e-02 8.17e-02 105 5.03e+00 3.42e-01 2.35e+02 1.55e-02 8.12e-02 106 5.01e+00 3.42e-01 2.34e+02 1.54e-02 8.06e-02 107 5.00e+00 3.43e-01 2.33e+02 1.53e-02 8.01e-02 108 4.98e+00 3.43e-01 2.32e+02 1.52e-02 7.96e-02 109 4.96e+00 3.43e-01 2.31e+02 1.50e-02 7.91e-02 110 4.95e+00 3.44e-01 2.30e+02 1.49e-02 7.86e-02 111 4.93e+00 3.44e-01 2.29e+02 1.48e-02 7.81e-02 112 4.92e+00 3.44e-01 2.29e+02 1.47e-02 7.76e-02 113 4.90e+00 3.45e-01 2.28e+02 1.46e-02 7.71e-02 114 4.89e+00 3.45e-01 2.27e+02 1.44e-02 7.66e-02 115 4.87e+00 3.45e-01 2.26e+02 1.43e-02 7.62e-02 116 4.86e+00 3.46e-01 2.26e+02 1.42e-02 7.57e-02 117 4.85e+00 3.46e-01 2.25e+02 1.41e-02 7.52e-02 118 4.83e+00 3.46e-01 2.24e+02 1.40e-02 7.48e-02 119 4.82e+00 3.46e-01 2.24e+02 1.39e-02 7.44e-02 120 4.80e+00 3.47e-01 2.23e+02 1.38e-02 7.39e-02 121 4.79e+00 3.47e-01 2.22e+02 1.37e-02 7.34e-02 122 4.78e+00 3.47e-01 2.22e+02 1.35e-02 7.28e-02 123 4.77e+00 3.47e-01 2.21e+02 1.35e-02 7.22e-02 124 4.77e+00 3.48e-01 2.21e+02 1.34e-02 7.15e-02 125 4.76e+00 3.48e-01 2.20e+02 1.33e-02 7.08e-02 126 4.75e+00 3.48e-01 2.20e+02 1.32e-02 7.01e-02 127 4.74e+00 3.48e-01 2.20e+02 1.31e-02 6.93e-02 128 4.73e+00 3.48e-01 2.19e+02 1.30e-02 6.86e-02 129 4.72e+00 3.49e-01 2.19e+02 1.29e-02 6.78e-02 130 4.71e+00 3.49e-01 2.18e+02 1.28e-02 6.72e-02 131 4.70e+00 3.49e-01 2.17e+02 1.27e-02 6.66e-02 132 4.69e+00 3.49e-01 2.17e+02 1.26e-02 6.61e-02 133 4.67e+00 3.49e-01 2.16e+02 1.26e-02 6.56e-02 134 4.66e+00 3.50e-01 2.16e+02 1.25e-02 6.52e-02 135 4.65e+00 3.50e-01 2.15e+02 1.24e-02 6.49e-02 136 4.63e+00 3.50e-01 2.14e+02 1.23e-02 6.47e-02 137 4.62e+00 3.50e-01 2.13e+02 1.22e-02 6.44e-02 138 4.60e+00 3.50e-01 2.13e+02 1.21e-02 6.42e-02 139 4.59e+00 3.51e-01 2.12e+02 1.20e-02 6.40e-02 140 4.57e+00 3.51e-01 2.11e+02 1.20e-02 6.37e-02 141 4.56e+00 3.51e-01 2.10e+02 1.19e-02 6.35e-02 142 4.55e+00 3.51e-01 2.10e+02 1.18e-02 6.32e-02 143 4.54e+00 3.52e-01 2.09e+02 1.17e-02 6.28e-02 144 4.53e+00 3.52e-01 2.09e+02 1.16e-02 6.24e-02 145 4.53e+00 3.52e-01 2.09e+02 1.16e-02 6.20e-02 146 4.53e+00 3.52e-01 2.09e+02 1.15e-02 6.15e-02 147 4.52e+00 3.53e-01 2.08e+02 1.14e-02 6.10e-02 148 4.52e+00 3.53e-01 2.08e+02 1.14e-02 6.05e-02 149 4.51e+00 3.53e-01 2.08e+02 1.13e-02 6.00e-02 150 4.51e+00 3.53e-01 2.08e+02 1.12e-02 5.95e-02 151 4.50e+00 3.53e-01 2.07e+02 1.12e-02 5.91e-02 152 4.49e+00 3.53e-01 2.07e+02 1.11e-02 5.88e-02 153 4.48e+00 3.53e-01 2.06e+02 1.10e-02 5.85e-02 154 4.46e+00 3.53e-01 2.05e+02 1.09e-02 5.83e-02 155 4.45e+00 3.53e-01 2.05e+02 1.09e-02 5.82e-02 156 4.44e+00 3.54e-01 2.04e+02 1.08e-02 5.81e-02 157 4.42e+00 3.54e-01 2.03e+02 1.07e-02 5.80e-02 158 4.41e+00 3.54e-01 2.03e+02 1.07e-02 5.80e-02 159 4.40e+00 3.54e-01 2.02e+02 1.06e-02 5.78e-02 160 4.39e+00 3.54e-01 2.02e+02 1.05e-02 5.77e-02 161 4.38e+00 3.55e-01 2.01e+02 1.05e-02 5.75e-02 162 4.37e+00 3.55e-01 2.01e+02 1.04e-02 5.73e-02 163 4.36e+00 3.55e-01 2.00e+02 1.04e-02 5.70e-02 164 4.36e+00 3.55e-01 2.00e+02 1.03e-02 5.67e-02 165 4.35e+00 3.55e-01 2.00e+02 1.02e-02 5.64e-02 166 4.34e+00 3.56e-01 1.99e+02 1.02e-02 5.61e-02 167 4.33e+00 3.56e-01 1.99e+02 1.01e-02 5.58e-02 168 4.32e+00 3.56e-01 1.98e+02 1.01e-02 5.55e-02 169 4.31e+00 3.56e-01 1.98e+02 1.00e-02 5.52e-02 170 4.31e+00 3.56e-01 1.98e+02 9.96e-03 5.50e-02 171 4.30e+00 3.57e-01 1.97e+02 9.90e-03 5.47e-02 172 4.29e+00 3.57e-01 1.97e+02 9.84e-03 5.45e-02 173 4.28e+00 3.57e-01 1.96e+02 9.79e-03 5.42e-02 174 4.27e+00 3.57e-01 1.96e+02 9.73e-03 5.40e-02 175 4.27e+00 3.57e-01 1.96e+02 9.68e-03 5.37e-02 176 4.26e+00 3.58e-01 1.95e+02 9.62e-03 5.34e-02 177 4.26e+00 3.58e-01 1.95e+02 9.57e-03 5.31e-02 178 4.25e+00 3.58e-01 1.95e+02 9.52e-03 5.28e-02 179 4.24e+00 3.58e-01 1.94e+02 9.47e-03 5.24e-02 180 4.24e+00 3.58e-01 1.94e+02 9.42e-03 5.21e-02 181 4.23e+00 3.58e-01 1.94e+02 9.37e-03 5.17e-02 182 4.23e+00 3.58e-01 1.94e+02 9.32e-03 5.13e-02 183 4.22e+00 3.59e-01 1.93e+02 9.27e-03 5.10e-02 184 4.22e+00 3.59e-01 1.93e+02 9.22e-03 5.06e-02 185 4.21e+00 3.59e-01 1.93e+02 9.17e-03 5.02e-02 186 4.21e+00 3.59e-01 1.92e+02 9.12e-03 4.99e-02 ------------------------------------------------------
Initialise and run parallel CSC solver using an ADMM dictionary partition [25].
opt_par = parcbpdn.ParConvBPDN.Options({'Verbose': True, 'MaxMainIter': 200,
'HighMemSolve': True, 'RelStopTol': 1e-2,
'AuxVarObj': False, 'RelaxParam': 1.8,
'rho': 5e1*lmbda + 1e-1, 'alpha': 1.5,
'AutoRho': {'Enabled': False,
'StdResiduals': False}})
b_par = parcbpdn.ParConvBPDN(D, sh, lmbda, mskp, opt=opt_par)
X_par = b_par.solve()
Itn Fnc DFid Regl1 r s ------------------------------------------------------ 0 4.07e+01 1.87e+01 1.10e+03 8.72e-01 8.72e-01 1 1.82e+01 1.26e+00 8.45e+02 7.68e-01 7.17e-01 2 2.87e+01 1.00e+01 9.31e+02 6.81e-01 5.74e-01 3 1.41e+01 4.37e-01 6.82e+02 6.26e-01 5.06e-01 4 2.14e+01 5.49e+00 7.95e+02 5.74e-01 4.55e-01 5 1.30e+01 7.07e-01 6.12e+02 5.43e-01 4.29e-01 6 1.70e+01 3.15e+00 6.94e+02 5.10e-01 4.20e-01 7 1.22e+01 8.26e-01 5.71e+02 4.89e-01 4.40e-01 8 1.41e+01 1.81e+00 6.14e+02 4.67e-01 4.75e-01 9 1.15e+01 7.00e-01 5.41e+02 4.51e-01 5.25e-01 10 1.22e+01 9.85e-01 5.58e+02 4.37e-01 5.66e-01 11 1.15e+01 6.11e-01 5.44e+02 4.26e-01 5.83e-01 12 1.19e+01 6.76e-01 5.64e+02 4.15e-01 5.70e-01 13 1.23e+01 7.04e-01 5.78e+02 4.04e-01 5.35e-01 14 1.24e+01 7.13e-01 5.85e+02 3.93e-01 4.91e-01 15 1.25e+01 8.32e-01 5.84e+02 3.81e-01 4.53e-01 16 1.21e+01 7.72e-01 5.68e+02 3.69e-01 4.30e-01 17 1.18e+01 8.04e-01 5.49e+02 3.56e-01 4.21e-01 18 1.12e+01 6.98e-01 5.24e+02 3.43e-01 4.20e-01 19 1.07e+01 6.63e-01 5.01e+02 3.30e-01 4.19e-01 20 1.02e+01 5.61e-01 4.81e+02 3.18e-01 4.15e-01 21 9.79e+00 5.16e-01 4.64e+02 3.06e-01 4.06e-01 22 9.46e+00 4.51e-01 4.51e+02 2.94e-01 3.94e-01 23 9.26e+00 4.26e-01 4.42e+02 2.84e-01 3.78e-01 24 9.08e+00 3.96e-01 4.34e+02 2.74e-01 3.59e-01 25 8.94e+00 3.91e-01 4.27e+02 2.65e-01 3.42e-01 26 8.81e+00 3.84e-01 4.21e+02 2.57e-01 3.27e-01 27 8.69e+00 3.90e-01 4.15e+02 2.50e-01 3.16e-01 28 8.59e+00 3.94e-01 4.10e+02 2.43e-01 3.08e-01 29 8.51e+00 4.07e-01 4.05e+02 2.37e-01 3.02e-01 30 8.45e+00 4.17e-01 4.01e+02 2.31e-01 2.96e-01 31 8.41e+00 4.33e-01 3.99e+02 2.26e-01 2.91e-01 32 8.40e+00 4.46e-01 3.98e+02 2.21e-01 2.85e-01 33 8.40e+00 4.62e-01 3.97e+02 2.16e-01 2.79e-01 34 8.39e+00 4.74e-01 3.96e+02 2.11e-01 2.72e-01 35 8.35e+00 4.86e-01 3.93e+02 2.07e-01 2.65e-01 36 8.30e+00 4.92e-01 3.90e+02 2.03e-01 2.58e-01 37 8.22e+00 4.96e-01 3.86e+02 1.98e-01 2.52e-01 38 8.11e+00 4.93e-01 3.81e+02 1.94e-01 2.47e-01 39 7.99e+00 4.88e-01 3.75e+02 1.90e-01 2.42e-01 40 7.86e+00 4.78e-01 3.69e+02 1.86e-01 2.39e-01 41 7.72e+00 4.66e-01 3.63e+02 1.82e-01 2.35e-01 42 7.57e+00 4.49e-01 3.56e+02 1.78e-01 2.31e-01 43 7.43e+00 4.31e-01 3.50e+02 1.74e-01 2.27e-01 44 7.29e+00 4.14e-01 3.44e+02 1.70e-01 2.22e-01 45 7.17e+00 3.99e-01 3.38e+02 1.67e-01 2.17e-01 46 7.05e+00 3.86e-01 3.33e+02 1.63e-01 2.12e-01 47 6.96e+00 3.75e-01 3.29e+02 1.60e-01 2.07e-01 48 6.87e+00 3.67e-01 3.25e+02 1.57e-01 2.02e-01 49 6.78e+00 3.60e-01 3.21e+02 1.53e-01 1.97e-01 50 6.69e+00 3.55e-01 3.17e+02 1.50e-01 1.92e-01 51 6.61e+00 3.50e-01 3.13e+02 1.48e-01 1.89e-01 52 6.55e+00 3.47e-01 3.10e+02 1.45e-01 1.85e-01 53 6.50e+00 3.45e-01 3.08e+02 1.42e-01 1.82e-01 54 6.44e+00 3.45e-01 3.05e+02 1.40e-01 1.79e-01 55 6.39e+00 3.45e-01 3.02e+02 1.37e-01 1.76e-01 56 6.35e+00 3.47e-01 3.00e+02 1.35e-01 1.74e-01 57 6.32e+00 3.49e-01 2.98e+02 1.33e-01 1.71e-01 58 6.29e+00 3.53e-01 2.97e+02 1.31e-01 1.69e-01 59 6.27e+00 3.58e-01 2.96e+02 1.29e-01 1.66e-01 60 6.24e+00 3.63e-01 2.94e+02 1.27e-01 1.63e-01 61 6.20e+00 3.68e-01 2.92e+02 1.25e-01 1.60e-01 62 6.17e+00 3.72e-01 2.90e+02 1.23e-01 1.58e-01 63 6.13e+00 3.77e-01 2.88e+02 1.21e-01 1.56e-01 64 6.10e+00 3.81e-01 2.86e+02 1.19e-01 1.53e-01 65 6.07e+00 3.84e-01 2.84e+02 1.17e-01 1.51e-01 66 6.03e+00 3.85e-01 2.82e+02 1.15e-01 1.48e-01 67 5.98e+00 3.86e-01 2.79e+02 1.13e-01 1.45e-01 68 5.92e+00 3.86e-01 2.77e+02 1.12e-01 1.43e-01 69 5.86e+00 3.85e-01 2.74e+02 1.10e-01 1.42e-01 70 5.80e+00 3.82e-01 2.71e+02 1.08e-01 1.40e-01 71 5.75e+00 3.79e-01 2.69e+02 1.07e-01 1.37e-01 72 5.70e+00 3.76e-01 2.66e+02 1.05e-01 1.35e-01 73 5.65e+00 3.73e-01 2.64e+02 1.03e-01 1.33e-01 74 5.60e+00 3.70e-01 2.62e+02 1.02e-01 1.31e-01 75 5.55e+00 3.67e-01 2.59e+02 1.00e-01 1.29e-01 76 5.50e+00 3.65e-01 2.57e+02 9.89e-02 1.27e-01 77 5.46e+00 3.63e-01 2.55e+02 9.74e-02 1.26e-01 78 5.42e+00 3.61e-01 2.53e+02 9.60e-02 1.24e-01 79 5.38e+00 3.60e-01 2.51e+02 9.47e-02 1.22e-01 80 5.35e+00 3.59e-01 2.49e+02 9.33e-02 1.21e-01 81 5.32e+00 3.59e-01 2.48e+02 9.20e-02 1.19e-01 82 5.29e+00 3.59e-01 2.47e+02 9.07e-02 1.17e-01 83 5.27e+00 3.59e-01 2.45e+02 8.95e-02 1.15e-01 84 5.24e+00 3.60e-01 2.44e+02 8.83e-02 1.14e-01 85 5.21e+00 3.60e-01 2.43e+02 8.71e-02 1.12e-01 86 5.19e+00 3.61e-01 2.41e+02 8.60e-02 1.11e-01 87 5.16e+00 3.63e-01 2.40e+02 8.48e-02 1.09e-01 88 5.14e+00 3.64e-01 2.39e+02 8.37e-02 1.08e-01 89 5.12e+00 3.65e-01 2.38e+02 8.26e-02 1.07e-01 90 5.10e+00 3.66e-01 2.37e+02 8.16e-02 1.05e-01 91 5.08e+00 3.67e-01 2.36e+02 8.05e-02 1.03e-01 92 5.05e+00 3.67e-01 2.34e+02 7.95e-02 1.02e-01 93 5.03e+00 3.68e-01 2.33e+02 7.85e-02 1.01e-01 94 5.00e+00 3.68e-01 2.32e+02 7.75e-02 9.93e-02 95 4.97e+00 3.68e-01 2.30e+02 7.66e-02 9.82e-02 96 4.94e+00 3.68e-01 2.29e+02 7.56e-02 9.71e-02 97 4.91e+00 3.68e-01 2.27e+02 7.47e-02 9.59e-02 98 4.89e+00 3.68e-01 2.26e+02 7.37e-02 9.46e-02 99 4.86e+00 3.68e-01 2.25e+02 7.28e-02 9.34e-02 100 4.83e+00 3.68e-01 2.23e+02 7.19e-02 9.24e-02 101 4.80e+00 3.68e-01 2.22e+02 7.11e-02 9.15e-02 102 4.78e+00 3.67e-01 2.21e+02 7.02e-02 9.05e-02 103 4.76e+00 3.68e-01 2.20e+02 6.94e-02 8.94e-02 104 4.74e+00 3.68e-01 2.19e+02 6.85e-02 8.82e-02 105 4.72e+00 3.68e-01 2.18e+02 6.77e-02 8.70e-02 106 4.70e+00 3.68e-01 2.17e+02 6.69e-02 8.58e-02 107 4.68e+00 3.68e-01 2.16e+02 6.61e-02 8.49e-02 108 4.66e+00 3.68e-01 2.14e+02 6.54e-02 8.40e-02 109 4.64e+00 3.68e-01 2.13e+02 6.46e-02 8.32e-02 110 4.62e+00 3.68e-01 2.13e+02 6.38e-02 8.23e-02 111 4.60e+00 3.68e-01 2.12e+02 6.31e-02 8.14e-02 112 4.58e+00 3.68e-01 2.11e+02 6.24e-02 8.05e-02 113 4.56e+00 3.68e-01 2.10e+02 6.17e-02 7.96e-02 114 4.55e+00 3.68e-01 2.09e+02 6.10e-02 7.86e-02 115 4.53e+00 3.68e-01 2.08e+02 6.03e-02 7.75e-02 116 4.52e+00 3.68e-01 2.07e+02 5.96e-02 7.65e-02 117 4.50e+00 3.68e-01 2.07e+02 5.89e-02 7.54e-02 118 4.48e+00 3.67e-01 2.06e+02 5.82e-02 7.45e-02 119 4.46e+00 3.67e-01 2.05e+02 5.76e-02 7.37e-02 120 4.43e+00 3.66e-01 2.03e+02 5.69e-02 7.30e-02 121 4.41e+00 3.66e-01 2.02e+02 5.63e-02 7.25e-02 122 4.39e+00 3.65e-01 2.01e+02 5.57e-02 7.20e-02 123 4.37e+00 3.64e-01 2.00e+02 5.50e-02 7.14e-02 124 4.36e+00 3.64e-01 2.00e+02 5.44e-02 7.04e-02 125 4.35e+00 3.63e-01 1.99e+02 5.38e-02 6.93e-02 126 4.33e+00 3.63e-01 1.99e+02 5.33e-02 6.81e-02 127 4.32e+00 3.62e-01 1.98e+02 5.27e-02 6.70e-02 128 4.30e+00 3.62e-01 1.97e+02 5.21e-02 6.62e-02 129 4.28e+00 3.62e-01 1.96e+02 5.15e-02 6.57e-02 130 4.25e+00 3.62e-01 1.95e+02 5.10e-02 6.54e-02 131 4.23e+00 3.62e-01 1.94e+02 5.05e-02 6.51e-02 132 4.22e+00 3.62e-01 1.93e+02 4.99e-02 6.47e-02 133 4.21e+00 3.62e-01 1.92e+02 4.94e-02 6.41e-02 134 4.20e+00 3.63e-01 1.92e+02 4.89e-02 6.34e-02 135 4.19e+00 3.63e-01 1.91e+02 4.84e-02 6.24e-02 136 4.18e+00 3.63e-01 1.91e+02 4.79e-02 6.14e-02 137 4.17e+00 3.64e-01 1.91e+02 4.74e-02 6.04e-02 ------------------------------------------------------
Report runtimes of different methods of solving the same problem.
print("ConvBPDNMaskDcpl solve time: %.2fs" % b.timer.elapsed('solve_wo_rsdl'))
print("ParConvBPDN solve time: %.2fs" % b_par.timer.elapsed('solve_wo_rsdl'))
print("ParConvBPDN was %.2f times faster than ConvBPDNMaskDcpl\n" %
(b.timer.elapsed('solve_wo_rsdl')/b_par.timer.elapsed('solve_wo_rsdl')))
ConvBPDNMaskDcpl solve time: 107.28s ParConvBPDN solve time: 17.43s ParConvBPDN was 6.15 times faster than ConvBPDNMaskDcpl
Reconstruct images from sparse representations.
imgr = crop(sl + b.reconstruct().squeeze())
imgr_par = crop(sl + b_par.reconstruct().squeeze())
Report performances of different methods of solving the same problem.
print("Corrupted image PSNR: %5.2f dB" % metric.psnr(img, imgw))
print("Serial Reconstruction PSNR: %5.2f dB" % metric.psnr(img, imgr))
print("Parallel Reconstruction PSNR: %5.2f dB\n" % metric.psnr(img, imgr_par))
Corrupted image PSNR: 10.14 dB Serial Reconstruction PSNR: 21.82 dB Parallel Reconstruction PSNR: 21.82 dB
Display reference, test, and reconstructed images
fig = plot.figure(figsize=(14, 14))
plot.subplot(2, 2, 1)
plot.imview(img, fig=fig, title='Reference Image')
plot.subplot(2, 2, 2)
plot.imview(imgw, fig=fig, title=('Corrupted Image PSNR: %5.2f dB' %
metric.psnr(img, imgw)))
plot.subplot(2, 2, 3)
plot.imview(imgr, fig=fig, title=('Serial reconstruction PSNR: %5.2f dB' %
metric.psnr(img, imgr)))
plot.subplot(2, 2, 4)
plot.imview(imgr_par, fig=fig, title=('Parallel reconstruction PSNR: %5.2f dB' %
metric.psnr(img, imgr_par)))
fig.show()
Display lowpass component and sparse representation
fig = plot.figure(figsize=(21, 7))
plot.subplot(1, 3, 1)
plot.imview(sl, fig=fig, cmap=plot.cm.Blues, title='Lowpass component')
plot.subplot(1, 3, 2)
plot.imview(np.squeeze(np.sum(abs(X), axis=b.cri.axisM)), fig=fig,
cmap=plot.cm.Blues, title='Serial sparse representation')
plot.subplot(1, 3, 3)
plot.imview(np.squeeze(np.sum(abs(X_par), axis=b.cri.axisM)), fig=fig,
cmap=plot.cm.Blues, title='Parallel sparse representation')
fig.show()