├── .DS_Store
├── .ipynb_checkpoints
├── ch02-checkpoint.ipynb
├── ch03-checkpoint.ipynb
├── ch04-checkpoint.ipynb
├── ch05-checkpoint.ipynb
├── ch05_demo-checkpoint.ipynb
├── ch06-checkpoint.ipynb
├── ch07-checkpoint.ipynb
├── ch10-checkpoint.ipynb
├── ch11-checkpoint.ipynb
├── ch12-checkpoint.ipynb
├── ch14-01-checkpoint.ipynb
├── ch14-02-checkpoint.ipynb
├── ch14-03-checkpoint.ipynb
├── ch14-04-checkpoint.ipynb
├── ch14-05-checkpoint.ipynb
├── ch14-06-checkpoint.ipynb
├── ch14-checkpoint.ipynb
├── ch15-01-checkpoint.ipynb
├── ch15-02-checkpoint.ipynb
├── ch15-03-checkpoint.ipynb
├── ch15-04-checkpoint.ipynb
├── ch15-05-checkpoint.ipynb
├── ch15-06-checkpoint.ipynb
└── ch15-06-ver2-checkpoint.ipynb
├── A_DCT
├── A_DCT.png
├── A_KSVD_25
├── A_KSVD_25.png
├── A_KSVD_50
├── A_KSVD_50.png
├── A_KSVD_75
├── A_KSVD_75.png
├── A_KSVD_sig10
├── A_KSVD_sig10.png
├── A_KSVD_sig20
├── A_KSVD_sig20.png
├── A_dl_25
├── A_dl_50
├── A_dl_75
├── A_high
├── A_l
├── A_low
├── Barbara_K-SVD.png
├── CoherenceIteration.png
├── Grassmannian.png
├── IRLS.png
├── MOD_K-SVD.png
├── NonDiagonalElement.png
├── Pepper_Y_sig20
├── Pepper_Y_sig20_25
├── Pepper_Y_sig20_50
├── Pepper_Y_sig20_75
├── Peppers_Y_sig20
├── Peppers_Y_sig20_25
├── Peppers_Y_sig20_50
├── Peppers_Y_sig20_75
├── Peppers_inpaint.png
├── Peppers_inpulse
├── Peppers_inpulse.png
├── Peppers_inpulse_mask
├── Peppers_inpulse_mask_median
├── Peppers_inpulse_recon.png
├── Peppers_inpulse_recon_dct_local_inpainting
├── Peppers_inpulse_recon_dct_local_inpainting_mask
├── Peppers_inpulse_recon_local_inpainting
├── Peppers_inpulse_recon_median
├── Peppers_inpulse_recon_median_mask
├── Peppers_inpulse_recon_sub.png
├── Peppers_inpulse_sign
├── Peppers_recon.png
├── Peppers_recon_DCT_DL.png
├── Peppers_recon_DCT_KSVD.png
├── Peppers_recon_KSVD.png
├── Peppers_recon_Y_sig20_25
├── Peppers_recon_Y_sig20_25_KSVD
├── Peppers_recon_Y_sig20_25_dl
├── Peppers_recon_Y_sig20_50
├── Peppers_recon_Y_sig20_50_KSVD
├── Peppers_recon_Y_sig20_50_dl
├── Peppers_recon_Y_sig20_75
├── Peppers_recon_Y_sig20_75_KSVD
├── Peppers_recon_Y_sig20_75_dl
├── X_1.png
├── X_3.png
├── X_5.png
├── Y_c_global_mca
├── Y_c_local
├── Y_t_global_mca
├── Y_t_local
├── activity.png
├── activity_threshold.png
├── barbara.png
├── barbara_patches.png
├── barbara_sig10
├── barbara_sig10.png
├── barbara_sig20
├── barbara_sig20.png
├── c_global
├── c_global.png
├── c_local
├── c_local.png
├── ch02.ipynb
├── ch03.ipynb
├── ch04.ipynb
├── ch05.ipynb
├── ch06.ipynb
├── ch07.ipynb
├── ch10.ipynb
├── ch11.ipynb
├── ch12.ipynb
├── ch14-01.ipynb
├── ch14-02.ipynb
├── ch14-03.ipynb
├── ch14-04.ipynb
├── ch14-05.ipynb
├── ch14-denoise.png
├── ch15-01.ipynb
├── ch15-02.ipynb
├── ch15-03.ipynb
├── ch15-04.ipynb
├── ch15-05.ipynb
├── ch15-06.ipynb
├── darakuron.png
├── dct_dictionary.png
├── dct_shrinkage.png
├── dct_shrinkage_threshold.png
├── deblurring.png
├── dist_S.png
├── dist_S_OMP_LARS.png
├── global_mca.png
├── iteration.png
├── ksvd_dictionary_barbara.png
├── l2_err.png
├── l2_err_OMP_LARS.png
├── lambda.png
├── lena.jpg
├── lena.png
├── lena_200_200.png
├── local_mca.png
├── mask
├── mask_25
├── mask_50
├── mask_75
├── mask_median.png
├── p_l_pca
├── path.png
├── peppers.png
├── recon_bm3d
├── recon_bm3d.png
├── recon_dct_dictionary
├── recon_dct_dictionary.png
├── recon_dct_global_shrinkage_curve
├── recon_dct_global_shrinkage_curve.png
├── recon_dct_shrink
├── recon_dct_shrinkage_curve
├── recon_dct_shrinkage_curve.png
├── recon_ksvd_dictionary
├── recon_ksvd_dictionary.png
├── recon_nlm
├── recon_nlm.png
├── recon_ws
├── text.jpg
├── wavelet.png
├── wavelet_shrinkage.png
└── wavelet_shrinkage_threshold.png
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/.DS_Store
--------------------------------------------------------------------------------
/.ipynb_checkpoints/ch04-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "第4章 追跡アルゴリズムの性能保証\n",
8 | "=="
9 | ]
10 | },
11 | {
12 | "cell_type": "markdown",
13 | "metadata": {},
14 | "source": [
15 | "定理4.1(OMPの最適解保証:二つの直交行列の場合)\n",
16 | "--\n",
17 | "$\\mathbf{\\Psi}$,$\\mathbf{\\Phi}$を$n×n$の直交行列とする.線形連立方程式$\\mathbf{Ax}=[\\mathbf{\\Psi},\\mathbf{\\Phi}]\\mathbf{x}=\\mathbf{b}$に対して,もし,解$\\mathbf{x}$が存在して、最初の$n$個の要素の中に$k_p$個の非ゼロ要素があり,\n",
18 | "$$max(k_p,k_q)<\\frac{1}{2\\mu(\\mathbf{A})}$$\n",
19 | "が成り立つならば,しきい値パラメータ$\\epsilon_0=0$で実行されるOMPは$k_0=k_p+K_q$回の反復で最適解を与える."
20 | ]
21 | },
22 | {
23 | "cell_type": "markdown",
24 | "metadata": {},
25 | "source": [
26 | "定理4.2(基底追跡の最適解保証:二つの直交行列の場合)\n",
27 | "--\n",
28 | "$\\mathbf{\\Psi}$,$\\mathbf{\\Phi}$を$n×n$の直交行列とする.線形連立方程式$\\mathbf{Ax}=[\\mathbf{\\Psi},\\mathbf{\\Phi}]\\mathbf{x}=\\mathbf{b}$に対して,もし,解$\\mathbf{x}$が存在して、最初の$n$個の要素の中に$k_p$個の非ゼロ要素があり,\n",
29 | "$$2\\mu(\\mathbf{A})^2k_pk_q+\\mu(\\mathbf{A})k_p-1<0$$\n",
30 | "が成り立つならば,得られた解は$(P_1)$の一意解であり,${P_0}$の一意解でもある."
31 | ]
32 | },
33 | {
34 | "cell_type": "markdown",
35 | "metadata": {},
36 | "source": [
37 | "線形計画問題(LP)\n",
38 | "--\n",
39 | "\n",
40 | "BP(基底追跡)の解$\\mathbf{x}$より$L_0$ノルムが大きくて$L_1$ノルムが小さい解$\\mathbf{y}$の集合\n",
41 | "\n",
42 | "$C = \\{\\mathbf{y}\\,|\\,\n",
43 | "\\mathbf{y}\\neq \\mathbf{x},\\,\n",
44 | "\\|\\mathbf{y}\\|_1\\leq\\|\\mathbf{x}\\|_1,\\,\n",
45 | "\\|\\mathbf{y}\\|_0\\geq\\|\\mathbf{x}\\|_0,\\,\n",
46 | "\\mathbf{A}(\\mathbf{y}-\\mathbf{x})=\\mathbf{0}\\}\n",
47 | "$\n",
48 | "\n",
49 | "が与えられた条件\n",
50 | "\n",
51 | "$2\\mu(\\mathbf{A})^2k_pk_q+\\mu(\\mathbf{A})k_p-1<0$
\n",
52 | "\n",
53 | "もしくはもっと解釈が容易な条件\n",
54 | "\n",
55 | "$\\|x\\|_0=k_p+k_q<\\frac{\\sqrt{2}-0.5}{\\mu(\\mathbf{A})}$\n",
56 | "\n",
57 | "の元で空となることを証明する"
58 | ]
59 | },
60 | {
61 | "cell_type": "code",
62 | "execution_count": 55,
63 | "metadata": {
64 | "collapsed": false
65 | },
66 | "outputs": [
67 | {
68 | "data": {
69 | "text/plain": [
70 | " fun: 50.0\n",
71 | " message: 'Optimization failed. Unable to find a feasible starting point.'\n",
72 | " nit: 100\n",
73 | " status: 2\n",
74 | " success: False\n",
75 | " x: nan"
76 | ]
77 | },
78 | "execution_count": 55,
79 | "metadata": {},
80 | "output_type": "execute_result"
81 | }
82 | ],
83 | "source": [
84 | "from scipy.optimize import linprog\n",
85 | "\n",
86 | "# パラメータ\n",
87 | "n, kp, kq, mu = 50, 9, 7, 0.1\n",
88 | "\n",
89 | "one_p = [1.] * kp + [0.] * (n - kp)\n",
90 | "one_q = [1.] * kq + [0.] * (n - kq)\n",
91 | "C = np.array(one_p + one_q)\n",
92 | "A_ub = np.diag([1. - mu] * n + [mu - 1.] * n)\n",
93 | "b_ub = np.zeros(2 * n)\n",
94 | "A_eq = np.eye(2 * n)\n",
95 | "b_eq = np.ones(2 * n)\n",
96 | "\n",
97 | "# 最大化したいので負をとる\n",
98 | "C *= -1\n",
99 | "A_ub *= -1\n",
100 | "b_ub *= -1\n",
101 | "A_eq *= -1\n",
102 | "b_eq *= -1\n",
103 | "\n",
104 | "linprog(C, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq=b_eq)"
105 | ]
106 | },
107 | {
108 | "cell_type": "markdown",
109 | "metadata": {},
110 | "source": [
111 | "nanだと…解集合が空であることを示したいからこれでいいのか…"
112 | ]
113 | },
114 | {
115 | "cell_type": "markdown",
116 | "metadata": {},
117 | "source": [
118 | "定理4.3(OMPの最適解保証)\n",
119 | "--\n",
120 | "線形連立方程式$\\mathbf{Ax}=\\mathbf{b}$($n\n",
132 | "(その非ゼロ要素の最小値は$|x_{min}|$,最大値は$|x_{max}|$とする)\n",
133 | "$$\\|\\mathbf{x}\\|_0<\\frac{1}{2}\\left(1+\\frac{1}{\\mu(\\mathbf{A})}\\frac{|x_{min}|}{|x_{max}|}\\right)$$\n",
134 | "を満たせば,しきい値パラメータ$\\epsilon_0=0$で実行されるしきい値アルゴリズムは最適解を与える."
135 | ]
136 | },
137 | {
138 | "cell_type": "markdown",
139 | "metadata": {},
140 | "source": [
141 | "定理4.5(基底追跡の最適解保証)\n",
142 | "--\n",
143 | "線形連立方程式$\\mathbf{Ax}=\\mathbf{b}$($n"
251 | ]
252 | },
253 | "execution_count": 57,
254 | "metadata": {},
255 | "output_type": "execute_result"
256 | },
257 | {
258 | "data": {
259 | "image/png": "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\nkCZvpZTKgv4fu5z8fntIV+sAAAAASUVORK5CYII=\n",
260 | "text/plain": [
261 | ""
262 | ]
263 | },
264 | "metadata": {},
265 | "output_type": "display_data"
266 | }
267 | ],
268 | "source": [
269 | "x = np.linspace(0, 4, 100)\n",
270 | "\n",
271 | "y0 = (-3*x+10)/2\n",
272 | "y1 = -2*x+6\n",
273 | "y2 = -x+4\n",
274 | "y3 = np.ones_like(x)\n",
275 | "\n",
276 | "y4 = np.minimum(y1, y2)\n",
277 | "\n",
278 | "plt.figure()\n",
279 | "plt.plot(x, y0, \"--\", label=\"objective function\")\n",
280 | "plt.plot(x, y1, label=\"2x+y<=6\")\n",
281 | "plt.plot(x, y2, label=\"x+y<=4\")\n",
282 | "plt.plot(x, y3, label=\"y>=1\")\n",
283 | "plt.plot(res.x[0], res.x[1], \"o\")\n",
284 | "plt.fill_between(x, y3, y4, where=y4>y3, facecolor='yellow', alpha=0.3)\n",
285 | "plt.ylim(0, 5)\n",
286 | "plt.legend(loc=0)"
287 | ]
288 | },
289 | {
290 | "cell_type": "markdown",
291 | "metadata": {},
292 | "source": [
293 | "PuLP で解くと以下のようになります。"
294 | ]
295 | },
296 | {
297 | "cell_type": "code",
298 | "execution_count": 58,
299 | "metadata": {
300 | "collapsed": false
301 | },
302 | "outputs": [
303 | {
304 | "data": {
305 | "text/plain": [
306 | "[2.0, 2.0]"
307 | ]
308 | },
309 | "execution_count": 58,
310 | "metadata": {},
311 | "output_type": "execute_result"
312 | }
313 | ],
314 | "source": [
315 | "import pulp\n",
316 | "\n",
317 | "x = pulp.LpVariable(\"x\")\n",
318 | "y = pulp.LpVariable(\"y\")\n",
319 | "problem = pulp.LpProblem(\"A simple maximization objective\", pulp.LpMaximize)\n",
320 | "problem += 3*x + 2*y, \"The objective function\"\n",
321 | "problem += 2*x + y <= 6, \"1st constraint\"\n",
322 | "problem += x + y <= 4, \"2nd constraint\"\n",
323 | "problem += y >= 1, \"3rd constraint\"\n",
324 | "problem.solve()\n",
325 | "\n",
326 | "[x.value(), y.value()]"
327 | ]
328 | },
329 | {
330 | "cell_type": "code",
331 | "execution_count": null,
332 | "metadata": {
333 | "collapsed": true
334 | },
335 | "outputs": [],
336 | "source": []
337 | }
338 | ],
339 | "metadata": {
340 | "kernelspec": {
341 | "display_name": "Python 3",
342 | "language": "python",
343 | "name": "python3"
344 | },
345 | "language_info": {
346 | "codemirror_mode": {
347 | "name": "ipython",
348 | "version": 3
349 | },
350 | "file_extension": ".py",
351 | "mimetype": "text/x-python",
352 | "name": "python",
353 | "nbconvert_exporter": "python",
354 | "pygments_lexer": "ipython3",
355 | "version": "3.5.2"
356 | }
357 | },
358 | "nbformat": 4,
359 | "nbformat_minor": 0
360 | }
361 |
--------------------------------------------------------------------------------
/A_DCT:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_DCT
--------------------------------------------------------------------------------
/A_DCT.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_DCT.png
--------------------------------------------------------------------------------
/A_KSVD_25:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_25
--------------------------------------------------------------------------------
/A_KSVD_25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_25.png
--------------------------------------------------------------------------------
/A_KSVD_50:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_50
--------------------------------------------------------------------------------
/A_KSVD_50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_50.png
--------------------------------------------------------------------------------
/A_KSVD_75:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_75
--------------------------------------------------------------------------------
/A_KSVD_75.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_75.png
--------------------------------------------------------------------------------
/A_KSVD_sig10:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_sig10
--------------------------------------------------------------------------------
/A_KSVD_sig10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_sig10.png
--------------------------------------------------------------------------------
/A_KSVD_sig20:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_sig20
--------------------------------------------------------------------------------
/A_KSVD_sig20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_KSVD_sig20.png
--------------------------------------------------------------------------------
/A_dl_25:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_dl_25
--------------------------------------------------------------------------------
/A_dl_50:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_dl_50
--------------------------------------------------------------------------------
/A_dl_75:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_dl_75
--------------------------------------------------------------------------------
/A_high:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_high
--------------------------------------------------------------------------------
/A_l:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_l
--------------------------------------------------------------------------------
/A_low:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/A_low
--------------------------------------------------------------------------------
/Barbara_K-SVD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Barbara_K-SVD.png
--------------------------------------------------------------------------------
/CoherenceIteration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/CoherenceIteration.png
--------------------------------------------------------------------------------
/Grassmannian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Grassmannian.png
--------------------------------------------------------------------------------
/IRLS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/IRLS.png
--------------------------------------------------------------------------------
/MOD_K-SVD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/MOD_K-SVD.png
--------------------------------------------------------------------------------
/NonDiagonalElement.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/NonDiagonalElement.png
--------------------------------------------------------------------------------
/Pepper_Y_sig20:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Pepper_Y_sig20
--------------------------------------------------------------------------------
/Pepper_Y_sig20_25:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Pepper_Y_sig20_25
--------------------------------------------------------------------------------
/Pepper_Y_sig20_50:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Pepper_Y_sig20_50
--------------------------------------------------------------------------------
/Pepper_Y_sig20_75:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Pepper_Y_sig20_75
--------------------------------------------------------------------------------
/Peppers_Y_sig20:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_Y_sig20
--------------------------------------------------------------------------------
/Peppers_Y_sig20_25:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_Y_sig20_25
--------------------------------------------------------------------------------
/Peppers_Y_sig20_50:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_Y_sig20_50
--------------------------------------------------------------------------------
/Peppers_Y_sig20_75:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_Y_sig20_75
--------------------------------------------------------------------------------
/Peppers_inpaint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpaint.png
--------------------------------------------------------------------------------
/Peppers_inpulse:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse
--------------------------------------------------------------------------------
/Peppers_inpulse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse.png
--------------------------------------------------------------------------------
/Peppers_inpulse_recon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse_recon.png
--------------------------------------------------------------------------------
/Peppers_inpulse_recon_dct_local_inpainting:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse_recon_dct_local_inpainting
--------------------------------------------------------------------------------
/Peppers_inpulse_recon_dct_local_inpainting_mask:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse_recon_dct_local_inpainting_mask
--------------------------------------------------------------------------------
/Peppers_inpulse_recon_local_inpainting:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse_recon_local_inpainting
--------------------------------------------------------------------------------
/Peppers_inpulse_recon_median:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse_recon_median
--------------------------------------------------------------------------------
/Peppers_inpulse_recon_median_mask:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse_recon_median_mask
--------------------------------------------------------------------------------
/Peppers_inpulse_recon_sub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse_recon_sub.png
--------------------------------------------------------------------------------
/Peppers_inpulse_sign:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_inpulse_sign
--------------------------------------------------------------------------------
/Peppers_recon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon.png
--------------------------------------------------------------------------------
/Peppers_recon_DCT_DL.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_DCT_DL.png
--------------------------------------------------------------------------------
/Peppers_recon_DCT_KSVD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_DCT_KSVD.png
--------------------------------------------------------------------------------
/Peppers_recon_KSVD.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_KSVD.png
--------------------------------------------------------------------------------
/Peppers_recon_Y_sig20_25:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_Y_sig20_25
--------------------------------------------------------------------------------
/Peppers_recon_Y_sig20_25_KSVD:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_Y_sig20_25_KSVD
--------------------------------------------------------------------------------
/Peppers_recon_Y_sig20_25_dl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_Y_sig20_25_dl
--------------------------------------------------------------------------------
/Peppers_recon_Y_sig20_50:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_Y_sig20_50
--------------------------------------------------------------------------------
/Peppers_recon_Y_sig20_50_KSVD:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_Y_sig20_50_KSVD
--------------------------------------------------------------------------------
/Peppers_recon_Y_sig20_50_dl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_Y_sig20_50_dl
--------------------------------------------------------------------------------
/Peppers_recon_Y_sig20_75:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_Y_sig20_75
--------------------------------------------------------------------------------
/Peppers_recon_Y_sig20_75_KSVD:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_Y_sig20_75_KSVD
--------------------------------------------------------------------------------
/Peppers_recon_Y_sig20_75_dl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Peppers_recon_Y_sig20_75_dl
--------------------------------------------------------------------------------
/X_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/X_1.png
--------------------------------------------------------------------------------
/X_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/X_3.png
--------------------------------------------------------------------------------
/X_5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/X_5.png
--------------------------------------------------------------------------------
/Y_c_global_mca:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Y_c_global_mca
--------------------------------------------------------------------------------
/Y_c_local:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Y_c_local
--------------------------------------------------------------------------------
/Y_t_global_mca:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Y_t_global_mca
--------------------------------------------------------------------------------
/Y_t_local:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/Y_t_local
--------------------------------------------------------------------------------
/activity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/activity.png
--------------------------------------------------------------------------------
/activity_threshold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/activity_threshold.png
--------------------------------------------------------------------------------
/barbara.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/barbara.png
--------------------------------------------------------------------------------
/barbara_patches.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/barbara_patches.png
--------------------------------------------------------------------------------
/barbara_sig10:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/barbara_sig10
--------------------------------------------------------------------------------
/barbara_sig10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/barbara_sig10.png
--------------------------------------------------------------------------------
/barbara_sig20:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/barbara_sig20
--------------------------------------------------------------------------------
/barbara_sig20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/barbara_sig20.png
--------------------------------------------------------------------------------
/c_global:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/c_global
--------------------------------------------------------------------------------
/c_global.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/c_global.png
--------------------------------------------------------------------------------
/c_local:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/c_local
--------------------------------------------------------------------------------
/c_local.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/c_local.png
--------------------------------------------------------------------------------
/ch04.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "第4章 追跡アルゴリズムの性能保証\n",
8 | "=="
9 | ]
10 | },
11 | {
12 | "cell_type": "markdown",
13 | "metadata": {},
14 | "source": [
15 | "定理4.1(OMPの最適解保証:二つの直交行列の場合)\n",
16 | "--\n",
17 | "$\\mathbf{\\Psi}$,$\\mathbf{\\Phi}$を$n×n$の直交行列とする.線形連立方程式$\\mathbf{Ax}=[\\mathbf{\\Psi},\\mathbf{\\Phi}]\\mathbf{x}=\\mathbf{b}$に対して,もし,解$\\mathbf{x}$が存在して、最初の$n$個の要素の中に$k_p$個の非ゼロ要素があり,\n",
18 | "$$max(k_p,k_q)<\\frac{1}{2\\mu(\\mathbf{A})}$$\n",
19 | "が成り立つならば,しきい値パラメータ$\\epsilon_0=0$で実行されるOMPは$k_0=k_p+K_q$回の反復で最適解を与える."
20 | ]
21 | },
22 | {
23 | "cell_type": "markdown",
24 | "metadata": {},
25 | "source": [
26 | "定理4.2(基底追跡の最適解保証:二つの直交行列の場合)\n",
27 | "--\n",
28 | "$\\mathbf{\\Psi}$,$\\mathbf{\\Phi}$を$n×n$の直交行列とする.線形連立方程式$\\mathbf{Ax}=[\\mathbf{\\Psi},\\mathbf{\\Phi}]\\mathbf{x}=\\mathbf{b}$に対して,もし,解$\\mathbf{x}$が存在して、最初の$n$個の要素の中に$k_p$個の非ゼロ要素があり,\n",
29 | "$$2\\mu(\\mathbf{A})^2k_pk_q+\\mu(\\mathbf{A})k_p-1<0$$\n",
30 | "が成り立つならば,得られた解は$(P_1)$の一意解であり,${P_0}$の一意解でもある."
31 | ]
32 | },
33 | {
34 | "cell_type": "markdown",
35 | "metadata": {},
36 | "source": [
37 | "線形計画問題(LP)\n",
38 | "--\n",
39 | "\n",
40 | "BP(基底追跡)の解$\\mathbf{x}$より$L_0$ノルムが大きくて$L_1$ノルムが小さい解$\\mathbf{y}$の集合\n",
41 | "\n",
42 | "$C = \\{\\mathbf{y}\\,|\\,\n",
43 | "\\mathbf{y}\\neq \\mathbf{x},\\,\n",
44 | "\\|\\mathbf{y}\\|_1\\leq\\|\\mathbf{x}\\|_1,\\,\n",
45 | "\\|\\mathbf{y}\\|_0\\geq\\|\\mathbf{x}\\|_0,\\,\n",
46 | "\\mathbf{A}(\\mathbf{y}-\\mathbf{x})=\\mathbf{0}\\}\n",
47 | "$\n",
48 | "\n",
49 | "が与えられた条件\n",
50 | "\n",
51 | "$2\\mu(\\mathbf{A})^2k_pk_q+\\mu(\\mathbf{A})k_p-1<0$
\n",
52 | "\n",
53 | "もしくはもっと解釈が容易な条件\n",
54 | "\n",
55 | "$\\|x\\|_0=k_p+k_q<\\frac{\\sqrt{2}-0.5}{\\mu(\\mathbf{A})}$\n",
56 | "\n",
57 | "の元で空となることを証明する"
58 | ]
59 | },
60 | {
61 | "cell_type": "code",
62 | "execution_count": 55,
63 | "metadata": {
64 | "collapsed": false
65 | },
66 | "outputs": [
67 | {
68 | "data": {
69 | "text/plain": [
70 | " fun: 50.0\n",
71 | " message: 'Optimization failed. Unable to find a feasible starting point.'\n",
72 | " nit: 100\n",
73 | " status: 2\n",
74 | " success: False\n",
75 | " x: nan"
76 | ]
77 | },
78 | "execution_count": 55,
79 | "metadata": {},
80 | "output_type": "execute_result"
81 | }
82 | ],
83 | "source": [
84 | "from scipy.optimize import linprog\n",
85 | "\n",
86 | "# パラメータ\n",
87 | "n, kp, kq, mu = 50, 9, 7, 0.1\n",
88 | "\n",
89 | "one_p = [1.] * kp + [0.] * (n - kp)\n",
90 | "one_q = [1.] * kq + [0.] * (n - kq)\n",
91 | "C = np.array(one_p + one_q)\n",
92 | "A_ub = np.diag([1. - mu] * n + [mu - 1.] * n)\n",
93 | "b_ub = np.zeros(2 * n)\n",
94 | "A_eq = np.eye(2 * n)\n",
95 | "b_eq = np.ones(2 * n)\n",
96 | "\n",
97 | "# 最大化したいので負をとる\n",
98 | "C *= -1\n",
99 | "A_ub *= -1\n",
100 | "b_ub *= -1\n",
101 | "A_eq *= -1\n",
102 | "b_eq *= -1\n",
103 | "\n",
104 | "linprog(C, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq=b_eq)"
105 | ]
106 | },
107 | {
108 | "cell_type": "markdown",
109 | "metadata": {},
110 | "source": [
111 | "nanだと…解集合が空であることを示したいからこれでいいのか…"
112 | ]
113 | },
114 | {
115 | "cell_type": "markdown",
116 | "metadata": {},
117 | "source": [
118 | "定理4.3(OMPの最適解保証)\n",
119 | "--\n",
120 | "線形連立方程式$\\mathbf{Ax}=\\mathbf{b}$($n\n",
132 | "(その非ゼロ要素の最小値は$|x_{min}|$,最大値は$|x_{max}|$とする)\n",
133 | "$$\\|\\mathbf{x}\\|_0<\\frac{1}{2}\\left(1+\\frac{1}{\\mu(\\mathbf{A})}\\frac{|x_{min}|}{|x_{max}|}\\right)$$\n",
134 | "を満たせば,しきい値パラメータ$\\epsilon_0=0$で実行されるしきい値アルゴリズムは最適解を与える."
135 | ]
136 | },
137 | {
138 | "cell_type": "markdown",
139 | "metadata": {},
140 | "source": [
141 | "定理4.5(基底追跡の最適解保証)\n",
142 | "--\n",
143 | "線形連立方程式$\\mathbf{Ax}=\\mathbf{b}$($n"
251 | ]
252 | },
253 | "execution_count": 57,
254 | "metadata": {},
255 | "output_type": "execute_result"
256 | },
257 | {
258 | "data": {
259 | "image/png": "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\nkCZvpZTKgv4fu5z8fntIV+sAAAAASUVORK5CYII=\n",
260 | "text/plain": [
261 | ""
262 | ]
263 | },
264 | "metadata": {},
265 | "output_type": "display_data"
266 | }
267 | ],
268 | "source": [
269 | "x = np.linspace(0, 4, 100)\n",
270 | "\n",
271 | "y0 = (-3*x+10)/2\n",
272 | "y1 = -2*x+6\n",
273 | "y2 = -x+4\n",
274 | "y3 = np.ones_like(x)\n",
275 | "\n",
276 | "y4 = np.minimum(y1, y2)\n",
277 | "\n",
278 | "plt.figure()\n",
279 | "plt.plot(x, y0, \"--\", label=\"objective function\")\n",
280 | "plt.plot(x, y1, label=\"2x+y<=6\")\n",
281 | "plt.plot(x, y2, label=\"x+y<=4\")\n",
282 | "plt.plot(x, y3, label=\"y>=1\")\n",
283 | "plt.plot(res.x[0], res.x[1], \"o\")\n",
284 | "plt.fill_between(x, y3, y4, where=y4>y3, facecolor='yellow', alpha=0.3)\n",
285 | "plt.ylim(0, 5)\n",
286 | "plt.legend(loc=0)"
287 | ]
288 | },
289 | {
290 | "cell_type": "markdown",
291 | "metadata": {},
292 | "source": [
293 | "PuLP で解くと以下のようになります。"
294 | ]
295 | },
296 | {
297 | "cell_type": "code",
298 | "execution_count": 58,
299 | "metadata": {
300 | "collapsed": false
301 | },
302 | "outputs": [
303 | {
304 | "data": {
305 | "text/plain": [
306 | "[2.0, 2.0]"
307 | ]
308 | },
309 | "execution_count": 58,
310 | "metadata": {},
311 | "output_type": "execute_result"
312 | }
313 | ],
314 | "source": [
315 | "import pulp\n",
316 | "\n",
317 | "x = pulp.LpVariable(\"x\")\n",
318 | "y = pulp.LpVariable(\"y\")\n",
319 | "problem = pulp.LpProblem(\"A simple maximization objective\", pulp.LpMaximize)\n",
320 | "problem += 3*x + 2*y, \"The objective function\"\n",
321 | "problem += 2*x + y <= 6, \"1st constraint\"\n",
322 | "problem += x + y <= 4, \"2nd constraint\"\n",
323 | "problem += y >= 1, \"3rd constraint\"\n",
324 | "problem.solve()\n",
325 | "\n",
326 | "[x.value(), y.value()]"
327 | ]
328 | },
329 | {
330 | "cell_type": "code",
331 | "execution_count": null,
332 | "metadata": {
333 | "collapsed": true
334 | },
335 | "outputs": [],
336 | "source": []
337 | }
338 | ],
339 | "metadata": {
340 | "kernelspec": {
341 | "display_name": "Python 3",
342 | "language": "python",
343 | "name": "python3"
344 | },
345 | "language_info": {
346 | "codemirror_mode": {
347 | "name": "ipython",
348 | "version": 3
349 | },
350 | "file_extension": ".py",
351 | "mimetype": "text/x-python",
352 | "name": "python",
353 | "nbconvert_exporter": "python",
354 | "pygments_lexer": "ipython3",
355 | "version": "3.5.2"
356 | }
357 | },
358 | "nbformat": 4,
359 | "nbformat_minor": 0
360 | }
361 |
--------------------------------------------------------------------------------
/ch14-denoise.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/ch14-denoise.png
--------------------------------------------------------------------------------
/darakuron.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/darakuron.png
--------------------------------------------------------------------------------
/dct_dictionary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/dct_dictionary.png
--------------------------------------------------------------------------------
/dct_shrinkage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/dct_shrinkage.png
--------------------------------------------------------------------------------
/dct_shrinkage_threshold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/dct_shrinkage_threshold.png
--------------------------------------------------------------------------------
/deblurring.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/deblurring.png
--------------------------------------------------------------------------------
/dist_S.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/dist_S.png
--------------------------------------------------------------------------------
/dist_S_OMP_LARS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/dist_S_OMP_LARS.png
--------------------------------------------------------------------------------
/global_mca.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/global_mca.png
--------------------------------------------------------------------------------
/iteration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/iteration.png
--------------------------------------------------------------------------------
/ksvd_dictionary_barbara.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/ksvd_dictionary_barbara.png
--------------------------------------------------------------------------------
/l2_err.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/l2_err.png
--------------------------------------------------------------------------------
/l2_err_OMP_LARS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/l2_err_OMP_LARS.png
--------------------------------------------------------------------------------
/lambda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/lambda.png
--------------------------------------------------------------------------------
/lena.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/lena.jpg
--------------------------------------------------------------------------------
/lena.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/lena.png
--------------------------------------------------------------------------------
/lena_200_200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/lena_200_200.png
--------------------------------------------------------------------------------
/local_mca.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/local_mca.png
--------------------------------------------------------------------------------
/mask:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/mask
--------------------------------------------------------------------------------
/mask_25:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/mask_50:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/mask_median.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/mask_median.png
--------------------------------------------------------------------------------
/p_l_pca:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/p_l_pca
--------------------------------------------------------------------------------
/path.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/path.png
--------------------------------------------------------------------------------
/peppers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/peppers.png
--------------------------------------------------------------------------------
/recon_bm3d:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_bm3d
--------------------------------------------------------------------------------
/recon_bm3d.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_bm3d.png
--------------------------------------------------------------------------------
/recon_dct_dictionary:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_dct_dictionary
--------------------------------------------------------------------------------
/recon_dct_dictionary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_dct_dictionary.png
--------------------------------------------------------------------------------
/recon_dct_global_shrinkage_curve:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_dct_global_shrinkage_curve
--------------------------------------------------------------------------------
/recon_dct_global_shrinkage_curve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_dct_global_shrinkage_curve.png
--------------------------------------------------------------------------------
/recon_dct_shrink:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_dct_shrink
--------------------------------------------------------------------------------
/recon_dct_shrinkage_curve:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_dct_shrinkage_curve
--------------------------------------------------------------------------------
/recon_dct_shrinkage_curve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_dct_shrinkage_curve.png
--------------------------------------------------------------------------------
/recon_ksvd_dictionary:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_ksvd_dictionary
--------------------------------------------------------------------------------
/recon_ksvd_dictionary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_ksvd_dictionary.png
--------------------------------------------------------------------------------
/recon_nlm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_nlm
--------------------------------------------------------------------------------
/recon_nlm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_nlm.png
--------------------------------------------------------------------------------
/recon_ws:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/recon_ws
--------------------------------------------------------------------------------
/text.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/text.jpg
--------------------------------------------------------------------------------
/wavelet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/wavelet.png
--------------------------------------------------------------------------------
/wavelet_shrinkage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/wavelet_shrinkage.png
--------------------------------------------------------------------------------
/wavelet_shrinkage_threshold.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kibo35/sparse-modeling/56f4263d44224dd08699c7bc854028a53b99871e/wavelet_shrinkage_threshold.png
--------------------------------------------------------------------------------