├── .DS_Store ├── Data ├── .DS_Store ├── I0.bmp ├── I1.bmp └── I2.bmp ├── Figures ├── I0.bmp ├── I1.bmp ├── figure1.png ├── figure2.png ├── figure3.png └── figure4.png ├── README.md ├── Radon-CDT_Demo.ipynb ├── Radon-CDT_Demo_Frechet_Mean.ipynb ├── Radon-CDT_Demo_MNIST.ipynb ├── svgs ├── 002d1c8d6f7bd6452b21706524c5b673.svg ├── 009c5c6e872cda936558aa1391e2980a.svg ├── 066ab7381e7d650225f1730bd6a691a7.svg ├── 088d8e2edfd62b3a9c94103b7752332b.svg ├── 0bdfe8bd3cb6b25542d577159dc3de62.svg ├── 0cbe82a78bb845208169052fcd22e3d1.svg ├── 0d07777bf454d9f941c8facaea255a08.svg ├── 0ea3cec9cd8f8324b87218b762b9a686.svg ├── 12a67427b33187974d4d8bfde354df04.svg ├── 1358cabdf0d481c1d3136e0f96ae0d66.svg ├── 190083ef7a1625fbc75f243cffb9c96d.svg ├── 1a7104381f6205cca28decaf37d42180.svg ├── 1cc5019c20e25f4af278b10609f0574a.svg ├── 1efb47898a7c14b03e4b8d53cc237304.svg ├── 21fd4e8eecd6bdf1a4d3d6bd1fb8d733.svg ├── 2a2097abc9026c829b64577c4de06970.svg ├── 33799619e6a8adb0933941909e268d50.svg ├── 3399c52a5d172ff8ac15b73b689363b8.svg ├── 37634a69c6e56ca1ec7efe3f61465c07.svg ├── 3ee98a0ddf705fc4e453f42e3e2563c6.svg ├── 435f1061aa6f25938c3c3515c083d06c.svg ├── 43d06e17c85890d79a4e36e81fab8328.svg ├── 45de514e4bd2f5ba36f09fff6b549760.svg ├── 4ceae8eec7ac325cd73b832d1af6bf22.svg ├── 5ad8f762edd6de77299fd51a51b5931c.svg ├── 5e257929229ad4fbc8fd8107a6cb33e4.svg ├── 63bb9849783d01d91403bc9a5fea12a2.svg ├── 6406ab477521e17d339e0878746756d7.svg ├── 7211ec64117b386a4d281f03e816f84c.svg ├── 7c74eeb32158ff7c4f67d191b95450fb.svg ├── 82289f06c71b94420b624654501ad06e.svg ├── 86035f674998337e99cf3bd753ab438f.svg ├── 88ba2440e8b83e1f8a6db6af4599ea63.svg ├── 88fbd05154e7d6a65883f20e1b18a817.svg ├── 8a44d333fd9307aaca485044a927c088.svg ├── 97d6b6abab7046031f875d5a2388a7fd.svg ├── 9eff113852463b85a970d2d65d52280c.svg ├── a10ff06f53725bca54c49936f91f5fa5.svg ├── a4fe1ef6edd893e70831c6cf216f5ec3.svg ├── aee9e74580673a1b86cb705eb144212b.svg ├── b8869cc6e30ce71a54d899877ae2d165.svg ├── bb1509c53ed9e94118cb98cd9436ad7f.svg ├── bc2c22455f069a210505b17f5569628a.svg ├── bfd87e6c1d920e5baa94174831278a70.svg ├── d5678db6a0e35236c7037b64736ccf19.svg ├── d906cd9791e4b48a3b848558acda5899.svg ├── db2e04fa41ca5d29f4ff03898514dda5.svg ├── defdb60623c584a375721b4996b31a26.svg ├── ed7a4a2f4460dd0f7144c5861908c90d.svg ├── f1ade1a142928a894aa5d160fa999a1d.svg ├── f4793050b7ef4719465234bb92574613.svg ├── f568e3bda301c41784ffdc1e1bda6086.svg ├── faf70e715418eacd4c2142bd5dba79e4.svg ├── fb6b76d3323483946ea0f3a86521b152.svg └── fd4f10308a1196420be12f4ad2f946f2.svg └── transportBasedTransforms ├── __init__.py ├── __init__.pyc ├── cdt.py ├── cdt.pyc ├── radonCDT.py └── radonCDT.pyc /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/.DS_Store -------------------------------------------------------------------------------- /Data/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Data/.DS_Store -------------------------------------------------------------------------------- /Data/I0.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Data/I0.bmp -------------------------------------------------------------------------------- /Data/I1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Data/I1.bmp -------------------------------------------------------------------------------- /Data/I2.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Data/I2.bmp -------------------------------------------------------------------------------- /Figures/I0.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Figures/I0.bmp -------------------------------------------------------------------------------- /Figures/I1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Figures/I1.bmp -------------------------------------------------------------------------------- /Figures/figure1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Figures/figure1.png -------------------------------------------------------------------------------- /Figures/figure2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Figures/figure2.png -------------------------------------------------------------------------------- /Figures/figure3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Figures/figure3.png -------------------------------------------------------------------------------- /Figures/figure4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/Figures/figure4.png -------------------------------------------------------------------------------- /svgs/009c5c6e872cda936558aa1391e2980a.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /svgs/066ab7381e7d650225f1730bd6a691a7.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /svgs/0d07777bf454d9f941c8facaea255a08.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /svgs/0ea3cec9cd8f8324b87218b762b9a686.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /svgs/12a67427b33187974d4d8bfde354df04.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /svgs/190083ef7a1625fbc75f243cffb9c96d.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /svgs/1a7104381f6205cca28decaf37d42180.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /svgs/1cc5019c20e25f4af278b10609f0574a.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /svgs/1efb47898a7c14b03e4b8d53cc237304.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /svgs/21fd4e8eecd6bdf1a4d3d6bd1fb8d733.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /svgs/2a2097abc9026c829b64577c4de06970.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /svgs/33799619e6a8adb0933941909e268d50.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /svgs/3399c52a5d172ff8ac15b73b689363b8.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /svgs/37634a69c6e56ca1ec7efe3f61465c07.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /svgs/3ee98a0ddf705fc4e453f42e3e2563c6.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /svgs/435f1061aa6f25938c3c3515c083d06c.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /svgs/45de514e4bd2f5ba36f09fff6b549760.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /svgs/63bb9849783d01d91403bc9a5fea12a2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /svgs/6406ab477521e17d339e0878746756d7.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /svgs/7211ec64117b386a4d281f03e816f84c.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /svgs/7c74eeb32158ff7c4f67d191b95450fb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /svgs/82289f06c71b94420b624654501ad06e.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /svgs/86035f674998337e99cf3bd753ab438f.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /svgs/88fbd05154e7d6a65883f20e1b18a817.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /svgs/8a44d333fd9307aaca485044a927c088.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /svgs/97d6b6abab7046031f875d5a2388a7fd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /svgs/9eff113852463b85a970d2d65d52280c.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /svgs/a10ff06f53725bca54c49936f91f5fa5.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /svgs/a4fe1ef6edd893e70831c6cf216f5ec3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /svgs/b8869cc6e30ce71a54d899877ae2d165.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /svgs/bb1509c53ed9e94118cb98cd9436ad7f.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /svgs/bc2c22455f069a210505b17f5569628a.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /svgs/d5678db6a0e35236c7037b64736ccf19.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /svgs/d906cd9791e4b48a3b848558acda5899.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /svgs/ed7a4a2f4460dd0f7144c5861908c90d.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /svgs/f1ade1a142928a894aa5d160fa999a1d.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /svgs/f4793050b7ef4719465234bb92574613.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /svgs/f568e3bda301c41784ffdc1e1bda6086.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /svgs/fb6b76d3323483946ea0f3a86521b152.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /transportBasedTransforms/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | from __future__ import print_function 3 | -------------------------------------------------------------------------------- /transportBasedTransforms/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/transportBasedTransforms/__init__.pyc -------------------------------------------------------------------------------- /transportBasedTransforms/cdt.py: -------------------------------------------------------------------------------- 1 | __author__ = "Soheil Kolouri" 2 | import numpy as np 3 | from scipy import interp 4 | 5 | class CDT: 6 | def __init__(self,dim): 7 | template=np.ones((dim,)) 8 | template=template/template.sum() 9 | self.template=template 10 | self.dim=dim 11 | self.template_CDF=np.cumsum(template) 12 | self.x=np.arange(self.dim) #Discretization of the domain of template 13 | self.xtilde=np.linspace(0,1,self.dim) 14 | self.template_CDF_inverse=interp(self.xtilde,self.template_CDF,self.x) 15 | 16 | def transform(self,I): 17 | """ 18 | transform calculates the transport map, f, that morphs the one-dimensional distribution 19 | I into the template. 20 | input: 21 | I: A one dimensional distributions of size self.dim 22 | output: 23 | The CDT transformation of I 24 | """ 25 | assert self.dim==len(I) 26 | assert not((1.0*I<0).sum()) 27 | # Force I to be a positive probability distribution 28 | eps=1e-5#This small dc level is needed for a numerically unique solution of the transport map 29 | I=I+eps 30 | I=I/I.sum() 31 | #Calculate its CDF 32 | I_CDF=np.cumsum(I) 33 | I_CDF_inverse = interp(self.xtilde,I_CDF, self.x) 34 | u = interp(self.x,self.template_CDF_inverse,self.template_CDF_inverse-I_CDF_inverse) 35 | Ihat= u*np.sqrt(self.template) 36 | return Ihat 37 | 38 | def itransform(self,Ihat): 39 | """ 40 | itransform calculates the inverse of the CDT. It receives a signal in the CDT space 41 | and finds the corresponding one dimensional distribution I from it. 42 | input: 43 | u: Transport displacement map 44 | I0: The template used for calculating the CDT 45 | output: 46 | I: The original distribution 47 | """ 48 | u=Ihat/np.sqrt(self.template) 49 | f=self.x-u 50 | fprime=np.gradient(f) 51 | I = interp(self.x,f, self.template/fprime) 52 | I = I/I.sum() 53 | return I 54 | -------------------------------------------------------------------------------- /transportBasedTransforms/cdt.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/transportBasedTransforms/cdt.pyc -------------------------------------------------------------------------------- /transportBasedTransforms/radonCDT.py: -------------------------------------------------------------------------------- 1 | __author__ = "Soheil Kolouri" 2 | import numpy as np 3 | import cdt as CDT 4 | from scipy import interp 5 | from skimage.transform import radon, iradon 6 | 7 | class RadonCDT: 8 | def __init__(self,theta=np.arange(180)): 9 | self.theta=theta 10 | 11 | def transform(self,I): 12 | """ 13 | transform calculates calculates the Radon transform of the input image 14 | and calculate its CDT with respect to the Radon transform of the template 15 | input: 16 | I: A two-dimensional distribution 17 | output: 18 | The Radon-CDT transformation of I 19 | """ 20 | assert not((1.0*I<0).sum()) 21 | # Force I to be a positive probability distribution 22 | eps=1e-5#This small dc level is needed for a numerically unique solution of the transport map 23 | I=I+eps 24 | I=I/I.sum() 25 | radonI=radon(I,theta=self.theta,circle=False) 26 | self.dim=radonI.shape[0] 27 | Ihat=np.zeros_like(radonI) 28 | self.cdt=CDT.CDT(dim=self.dim) 29 | for i in range(len(self.theta)): 30 | Ihat[:,i]=self.cdt.transform(radonI[:,i]) 31 | return Ihat 32 | 33 | def itransform(self,Ihat): 34 | """ 35 | itransform calculates the inverse of the Radon-CDT. It receives the Radon-CDT 36 | and finds the corresponding two-dimensional distribution I from it. 37 | input: 38 | Ihat: Radon-CDT of I 39 | output: 40 | I: The original distribution 41 | """ 42 | radonI=np.zeros_like(Ihat) 43 | for i in range(len(self.theta)): 44 | radonI[:,i]=self.cdt.itransform(Ihat[:,i]) 45 | I=iradon(radonI,theta=self.theta,circle=False) 46 | return I 47 | -------------------------------------------------------------------------------- /transportBasedTransforms/radonCDT.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/skolouri/Radon-Cumulative-Distribution-Transform/6c4f66d9d5c5eb4ff9a10d29441850ac7b565520/transportBasedTransforms/radonCDT.pyc --------------------------------------------------------------------------------