{"nbformat_minor": 0, "worksheets": [{"cells": [{"source": ["Volumetric Radon Inversion\n", "==========================\n", "\n*Important:* Please read the [installation page](http://gpeyre.github.io/numerical-tours/installation_matlab/) for details about how to install the toolboxes.\n", "$\\newcommand{\\dotp}[2]{\\langle #1, #2 \\rangle}$\n", "$\\newcommand{\\enscond}[2]{\\lbrace #1, #2 \\rbrace}$\n", "$\\newcommand{\\pd}[2]{ \\frac{ \\partial #1}{\\partial #2} }$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\umax}[1]{\\underset{#1}{\\max}\\;}$\n", "$\\newcommand{\\umin}[1]{\\underset{#1}{\\min}\\;}$\n", "$\\newcommand{\\uargmin}[1]{\\underset{#1}{argmin}\\;}$\n", "$\\newcommand{\\norm}[1]{\\|#1\\|}$\n", "$\\newcommand{\\abs}[1]{\\left|#1\\right|}$\n", "$\\newcommand{\\choice}[1]{ \\left\\{ \\begin{array}{l} #1 \\end{array} \\right. }$\n", "$\\newcommand{\\pa}[1]{\\left(#1\\right)}$\n", "$\\newcommand{\\diag}[1]{{diag}\\left( #1 \\right)}$\n", "$\\newcommand{\\qandq}{\\quad\\text{and}\\quad}$\n", "$\\newcommand{\\qwhereq}{\\quad\\text{where}\\quad}$\n", "$\\newcommand{\\qifq}{ \\quad \\text{if} \\quad }$\n", "$\\newcommand{\\qarrq}{ \\quad \\Longrightarrow \\quad }$\n", "$\\newcommand{\\ZZ}{\\mathbb{Z}}$\n", "$\\newcommand{\\CC}{\\mathbb{C}}$\n", "$\\newcommand{\\RR}{\\mathbb{R}}$\n", "$\\newcommand{\\EE}{\\mathbb{E}}$\n", "$\\newcommand{\\Zz}{\\mathcal{Z}}$\n", "$\\newcommand{\\Ww}{\\mathcal{W}}$\n", "$\\newcommand{\\Vv}{\\mathcal{V}}$\n", "$\\newcommand{\\Nn}{\\mathcal{N}}$\n", "$\\newcommand{\\NN}{\\mathcal{N}}$\n", "$\\newcommand{\\Hh}{\\mathcal{H}}$\n", "$\\newcommand{\\Bb}{\\mathcal{B}}$\n", "$\\newcommand{\\Ee}{\\mathcal{E}}$\n", "$\\newcommand{\\Cc}{\\mathcal{C}}$\n", "$\\newcommand{\\Gg}{\\mathcal{G}}$\n", "$\\newcommand{\\Ss}{\\mathcal{S}}$\n", "$\\newcommand{\\Pp}{\\mathcal{P}}$\n", "$\\newcommand{\\Ff}{\\mathcal{F}}$\n", "$\\newcommand{\\Xx}{\\mathcal{X}}$\n", "$\\newcommand{\\Mm}{\\mathcal{M}}$\n", "$\\newcommand{\\Ii}{\\mathcal{I}}$\n", "$\\newcommand{\\Dd}{\\mathcal{D}}$\n", "$\\newcommand{\\Ll}{\\mathcal{L}}$\n", "$\\newcommand{\\Tt}{\\mathcal{T}}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\al}{\\alpha}$\n", "$\\newcommand{\\la}{\\lambda}$\n", "$\\newcommand{\\ga}{\\gamma}$\n", "$\\newcommand{\\Ga}{\\Gamma}$\n", "$\\newcommand{\\La}{\\Lambda}$\n", "$\\newcommand{\\si}{\\sigma}$\n", "$\\newcommand{\\Si}{\\Sigma}$\n", "$\\newcommand{\\be}{\\beta}$\n", "$\\newcommand{\\de}{\\delta}$\n", "$\\newcommand{\\De}{\\Delta}$\n", "$\\newcommand{\\phi}{\\varphi}$\n", "$\\newcommand{\\th}{\\theta}$\n", "$\\newcommand{\\om}{\\omega}$\n", "$\\newcommand{\\Om}{\\Omega}$\n"], "metadata": {}, "cell_type": "markdown"}, {"source": ["This numerical tour explores the reconstruction from 3D tomographic\n", "measurement with TV regularization."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 2, "cell_type": "code", "language": "python", "metadata": {}, "input": ["addpath('toolbox_signal')\n", "addpath('toolbox_general')\n", "addpath('solutions/multidim_6_tomography')"]}, {"source": ["3D Volumetric Datasets\n", "----------------------\n", "\n", "\n", "We load a volumetric data."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 3, "cell_type": "code", "language": "python", "metadata": {}, "input": ["name = 'vessels';\n", "options.nbdims = 3;\n", "M = read_bin(name, options);\n", "M = rescale(M);"]}, {"source": ["size of the image (here it is a cube)."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 4, "cell_type": "code", "language": "python", "metadata": {}, "input": ["n = size(M,1);"]}, {"source": ["Reduce dimensionality"], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "prompt_number": 5, "cell_type": "code", "language": "python", "metadata": {}, "input": ["M = M(1:2:n,1:2:n,1:2:n);\n", "n = n/2;"]}, {"source": ["We can display some horizontal slices."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [{"metadata": {}, "png": "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\nQmCC\n", "output_type": "display_data"}], "cell_type": "code", "language": "python", "metadata": {}, "input": ["slices = round(linspace(10,n-10,4));\n", "clf;\n", "for i=1:length(slices)\n", " s = slices(i);\n", " imageplot( M(:,:,s), strcat(['Z=' num2str(s)]), 2,2,i );\n", "end"]}, {"source": ["We can display an isosurface of the dataset (here we sub-sample to speed\n", "up the computation)."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["sel = 1:2:n;\n", "clf;\n", "isosurface( M(sel,sel,sel), .5);\n", "axis('off');"]}, {"source": ["3D Tomograpic Measurements\n", "--------------------------\n", "Tomographic measurements corresponds to the computation of orthogonal projections (integration along liners)\n", "of the 3D datasets on set of 2D planes. Thanks to the Fourier-slice\n", "theorem, this is equivalent to performing a sub-sampling of the 3D Fourier\n", "transform along planes (orthogonal to the projection directions).\n", "\n", "\n", "Number of projections"], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["P = 12;"]}, {"source": ["Either uniform sampling for P==12, or randomized projection directions, on the sphere."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["if P==12\n", " tau = 0.8506508084;\n", " one = 0.5257311121;\n", " S = [ tau, one, 0;\n", " -tau, one, 0\n", " -tau, -one, 0;\n", " tau, -one, 0;\n", " one, 0 , tau;\n", " one, 0 , -tau;\n", " -one, 0 , -tau;\n", " -one, 0 , tau;\n", " 0 , tau, one;\n", " 0 , -tau, one;\n", " 0 , -tau, -one;\n", " 0 , tau, -one ]';\n", "else\n", " S = randn(3,P);\n", " S = S ./ repmat( sqrt( sum(S.^2,1) ), [3 1]);\n", "end"]}, {"source": ["Display the directions on the sphere."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["clf;\n", "plot3(S(1,:), S(2,:), S(3,:), '.');\n", "axis equal;"]}, {"source": ["The Fourier mask."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["x = [0:n/2-1, -n/2:-1];\n", "[X,Y,Z] = ndgrid(x,x,x);\n", "mask = zeros(n,n,n);\n", "epsilon = .5;\n", "for i=1:P\n", " q = S(:,i);\n", " d = q(1)*X + q(2)*Y + q(3)*Z;\n", " mask( abs(d)<=epsilon ) = 1;\n", "end"]}, {"source": ["Tomographic measurement can thus be intepreted as a selection of a few\n", "Fourier frequencies."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["F = fftn(M);\n", "y = F(mask==1);"]}, {"source": ["Number of measures."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["Q = length(y);\n", "disp(strcat(['Number of measurements Q=' num2str(Q) '.']));\n", "disp(strcat(['Sub-sampling Q/N=' num2str(length(y)/n^3,2) '.']));"]}, {"source": ["The transposed operator corresponds to the pseudo inverse reconstruction\n", "(because the measurement operator is in fact an orthogonal projection).\n", "It is similar to the filtered back-projection (excepted that the Fourier\n", "sub-sampling is now on a discrete grid, which is not really faithful to\n", "the geometry of tomographic acquisition)."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["F1 = zeros(n,n,n);\n", "F1(mask==1) = y;\n", "M1 = real( ifftn(F1) );"]}, {"source": ["Display."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["clf;\n", "for i=1:length(slices)\n", " s = slices(i);\n", " imageplot( clamp(M1(:,:,s)), strcat(['Z=' num2str(s)]), 2,2,i );\n", "end"]}, {"source": ["SNR of the pseudo inverse reconstruction."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["disp(['Pseudo-inverse, SNR=' num2str(snr(M,M1),4) 'dB.']);"]}, {"source": ["3D Total Variation\n", "------------------\n", "Since medical images often have a cartoon morphology, it makes sense to perform the\n", "reconstruction while minimizing the TV norm of the image.\n", "\n", "\n", "To be able to use a gradient descent for the reconstruction, we use a smoothed TV-norm, using a\n", "smoothing parameter epsilon. The smaller, the closer to TV, but the\n", "slower the method is."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["epsilon = 1e-2;"]}, {"source": ["The gradient of the volum is a 3D vector field, and hence a |(n,n,n,3)|\n", "matrix."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["G = grad(M);"]}, {"source": ["Display the gradient as a color image."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["clf;\n", "for i=1:length(slices)\n", " s = slices(i);\n", " imageplot( squeeze(G(:,:,s,:)), strcat(['Z=' num2str(s)]), 2,2,i );\n", "end"]}, {"source": ["Compute the smoothed norm of the gradient. This corresponds to a edge\n", "detector."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["d = sqrt(sum(G.^2,4)+epsilon^2);"]}, {"source": ["Display."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["clf;\n", "for i=1:length(slices)\n", " s = slices(i);\n", " imageplot( squeeze(d(:,:,s,:)), strcat(['Z=' num2str(s)]), 2,2,i );\n", "end"]}, {"source": ["Compute the regularized TV norm."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["tv = sum(d(:));\n", "disp(['TV norm=' num2str(tv) '.']);"]}, {"source": ["TV Reconstruction from Partial 3D Tomoraphic Measurements\n", "---------------------------------------------------------\n", "We perform the reconstruction using a projected gradient descent.\n", "\n", "\n", "Gradient descent step. Should be proportional to |epsilon|."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["tau = epsilon*.2;"]}, {"source": ["Initialize the solution using the pseudo inverse."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["Mtv = M1;"]}, {"source": ["The gradient of the smoothed total variation is minus the divergence of the\n", "normalized gradient of the image."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["G = grad(Mtv);\n", "d = sqrt(sum(G.^2,4)+epsilon^2);\n", "dG = -div( G ./ repmat(d, [1 1 1 3]) );"]}, {"source": ["Display it."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["clf;\n", "for i=1:length(slices)\n", " s = slices(i);\n", " imageplot( dG(:,:,s), strcat(['Z=' num2str(s)]), 2,2,i );\n", "end"]}, {"source": ["Perform the gradient step."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["Mtv = Mtv - tau*dG;"]}, {"source": ["Perform the projection step to impose the known values."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["F = fftn(Mtv);\n", "F(mask==1) = y;\n", "Mtv = real(ifftn(F));"]}, {"source": ["__Exercise 1__\n", "\n", "Perform the projected TV gradient desent, and monitor the epsilon-TV\n", "norm during the iterations.\n", "isplay TV decay"], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["exo1()"]}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["%% Insert your code here."]}, {"source": ["Display."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["clf;\n", "for i=1:length(slices)\n", " s = slices(i);\n", " imageplot( clamp(Mtv(:,:,s)), strcat(['Z=' num2str(s)]), 2,2,i );\n", "end"]}, {"source": ["SNR of the resulting reconstruction."], "metadata": {}, "cell_type": "markdown"}, {"collapsed": false, "outputs": [], "cell_type": "code", "language": "python", "metadata": {}, "input": ["disp(['Total variation, SNR=' num2str(snr(M,Mtv),4) 'dB.']);"]}], "metadata": {}}], "nbformat": 3, "metadata": {"kernelspec": {"name": "matlab_kernel", "language": "matlab", "display_name": "Matlab"}, "language_info": {"mimetype": "text/x-matlab", "name": "matlab", "file_extension": ".m", "help_links": [{"url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md", "text": "MetaKernel Magics"}]}}}