from __future__ import print_function from builtins import input from builtins import range import os.path import tempfile import sys import pyfftw # See https://github.com/pyFFTW/pyFFTW/issues/40 import numpy as np try: import skvideo.datasets import skvideo.io except ImportError: print('Package scikit-video is required by this demo script', file=sys.stderr) raise from sporco.dictlrn import cbpdndl from sporco import util from sporco import plot plot.config_notebook_plotting() vid = skvideo.io.vread(skvideo.datasets.fullreferencepair()[0], outputdict={"-pix_fmt": "gray"})[..., 0] vid = np.moveaxis(vid, 0, -1) vid = vid[0:106,40:136, 10:42].astype(np.float32)/255.0 npd = 16 fltlmbd = 10 vl, vh = util.tikhonov_filter(vid, fltlmbd, npd) np.random.seed(12345) D0 = np.random.randn(5, 5, 3, 25) lmbda = 0.1 opt = cbpdndl.ConvBPDNDictLearn.Options({'Verbose': True, 'MaxMainIter': 200, 'CBPDN': {'rho': 5e1*lmbda, 'AutoRho': {'Enabled': True}}, 'CCMOD': {'rho': 1e2, 'AutoRho': {'Enabled': True}}}, dmethod='cns') d = cbpdndl.ConvBPDNDictLearn(D0, vh, lmbda, opt, dimK=0, dimN=3) D1 = d.solve() print("ConvBPDNDictLearn solve time: %.2fs" % d.timer.elapsed('solve')) 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() 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() its = d.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.XPrRsdl, its.XDlRsdl, its.DPrRsdl, its.DDlRsdl)).T, ptyp='semilogy', xlbl='Iterations', ylbl='Residual', lgnd=['X Primal', 'X Dual', 'D Primal', 'D Dual'], fig=fig) plot.subplot(1, 3, 3) plot.plot(np.vstack((its.XRho, its.DRho)).T, xlbl='Iterations', ylbl='Penalty Parameter', ptyp='semilogy', lgnd=['$\\rho_X$', '$\\rho_D$'], fig=fig) fig.show()