scaled=True, gray=True, idxexp=np.s_[160:416, 60:316]) """ Highpass filter example image. """ npd = 16 fltlmbd = 10 sl, sh = signal.tikhonov_filter(img, fltlmbd, npd) """ Load dictionary and display it. """ D = util.convdicts()['G:12x12x216'] plot.imview(util.tiledict(D), fgsz=(7, 7)) lmbda = 5e-2 """ The RelStopTol option was chosen for the two different methods to stop with similar functional values """ """ Initialise and run standard serial CSC solver using ADMM with an equality constraint :cite:`wohlberg-2014-efficient`. """ opt = cbpdn.ConvBPDN.Options({ 'Verbose': True, 'MaxMainIter': 200, 'RelStopTol': 5e-3, 'AuxVarObj': False, 'AutoRho': {
Once the best $\lambda, \mu$ have been determined, run :meth:`.bpdn.BPDNJoint.solve` with verbose display of ADMM iteration statistics. """ # Initialise and run BPDNJoint object for best lmbda and mu opt['Verbose'] = True b = bpdn.BPDNJoint(D, s, lmbda, mu, opt) x = b.solve() print("BPDNJoint solve time: %.2fs" % b.timer.elapsed('solve')) """ Plot comparison of reference and recovered representations. """ fig = plot.figure(figsize=(6, 8)) plot.subplot(1, 2, 1) plot.imview(x0, fgrf=fig, cmap=plot.cm.Blues, title='Reference') plot.subplot(1, 2, 2) plot.imview(x, fgrf=fig, cmap=plot.cm.Blues, title='Reconstruction') fig.show() """ Plot lmbda,mu error surface, functional value, residuals, and rho """ its = b.getitstat() fig = plot.figure(figsize=(15, 10)) ax = fig.add_subplot(2, 2, 1, projection='3d') ax.locator_params(nbins=5, axis='y') plot.surf(fvmx, x=np.log10(mrng), y=np.log10(lrng), xlbl='log($\mu$)',
dmethod='cns') """ Create solver object and solve. """ d = cbpdndl.ConvBPDNDictLearn(D0, vh, lmbda, opt, dimK=0, dimN=3) D1 = d.solve() print("ConvBPDNDictLearn solve time: %.2fs" % d.timer.elapsed('solve')) """ Display initial and final dictionaries: central temporal slice """ D1 = D1.squeeze() fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D0[..., 2, :]), fig=fig, title='D0') plot.subplot(1, 2, 2) plot.imview(util.tiledict(D1[..., 2, :]), fig=fig, title='D1') fig.show() """ Display initial and final dictionaries: central spatial vertical slice """ D1 = D1.squeeze() fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D0[2]), fig=fig, title='D0') plot.subplot(1, 2, 2) plot.imview(util.tiledict(D1[2]), fig=fig, title='D1') fig.show() """
""" Highpass filter example image. """ npd = 16 fltlmbd = 10 sl, sh = util.tikhonov_filter(img, fltlmbd, npd) """ Load dictionary and display it. """ D = util.convdicts()['G:12x12x36'] plot.imview(util.tiledict(D), fgsz=(7, 7)) """ Set :class:`.admm.cbpdn.ConvBPDNProjL1` solver options. """ gamma = 4.05e2 opt = cbpdn.ConvBPDNProjL1.Options({'Verbose': True, 'MaxMainIter': 250, 'HighMemSolve': True, 'LinSolveCheck': False, 'RelStopTol': 5e-3, 'AuxVarObj': True, 'rho': 3e0, 'AutoRho': {'Enabled': True}}) """ Initialise and run CSC solver.
imgd = crop(imgdp) """ Display solve time and denoising performance. """ print("ConvProdDictL1L1Grd solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % sm.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % sm.psnr(img, imgd)) """ Display the reference, noisy, and denoised images. """ fig, ax = plot.subplots(nrows=1, ncols=3, figsize=(21, 7)) fig.suptitle('ConvProdDictL1L1GrdJoint Results (false colour, ' 'bands 10, 20, 30)') plot.imview(img[..., 10:40:10], title='Reference', ax=ax[0], fig=fig) plot.imview(imgn[..., 10:40:10], title='Noisy', ax=ax[1], fig=fig) plot.imview(imgd[..., 10:40:10], title='Denoised', ax=ax[2], fig=fig) fig.show() """ Get iterations statistics from solver object and plot functional value, ADMM primary and dual residuals, and automatically adjusted ADMM penalty parameter against the iteration number. """ its = b.getitstat() fig = plot.figure(figsize=(20, 5)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional', fig=fig) plot.subplot(1, 3, 2) plot.plot(np.vstack((its.PrimalRsdl, its.DualRsdl)).T, ptyp='semilogy', xlbl='Iterations',
""" Display solve time and denoising performance. """ print("SplineL1 solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % metric.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % metric.psnr(img, imgr)) """ Display reference, corrupted, and denoised images. """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(img, title='Reference', fig=fig) plot.subplot(1, 3, 2) plot.imview(imgn, title='Corrupted', fig=fig) plot.subplot(1, 3, 3) plot.imview(imgr, title=r'Restored ($\ell_1$-spline)', fig=fig) fig.show() """ Get iterations statistics from solver object and plot functional value, ADMM primary and dual residuals, and automatically adjusted ADMM penalty parameter against the iteration number. """ its = b.getitstat() fig = plot.figure(figsize=(20, 5)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional', fig=fig)
""" Display solve time and denoising performance. """ print("ConvBPDN solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % sm.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % sm.psnr(img, imgd)) """ Display the reference, noisy, and denoised images. """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(img, title='Reference', fig=fig) plot.subplot(1, 3, 2) plot.imview(imgn, title='Noisy', fig=fig) plot.subplot(1, 3, 3) plot.imview(imgd, title='CSC Result', fig=fig) fig.show() """ Plot functional evolution during ADMM iterations. """ its = b.getitstat() plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional')
Display solve time and denoising performance. """ print("BPDN solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % sm.psnr(img, imgn)) print("Denoised mean image PSNR: %5.2f dB" % sm.psnr(img, imgd_mean)) print("Denoised median image PSNR: %5.2f dB" % sm.psnr(img, imgd_median)) """ Display the reference, noisy, and denoised images. """ fig = plot.figure(figsize=(14, 14)) plot.subplot(2, 2, 1) plot.imview(img, title='Reference', fig=fig) plot.subplot(2, 2, 2) plot.imview(imgn, title='Noisy', fig=fig) plot.subplot(2, 2, 3) plot.imview(imgd_mean, title='SC mean Result', fig=fig) plot.subplot(2, 2, 4) plot.imview(imgd_median, title='SC median Result', fig=fig) fig.show() """ Plot functional evolution during ADMM iterations. """ its = b.getitstat() plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional')
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 :cite:`heide-2015-fast`. """ opt = cbpdn.ConvBPDNMaskDcpl.Options({'Verbose': True, 'MaxMainIter': 200, 'HighMemSolve': True, 'RelStopTol': 5e-2, 'AuxVarObj': False, 'RelaxParam': 1.8, 'rho': 5e1*lmbda + 1e-1, 'AutoRho':
}, 'CCMOD': { 'ZeroMean': True } }) # Run optimisation d = cbpdndl.ConvBPDNDictLearn(D0, sh, lmbda, opt) D1 = d.solve() print("ConvBPDNDictLearn solve time: %.2fs" % d.timer.elapsed('solve'), "\n") # Display dictionaries D1 = D1.squeeze() fig1 = plot.figure(1, figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D0), fgrf=fig1, title='D0') plot.subplot(1, 2, 2) plot.imview(util.tiledict(D1, dsz), fgrf=fig1, title='D1') fig1.show() # Plot functional value and residuals its = d.getitstat() fig2 = plot.figure(2, figsize=(21, 7)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, fgrf=fig2, xlbl='Iterations', ylbl='Functional') plot.subplot(1, 3, 2) plot.plot(np.vstack((its.XPrRsdl, its.XDlRsdl, its.DPrRsdl, its.DDlRsdl)).T, fgrf=fig2, ptyp='semilogy', xlbl='Iterations', ylbl='Residual',
}) b = rpca.RobustPCA(S1, None, opt) X, Y = b.solve() """ Display solve time and low-rank component recovery accuracy. """ print("RobustPCA solve time: %5.2f s" % b.timer.elapsed('solve')) print("Low-rank component SNR: %5.2f dB" % metric.snr(S0, X)) """ Display reference, corrupted, and recovered matrices. """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(S0, fgrf=fig, cmap=plot.cm.Blues, title='Original matrix') plot.subplot(1, 3, 2) plot.imview(S1, fgrf=fig, cmap=plot.cm.Blues, title='Corrupted matrix') plot.subplot(1, 3, 3) plot.imview(X, fgrf=fig, cmap=plot.cm.Blues, title='Recovered matrix') fig.show() """ Get iterations statistics from solver object and plot functional value, ADMM primary and dual residuals, and automatically adjusted ADMM penalty parameter against the iteration number. """ its = b.getitstat() fig = plot.figure(figsize=(20, 5)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, fgrf=fig, xlbl='Iterations', ylbl='Functional') plot.subplot(1, 3, 2) plot.plot(np.vstack((its.PrimalRsdl, its.DualRsdl)).T,
Create solver object and solve. """ d = cbpdndl.ConvBPDNDictLearn(D0, vh, lmbda, opt, dimK=0, dimN=3) D1 = d.solve() print("ConvBPDNDictLearn solve time: %.2fs" % d.timer.elapsed('solve')) """ Display initial and final dictionaries: central temporal slice """ D1 = D1.squeeze() fig = plot.figure(figsize=(14,7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D0[...,2,:]), fig=fig, title='D0') plot.subplot(1, 2, 2) plot.imview(util.tiledict(D1[...,2,:]), fig=fig, title='D1') fig.show() """ Display initial and final dictionaries: central spatial vertical slice """ D1 = D1.squeeze() fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D0[2]), fig=fig, title='D0') plot.subplot(1, 2, 2) plot.imview(util.tiledict(D1[2]), fig=fig, title='D1')
""" Display solve time and denoising performance. """ print("ConvBPDNGradReg solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % sm.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % sm.psnr(img, imgd)) """ Display the reference, noisy, and denoised images. """ fig, ax = plot.subplots(nrows=1, ncols=3, figsize=(21, 7)) fig.suptitle('Method 1 Results') plot.imview(img, ax=ax[0], title='Reference', fig=fig) plot.imview(imgn, ax=ax[1], title='Noisy', fig=fig) plot.imview(imgd, ax=ax[2], title='CSC Result', fig=fig) fig.show() """ The previous method gave good results, but the weight on the filter representing the impulse noise is an additional parameter that has to be tuned. This parameter can be avoided by switching to an $\ell_1$ data fidelity term instead of including dictionary filters to represent the impulse noise, as in the problem :cite:`wohlberg-2016-convolutional2` $$\mathrm{argmin}_{\{\mathbf{x}_m\}} \; \left \| \sum_m \mathbf{d}_m * \mathbf{x}_m - \mathbf{s} \right \|_1 + \lambda \sum_m \| \mathbf{x}_m \|_1 \;.$$ Ideally we would also include a gradient penalty term to assist in the representation of the low frequency image component. While this relatively straightforward, it is a bit more complex to implement, and is omitted from this example. Instead of including a representation of the low frequency image component within the optimization, we use the low frequency component estimated by the previous example, subtracting it from the signal passed to the CSC algorithm, and adding it back to the solution of this algorithm.
""" Display solve time and low-rank component recovery accuracy. """ print("RobustPCA solve time: %5.2f s" % b.timer.elapsed('solve')) print("Low-rank component SNR: %5.2f dB" % metric.snr(S0, X)) """ Display reference, corrupted, and recovered matrices. """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(S0, cmap=plot.cm.Blues, title='Original matrix', fig=fig) plot.subplot(1, 3, 2) plot.imview(S1, cmap=plot.cm.Blues, title='Corrupted matrix', fig=fig) plot.subplot(1, 3, 3) plot.imview(X, cmap=plot.cm.Blues, title='Recovered matrix', fig=fig) fig.show() """ Get iterations statistics from solver object and plot functional value, ADMM primary and dual residuals, and automatically adjusted ADMM penalty parameter against the iteration number. """ its = b.getitstat() fig = plot.figure(figsize=(20, 5)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional', fig=fig)
# Construct cbpdn.AddMaskSim wrapper for cbpdn.ConvBPDN ams = cbpdn.AddMaskSim(cbpdn.ConvBPDN, D, S, W, lmbda, opt=opt) # Call solve via wrapper X = ams.solve() print("AddMaskSim wrapped ConvBPDN solve time: %.2fs" % ams.runtime) # Reconstruct representation Sr = ams.reconstruct().squeeze() print(" reconstruction PSNR: %.2fdB\n" % spl.psnr(S, Sr)) # Display representation and reconstructed image fig1 = plot.figure(1, figsize=(14, 14)) plot.subplot(2, 2, 1) plot.imview(np.squeeze(np.sum(abs(X), axis=ams.cri.axisM)), fgrf=fig1, cmap=plot.cm.Blues, title='Representation') plot.subplot(2, 2, 2) plot.imview(S, fgrf=fig1, cmap=plot.cm.Blues, title='Reference image') plot.subplot(2, 2, 3) plot.imview(Sr, fgrf=fig1, cmap=plot.cm.Blues, title='Reconstructed image') plot.subplot(2, 2, 4) plot.imview(W * Sr, fgrf=fig1, cmap=plot.cm.Blues, title='Masked reconstructed image') fig1.show() # Display mask and additive mask component fig2 = plot.figure(2, figsize=(14, 7)) plot.subplot(1, 2, 1)
""" Display solve time and denoising performance. """ print("ConvL1L1Grd solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % sm.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % sm.psnr(img, imgd)) """ Display the reference, noisy, and denoised images. """ fig, ax = plot.subplots(nrows=1, ncols=3, figsize=(21, 7)) fig.suptitle('ConvL1L1Grd Results') plot.imview(img, ax=ax[0], title='Reference', fig=fig) plot.imview(imgn, ax=ax[1], title='Noisy', fig=fig) plot.imview(imgd, ax=ax[2], title='CSC Result', fig=fig) fig.show() """ Display the low frequency image component. """ plot.imview(X[..., 0, 0:3].squeeze(), title='Low frequency component') # Wait for enter on keyboard input()
}) b = rpca.RobustPCA(S1, None, opt) X, Y = b.solve() """ Display solve time and low-rank component recovery accuracy. """ print("RobustPCA solve time: %5.2f s" % b.timer.elapsed('solve')) print("Low-rank component SNR: %5.2f dB" % metric.snr(S0, X)) """ Display reference, corrupted, and recovered matrices. """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(S0, cmap=plot.cm.Blues, title='Original matrix', fig=fig) plot.subplot(1, 3, 2) plot.imview(S1, cmap=plot.cm.Blues, title='Corrupted matrix', fig=fig) plot.subplot(1, 3, 3) plot.imview(X, cmap=plot.cm.Blues, title='Recovered matrix', fig=fig) fig.show() """ Get iterations statistics from solver object and plot functional value, ADMM primary and dual residuals, and automatically adjusted ADMM penalty parameter against the iteration number. """ its = b.getitstat() fig = plot.figure(figsize=(20, 5)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional', fig=fig) plot.subplot(1, 3, 2) plot.plot(np.vstack((its.PrimalRsdl, its.DualRsdl)).T,
""" Load an example colour image and create a corresponding grayscale version. """ imgc = util.ExampleImages().image('kodim23.png', scaled=True, idxexp=np.s_[150:500, 30:380]) imgg = util.rgb2gray(imgc) """ Display the example colour image. """ plot.imview(imgc, title='Image View Example', fgsz=(6, 6)) """ Display the grayscale image with a false-colour colour map, with a colour bar display of the color map. """ plot.imview(imgg, cmap=plot.cm.coolwarm, title='Image View Example', cbar=True, fgsz=(7, 6)) """ We can view both images as subplots within the same figure, but the colour bar on the second image changes its aspect ratio, which has the undesirable result of the two images being displayed with different sizes. """
for it in range(iter): img_index = np.random.randint(0, sh.shape[-1]) d.solve(shw[..., [img_index]], W[..., [img_index]]) d.display_end() D1 = d.getdict() print("OnlineConvBPDNMaskDictLearn solve time: %.2fs" % d.timer.elapsed('solve')) """ Display initial and final dictionaries. """ D1 = D1.squeeze() fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D0), title='D0', fig=fig) plot.subplot(1, 2, 2) plot.imview(util.tiledict(D1), title='D1', fig=fig) fig.show() """ Get iterations statistics from solver object and plot functional value. """ its = d.getitstat() fig = plot.figure(figsize=(7, 7)) plot.plot(np.vstack((its.DeltaD, its.Eta)).T, xlbl='Iterations', lgnd=('Delta D', 'Eta'), fig=fig) fig.show()
}) # Initialise and run ConvBPDNMaskDcpl object b = cbpdn.ConvBPDNMaskDcpl(D, S, lmbda, W, opt) X = b.solve() print("ConvBPDNMaskDcpl solve time: %.2fs" % b.runtime) # Reconstruct representation Sr = b.reconstruct().squeeze() print(" reconstruction PSNR: %.2fdB\n" % spl.psnr(S, Sr)) # Display representation and reconstructed image fig1 = plot.figure(1, figsize=(14, 14)) plot.subplot(2, 2, 1) plot.imview(np.squeeze(np.sum(abs(X), axis=b.cri.axisM)), fgrf=fig1, cmap=plot.cm.Blues, title='Representation') plot.subplot(2, 2, 2) plot.imview(S, fgrf=fig1, cmap=plot.cm.Blues, title='Reference image') plot.subplot(2, 2, 3) plot.imview(Sr, fgrf=fig1, cmap=plot.cm.Blues, title='Reconstructed image') plot.subplot(2, 2, 4) plot.imview(W[..., np.newaxis] * Sr, fgrf=fig1, title='Masked reconstructed image') fig1.show() # Display mask and Y1 component fig2 = plot.figure(2, figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(W, fgrf=fig2, cmap=plot.cm.Blues, title='Mask')
Display solve time and reconstruction performance. """ print("AddMaskSim wrapped ConvBPDN solve time: %.2fs" % ams.timer.elapsed('solve')) print("Corrupted image PSNR: %5.2f dB" % metric.psnr(img, imgw)) print("Recovered image PSNR: %5.2f dB" % metric.psnr(img, imgr)) """ Display reference, test, and reconstructed image """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(img, title='Reference image', fig=fig) plot.subplot(1, 3, 2) plot.imview(imgw, title='Corrupted image', fig=fig) plot.subplot(1, 3, 3) plot.imview(imgr, title='Reconstructed image', fig=fig) fig.show() """ Display lowpass component and sparse representation """ fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(sl, cmap=plot.cm.Blues, title='Lowpass component', fig=fig) plot.subplot(1, 2, 2)
""" Display solve time and denoising performance. """ print("ConvBPDNJoint solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % sm.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % sm.psnr(img, imgd)) """ Display the reference, noisy, and denoised images. """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(img, fgrf=fig, title='Reference') plot.subplot(1, 3, 2) plot.imview(imgn, fgrf=fig, title='Noisy') plot.subplot(1, 3, 3) plot.imview(imgd, fgrf=fig, title='CSC Result') fig.show() """ Plot functional evolution during ADMM iterations. """ its = b.getitstat() plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional')
# Initialise and run BPDNJoint object for best lmbda and mu opt['Verbose'] = True b = bpdn.BPDNJoint(D, s, lmbda, mu, opt) x = b.solve() print("BPDNJoint solve time: %.2fs" % b.timer.elapsed('solve')) """ Plot comparison of reference and recovered representations. """ fig = plot.figure(figsize=(6, 8)) plot.subplot(1, 2, 1) plot.imview(x0, cmap=plot.cm.Blues, title='Reference', fig=fig) plot.subplot(1, 2, 2) plot.imview(x, cmap=plot.cm.Blues, title='Reconstruction', fig=fig) fig.show() """ Plot lmbda,mu error surface, functional value, residuals, and rho """ its = b.getitstat() fig = plot.figure(figsize=(15, 10)) ax = fig.add_subplot(2, 2, 1, projection='3d') ax.locator_params(nbins=5, axis='y') plot.surf(fvmx, x=np.log10(mrng), y=np.log10(lrng), xlbl='log($\mu$)', ylbl='log($\lambda$)', zlbl='Error', fig=fig, ax=ax)
fig=fig, ax=ax[1]) fig.show() """ Load an example colour image and create a corresponding grayscale version. """ imgc = util.ExampleImages().image('kodim23.png', scaled=True, idxexp=np.s_[150:500, 30:380]) imgg = signal.rgb2gray(imgc) """ Display the example colour image. """ plot.imview(imgc, title='Image View Example', fgsz=(6, 6)) """ Display the grayscale image with a false-colour colour map, with a colour bar display of the color map. """ plot.imview(imgg, cmap=plot.cm.coolwarm, title='Image View Example', cbar=True, fgsz=(7, 6)) """ We can view both images as subplots within the same figure, but the colour bar on the second image changes its aspect ratio, which has the undesirable result of the two images being displayed with different sizes. """ fig, ax = plot.subplots(nrows=1, ncols=2, figsize=(18, 8))
t = c.timer.elapsed('solve') print('Solve time: %.2f s' % t) """ Reconstruct the image from the sparse representation. """ shr = np.sum(spl.fftconv(D, X), axis=2) imgr = sl + shr print("Reconstruction PSNR: %.2fdB\n" % spm.psnr(img, imgr)) """ Display representation and reconstructed image. """ fig = plot.figure(figsize=(14, 14)) plot.subplot(2, 2, 1) plot.imview(sl, fig=fig, title='Lowpass component') plot.subplot(2, 2, 2) plot.imview(np.sum(abs(X), axis=2).squeeze(), fig=fig, cmap=plot.cm.Blues, title='Main representation') plot.subplot(2, 2, 3) plot.imview(imgr, fig=fig, title='Reconstructed image') plot.subplot(2, 2, 4) plot.imview(imgr - img, fig=fig, fltscl=True, title='Reconstruction difference') fig.show() # Wait for enter on keyboard
}) # Initialise and run ConvBPDN object b = cbpdn.ConvBPDNJoint(D, sh, lmbda, mu, opt, dimK=0) X = b.solve() print("ConvBPDNJoint solve time: %.2fs" % b.timer.elapsed('solve')) # Reconstruct representation shr = b.reconstruct().squeeze() imgr = sl + shr print(" reconstruction PSNR: %.2fdB\n" % sm.psnr(img, imgr)) # Display representation and reconstructed image fig1 = plot.figure(1, figsize=(14, 14)) plot.subplot(2, 2, 1) plot.imview(sl, fgrf=fig1, title='Lowpass component') plot.subplot(2, 2, 2) plot.imview(np.sum(abs(X), axis=b.cri.axisM).squeeze(), fgrf=fig1, fltscl=True, title='Main representation') plot.subplot(2, 2, 3) plot.imview(imgr, fgrf=fig1, title='Reconstructed image') plot.subplot(2, 2, 4) plot.imview(imgr - img, fgrf=fig1, fltscl=True, title='Reconstruction difference') fig1.show() # Plot functional value, residuals, and rho
""" Create solver object and solve. """ d = bpdndl.BPDNDictLearn(D0, S, lmbda, opt) d.solve() print("BPDNDictLearn solve time: %.2fs" % d.timer.elapsed('solve')) """ Display initial and final dictionaries. """ D1 = d.getdict().reshape((8, 8, D0.shape[1])) D0 = D0.reshape(8, 8, D0.shape[-1]) fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D0), fgrf=fig, title='D0') plot.subplot(1, 2, 2) plot.imview(util.tiledict(D1), fgrf=fig, title='D1') fig.show() """ Get iterations statistics from solver object and plot functional value, ADMM primary and dual residuals, and automatically adjusted ADMM penalty parameter against the iteration number. """ its = d.getitstat() fig = plot.figure(figsize=(20, 5)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, fgrf=fig, xlbl='Iterations', ylbl='Functional') plot.subplot(1, 3, 2) plot.plot(np.vstack((its.XPrRsdl, its.XDlRsdl, its.DPrRsdl, its.DDlRsdl)).T, fgrf=fig, ptyp='semilogy',
# Initialise and run ConvBPDN object b = cbpdn.ConvBPDN(D, sh, lmbda, opt, dimK=0) X = b.solve() print("ConvBPDN solve time: %.2fs" % b.runtime) # Reconstruct representation shr = b.reconstruct().squeeze() imgr = sl + shr print("reconstruction PSNR: %.2fdB\n" % spl.psnr(img, imgr)) # Display representation and reconstructed image fig1 = plot.figure(1, figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(np.sum(abs(X), axis=b.cri.axisM).squeeze(), fgrf=fig1, cmap=plot.cm.Blues, title='Representation') plot.subplot(1, 3, 2) plot.imview(imgr, fgrf=fig1, title='Reconstructed image') plot.subplot(1, 3, 3) plot.imview(imgr - img, fgrf=fig1, title='Reconstruction difference') fig1.show() # Plot functional value, residuals, and rho its = b.getitstat() fig2 = plot.figure(2, figsize=(21, 7)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, fgrf=fig2, ptyp='semilogy', xlbl='Iterations',
""" Reconstruct the image from the sparse representation. """ imgr = np.sum(spl.fftconv(D, X), axis=2) print("Reconstruction PSNR: %.2fdB\n" % spm.psnr(img, imgr)) """ Display representation and reconstructed image. """ fig = plot.figure(figsize=(14, 14)) plot.subplot(2, 2, 1) plot.imview(X[..., 0].squeeze(), title='Lowpass component', fig=fig) plot.subplot(2, 2, 2) plot.imview(np.sum(abs(X[..., 1:]), axis=2).squeeze(), cmap=plot.cm.Blues, title='Main representation', fig=fig) plot.subplot(2, 2, 3) plot.imview(imgr, title='Reconstructed image', fig=fig) plot.subplot(2, 2, 4) plot.imview(imgr - img, fltscl=True, title='Reconstruction difference', fig=fig) fig.show() # Wait for enter on keyboard input()
opt = tvl1.TVL1Denoise.Options({ 'Verbose': True, 'MaxMainIter': 200, 'RelStopTol': 1e-3, 'gEvalY': False }) # Initialise and run TVL1Denoise object b = tvl1.TVL1Denoise(imgn, lmbda, opt) b.solve() print("TVL1Denoise solve time: %.2fs" % b.runtime) # Display input and result image fig1 = plot.figure(1, figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(imgn, fgrf=fig1, title='Noisy') plot.subplot(1, 2, 2) plot.imview(b.X, fgrf=fig1, title='l1-TV Result') fig1.show() # Plot functional value, residuals, and rho its = b.getitstat() fig2 = plot.figure(2, figsize=(21, 7)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, fgrf=fig2, xlbl='Iterations', ylbl='Functional') plot.subplot(1, 3, 2) plot.plot(np.vstack((its.PrimalRsdl, its.DualRsdl)).T, fgrf=fig2, ptyp='semilogy', xlbl='Iterations', ylbl='Residual',
imgp = b.solve() """ Display solve time and demosaicing performance. """ print("PPP FISTA solve time: %5.2f s" % b.timer.elapsed('solve')) print("Bilinear demosaicing PSNR: %5.2f dB" % metric.psnr(img, imgb)) print("PPP demosaicing PSNR: %5.2f dB" % metric.psnr(img, imgp)) """ Display reference and demosaiced images. """ fig, ax = plot.subplots(nrows=1, ncols=3, sharex=True, sharey=True, figsize=(21, 7)) plot.imview(img, title='Reference', fig=fig, ax=ax[0]) plot.imview(imgb, title='Bilinear demoisac: %.2f (dB)' % metric.psnr(img, imgb), fig=fig, ax=ax[1]) plot.imview(imgp, title='PPP demoisac: %.2f (dB)' % metric.psnr(img, imgp), fig=fig, ax=ax[2]) fig.show() # Wait for enter on keyboard input()
imgdp = b.reconstruct().squeeze() imgd = np.clip(crop(imgdp) + imgnl, 0, 1) """ Display solve time and denoising performance. """ print("ConvBPDN solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % metric.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % metric.psnr(img, imgd)) """ Display the reference, noisy, and denoised images. """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(img, title='Reference', fig=fig) plot.subplot(1, 3, 2) plot.imview(imgn, title='Noisy', fig=fig) plot.subplot(1, 3, 3) plot.imview(imgd, title='CSC Result', fig=fig) fig.show() """ Plot functional evolution during ADMM iterations. """ its = b.getitstat() plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional') """ Plot evolution of ADMM residuals and ADMM penalty parameter. """
imgr = crop(sl + ams.reconstruct().squeeze()) """ Display solve time and reconstruction performance. """ print("AddMaskSim wrapped ConvBPDN solve time: %.2fs" % ams.timer.elapsed('solve')) print("Corrupted image PSNR: %5.2f dB" % metric.psnr(img, imgw)) print("Recovered image PSNR: %5.2f dB" % metric.psnr(img, imgr)) """ Display reference, test, and reconstructed image """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(img, fig=fig, title='Reference image') plot.subplot(1, 3, 2) plot.imview(imgw, fig=fig, title='Corrupted image') plot.subplot(1, 3, 3) plot.imview(imgr, fig=fig, title='Reconstructed image') fig.show() """ Display lowpass component and sparse representation """ fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(sl, fig=fig, cmap=plot.cm.Blues, title='Lowpass component') plot.subplot(1, 2, 2) plot.imview(np.squeeze(np.sum(abs(X), axis=ams.cri.axisM)), fig=fig,
DX = sl.fftconv(D[..., np.newaxis, np.newaxis, :], X) XB = sl.dot(B, X, axis=2) shr = cp2np(b.reconstruct().squeeze()) imgr = slc + shr print("Reconstruction PSNR: %.2fdB\n" % sm.psnr(img, imgr)) """ Display original and reconstructed images. """ gamma = lambda x, g: np.sign(x) * (np.abs(x)**g) fig, ax = plot.subplots(nrows=2, ncols=2, figsize=(14, 14)) plot.imview(img, title='Original image', ax=ax[0, 0], fig=fig) plot.imview(slc, title='Lowpass component', ax=ax[0, 1], fig=fig) plot.imview(imgr, title='Reconstructed image', ax=ax[1, 0], fig=fig) plot.imview(gamma(shr, 0.6), title='Reconstructed highpass component', ax=ax[1, 1], fig=fig) fig.show() """ Display sparse representation components as sums of absolute values of coefficient maps for $X$, $DX$, and $XB$. """ fig, ax = plot.subplots(nrows=2, ncols=2, figsize=(14, 14)) plot.imview(gamma(np.sum(abs(X[..., 0:3, :, :]), axis=b.cri.axisM).squeeze(), 0.5), title='X (false colour, bands 0, 1, 2)', ax=ax[0, 0], fig=fig)
# Set up TVDeconv options lmbda = 0.04 opt = tvl2.TVL2Deconv.Options({'Verbose' : True, 'MaxMainIter' : 200, 'gEvalY' : False}) # Initialise and run TVL2Deconv object b = tvl2.TVL2Deconv(np.ones((1,1)), imgn, lmbda, opt) imgr = b.solve() print("TVL2Deconv solve time: %.2fs" % b.runtime) # Display test images fig1 = plot.figure(1, figsize=(21,7)) plot.subplot(1,3,1) plot.imview(img, fgrf=fig1, title='Reference') plot.subplot(1,3,2) plot.imview(imgn, fgrf=fig1, title='Noisy') plot.subplot(1,3,3) plot.imview(imgr, fgrf=fig1, title='l2-TV Result') fig1.show() # Plot functional value, residuals, and rho its = b.getitstat() fig2 = plot.figure(2, figsize=(21,7)) plot.subplot(1,3,1) plot.plot(its.ObjFun, fgrf=fig2, xlbl='Iterations', ylbl='Functional') plot.subplot(1,3,2) plot.plot(np.vstack((its.PrimalRsdl, its.DualRsdl)).T, fgrf=fig2, ptyp='semilogy', xlbl='Iterations', ylbl='Residual',
""" Reconstruct from the CDL solution with a spatial mask. """ sr2 = d2.reconstruct().squeeze() + sl """ Compare dictionaries. """ fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D1.squeeze()), fig=fig, title='Without Mask Decoupling') plot.subplot(1, 2, 2) plot.imview(util.tiledict(D2.squeeze()), fig=fig, title='With Mask Decoupling') fig.show() """ Display reference and training images. """ fig = plot.figure(figsize=(14, 14)) plot.subplot(2, 2, 1) plot.imview(S[...,0], title='Reference', fig=fig) plot.subplot(2, 2, 2) plot.imview(Sw[...,0], title='Test', fig=fig)
img = util.ExampleImages().image('kodim23.png', scaled=True, idxexp=np.s_[160:416, 60:316]) """ Highpass filter example image. """ npd = 16 fltlmbd = 10 sl, sh = util.tikhonov_filter(img, fltlmbd, npd) """ Load colour dictionary and display it. """ D = util.convdicts()['RGB:8x8x3x64'] plot.imview(util.tiledict(D), fgsz=(7, 7)) """ Set :class:`.admm.cbpdn.ConvBPDN` solver options. """ lmbda = 1e-1 opt = cbpdn.ConvBPDN.Options({ 'Verbose': True, 'MaxMainIter': 200, 'RelStopTol': 5e-3, 'AuxVarObj': False }) """ Initialise and run CSC solver. """
'MaxMainIter': 200, 'rho': 1e0, 'gEvalY': False, 'RelStopTol': 2e-3, 'DFidWeight': zpad(wdf) }) # Initialise and run TVL1Deconv object b = tvl1.TVL1Deconv(h, spad(imgcn), lmbda, opt, caxis=2) imgr = b.solve()[n - n2:-n - n2, n - n2:-n - n2, :] print("TVL1Deconv solve time: %.2fs" % b.timer.elapsed('solve')) # Display test images fig1 = plot.figure(1, figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(img, fgrf=fig1, title='Reference') plot.subplot(1, 3, 2) plot.imview(imgcn, fgrf=fig1, title='Blurred/Noisy') plot.subplot(1, 3, 3) plot.imview(imgr, fgrf=fig1, title='l1-TV Result') fig1.show() # Plot functional value, residuals, and rho its = b.getitstat() fig2 = plot.figure(2, figsize=(21, 7)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, fgrf=fig2, xlbl='Iterations', ylbl='Functional') plot.subplot(1, 3, 2) plot.plot(np.vstack((its.PrimalRsdl, its.DualRsdl)).T, fgrf=fig2, ptyp='semilogy',
""" Reconstruct from the CDL solution with a spatial mask. """ sr2 = d2.reconstruct().squeeze() + sl """ Compare dictionaries. """ fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D1.squeeze()), title='Without Mask Decoupling', fig=fig) plot.subplot(1, 2, 2) plot.imview(util.tiledict(D2.squeeze()), title='With Mask Decoupling', fig=fig) fig.show() """ Display reference and training images. """ fig = plot.figure(figsize=(14, 14)) plot.subplot(2, 2, 1) plot.imview(S[...,0], title='Reference', fig=fig) plot.subplot(2, 2, 2) plot.imview(Sw[...,0], title='Test', fig=fig)
'L1Weight' : wl1, 'GradWeight' : wgr}) # Initialise and run ConvBPDNGradReg object b = cbpdn.ConvBPDNGradReg(D, img, lmbda, mu, opt) X = b.solve() print("ConvBPDNGradReg solve time: %.2fs" % b.runtime) # Reconstruct representation imgr = b.reconstruct().squeeze() print(" reconstruction PSNR: %.2fdB\n" % spl.psnr(img, imgr)) # Display representation and reconstructed image fig1 = plot.figure(1, figsize=(14,14)) plot.subplot(2,2,1) plot.imview(b.Y[...,0].squeeze(), fgrf=fig1, cmap=plot.cm.Blues, title='Lowpass component') plot.subplot(2,2,2) plot.imview(np.sum(abs(b.Y[...,1:]), axis=b.cri.axisM).squeeze(), fgrf=fig1, cmap=plot.cm.Blues, title='Main representation') plot.subplot(2,2,3) plot.imview(imgr, fgrf=fig1, title='Reconstructed image') plot.subplot(2,2,4) plot.imview(imgr - img, fgrf=fig1, title='Reconstruction difference') fig1.show() # Plot functional value, residuals, and rho its = b.getitstat() fig2 = plot.figure(2, figsize=(21,7)) plot.subplot(1,3,1) plot.plot(its.ObjFun, fgrf=fig2, ptyp='semilogy', xlbl='Iterations',
Display solve time and denoising performance. """ print("ConvProdDictL1L1Grd solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % sm.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % sm.psnr(img, imgd)) """ Display the reference, noisy, and denoised images. """ fig, ax = plot.subplots(nrows=1, ncols=3, figsize=(21, 7)) fig.suptitle('ConvProdDictL1L1GrdJoint Results (false colour, ' 'bands 10, 20, 30)') plot.imview(img[..., 10:40:10], title='Reference', ax=ax[0], fig=fig) plot.imview(imgn[..., 10:40:10], title='Noisy', ax=ax[1], fig=fig) plot.imview(imgd[..., 10:40:10], title='Denoised', ax=ax[2], fig=fig) fig.show() """ Get iterations statistics from solver object and plot functional value, ADMM primary and dual residuals, and automatically adjusted ADMM penalty parameter against the iteration number. """ its = b.getitstat() fig = plot.figure(figsize=(20, 5)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional', fig=fig) plot.subplot(1, 3, 2) plot.plot(np.vstack((its.PrimalRsdl, its.DualRsdl)).T,
""" Highpass filter example image. """ npd = 16 fltlmbd = 10 sl, sh = util.tikhonov_filter(img, fltlmbd, npd) """ Load dictionary and display it. """ D = util.convdicts()['G:12x12x216'] plot.imview(util.tiledict(D), fgsz=(7, 7)) lmbda = 5e-2 """ The RelStopTol option was chosen for the two different methods to stop with similar functional values """ """ Initialise and run standard serial CSC solver using ADMM with an equality constraint :cite:`wohlberg-2014-efficient`. """ opt = cbpdn.ConvBPDN.Options({'Verbose': True, 'MaxMainIter': 200, 'RelStopTol': 5e-3, 'AuxVarObj': False, 'AutoRho': {'Enabled': False}}) b = cbpdn.ConvBPDN(D, sh, lmbda, opt=opt, dimK=0)
""" Display solve time and denoising performance. """ print("TVL2Deconv solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % metric.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % metric.psnr(img, imgr)) """ Display reference, corrupted, and denoised images. """ fig = plot.figure(figsize=(20, 5)) plot.subplot(1, 3, 1) plot.imview(img, title='Reference', fig=fig) plot.subplot(1, 3, 2) plot.imview(imgn, title='Corrupted', fig=fig) plot.subplot(1, 3, 3) plot.imview(imgr, title=r'Restored ($\ell_2$-TV)', fig=fig) fig.show() """ Get iterations statistics from solver object and plot functional value, ADMM primary and dual residuals, and automatically adjusted ADMM penalty parameter against the iteration number. """ its = b.getitstat() fig = plot.figure(figsize=(20, 5)) plot.subplot(1, 3, 1) plot.plot(its.ObjFun, xlbl='Iterations', ylbl='Functional', fig=fig)
The denoised estimate of the image is just the reconstruction from all coefficient maps. """ imgdp = cp2np(b.reconstruct().squeeze()) imgd = crop(imgdp) """ Display solve time and denoising performance. """ print("ConvL1L1Grd solve time: %5.2f s" % b.timer.elapsed('solve')) print("Noisy image PSNR: %5.2f dB" % sm.psnr(img, imgn)) print("Denoised image PSNR: %5.2f dB" % sm.psnr(img, imgd)) """ Display the reference, noisy, and denoised images. """ fig, ax = plot.subplots(nrows=1, ncols=3, figsize=(21, 7)) fig.suptitle('ConvL1L1Grd Results') plot.imview(img, ax=ax[0], title='Reference', fig=fig) plot.imview(imgn, ax=ax[1], title='Noisy', fig=fig) plot.imview(imgd, ax=ax[2], title='CSC Result', fig=fig) fig.show() """ Display the low frequency image component. """ plot.imview(X[..., 0, 0:3].squeeze(), title='Low frequency component') # Wait for enter on keyboard input()
img_index = np.random.randint(0, sh.shape[-1]) d.solve(sh[..., [img_index]]) d.display_end() D1 = d.getdict() print("OnlineConvBPDNDictLearn solve time: %.2fs" % d.timer.elapsed('solve')) """ Display initial and final dictionaries. """ D1 = D1.squeeze() fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D0), title='D0', fig=fig) plot.subplot(1, 2, 2) plot.imview(util.tiledict(D1), title='D1', fig=fig) fig.show() """ Get iterations statistics from solver object and plot functional value. """ its = d.getitstat() fig = plot.figure(figsize=(7, 7)) plot.plot(np.vstack((its.DeltaD, its.Eta)).T, xlbl='Iterations', lgnd=('Delta D', 'Eta'), fig=fig) fig.show()
""" Display solve time and reconstruction performance. """ print("AddMaskSim wrapped ConvBPDN solve time: %.2fs" % t) print("Corrupted image PSNR: %5.2f dB" % metric.psnr(img, imgw)) print("Recovered image PSNR: %5.2f dB" % metric.psnr(img, imgr)) """ Display reference, test, and reconstructed image """ fig = plot.figure(figsize=(21, 7)) plot.subplot(1, 3, 1) plot.imview(img, title='Reference image', fig=fig) plot.subplot(1, 3, 2) plot.imview(imgw, title='Corrupted image', fig=fig) plot.subplot(1, 3, 3) plot.imview(imgr, title='Reconstructed image', fig=fig) fig.show() """ Display lowpass component and sparse representation """ fig = plot.figure(figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(X[..., 0], cmap=plot.cm.Blues, title='Lowpass component', fig=fig) plot.subplot(1, 2, 2)