2792 lines (2791 with data), 234.6 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "3d318fd2",
"metadata": {},
"outputs": [],
"source": [
"import pymskt as mskt\n",
"import glob\n",
"import os\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"id": "bcdeaaba",
"metadata": {},
"source": [
"- Get a list of the meshes that we want to include in the model"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "fdc5f1c8",
"metadata": {},
"outputs": [],
"source": [
"loc_meshes = '../../data/femur_meshes_registration/'\n",
"list_mesh_paths = glob.glob(os.path.join(loc_meshes, '*_RIGHT_femur_Nov_02_2021.vtk'))"
]
},
{
"cell_type": "markdown",
"id": "25c140ef",
"metadata": {},
"source": [
"- Run the ICP protocol to find the mesh with the smallest surface distance to all other meshes in the dataset"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "16e8a120",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Starting registrations, there are 5 meshes\n",
"\tStarting target mesh 0\n",
"\t\tStarting source mesh 0\n",
"\t\tStarting source mesh 1\n",
"\t\tStarting source mesh 2\n",
"\t\tStarting source mesh 3\n",
"\t\tStarting source mesh 4\n",
"\tStarting target mesh 1\n",
"\t\tStarting source mesh 0\n",
"\t\tStarting source mesh 1\n",
"\t\tStarting source mesh 2\n",
"\t\tStarting source mesh 3\n",
"\t\tStarting source mesh 4\n",
"\tStarting target mesh 2\n",
"\t\tStarting source mesh 0\n",
"\t\tStarting source mesh 1\n",
"\t\tStarting source mesh 2\n",
"\t\tStarting source mesh 3\n",
"\t\tStarting source mesh 4\n",
"\tStarting target mesh 3\n",
"\t\tStarting source mesh 0\n",
"\t\tStarting source mesh 1\n",
"\t\tStarting source mesh 2\n",
"\t\tStarting source mesh 3\n",
"\t\tStarting source mesh 4\n",
"\tStarting target mesh 4\n",
"\t\tStarting source mesh 0\n",
"\t\tStarting source mesh 1\n",
"\t\tStarting source mesh 2\n",
"\t\tStarting source mesh 3\n",
"\t\tStarting source mesh 4\n",
"Finished all registrations!\n"
]
}
],
"source": [
"find_ref_mesh = mskt.statistics.FindReferenceMeshICP(\n",
" list_mesh_paths=list_mesh_paths\n",
")\n",
"find_ref_mesh.execute()"
]
},
{
"cell_type": "markdown",
"id": "d3ebf142",
"metadata": {},
"source": [
"- Print out the mesh idx (just so we know)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "1f5fdab9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"find_ref_mesh.ref_idx"
]
},
{
"cell_type": "markdown",
"id": "16000531",
"metadata": {},
"source": [
"- Print out the registration error matrix (symmetric surface distance in _mm_).\n",
" - The row indicates the mesh used as the target (our reference)\n",
" - The column indicates the mesh used as the source (what was transformed to our reference). \n",
"- We want the mesh that has the smallest surface errors to all other meshes. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "f9991a53",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[0. , 1.12702556, 1.29678837, 0.81144045, 0.92458922],\n",
" [1.50598792, 0. , 1.58860077, 1.40931963, 1.54795171],\n",
" [1.54729599, 1.40470815, 0. , 1.41524974, 1.41171445],\n",
" [0.90212259, 1.16492056, 1.31291165, 0. , 1.04687463],\n",
" [1.10369228, 1.3528002 , 1.42490595, 1.12489738, 0. ]])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"find_ref_mesh.symm_surface_distances"
]
},
{
"cell_type": "markdown",
"id": "aefae224",
"metadata": {},
"source": [
"- Now, lets calcualte the mean error for each target mesh and print it out. \n",
" - The index with the lowest value will be our template. "
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "4a6076e8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.83196872 1.21037201 1.15579367 0.88536589 1.00125916]\n"
]
}
],
"source": [
"mean_errors = np.mean(find_ref_mesh.symm_surface_distances, axis=1)\n",
"print(mean_errors)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "78d06c45",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'Box Plots of Symm Surface Error for each Template Mesh')"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1152x648 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.figure(figsize=(16,9))\n",
"plt.boxplot(find_ref_mesh.symm_surface_distances.T)\n",
"plt.title('Box Plots of Symm Surface Error for each Template Mesh', fontsize=15)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "e3a18ed5",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Starting registration round 0\n",
"\tRegistering to mesh # 0\n",
"\tRegistering to mesh # 1\n",
"Starting Focusr\n",
"Starting ICP\n",
"Starting to build first graph\n",
"Loaded Mesh 1\n",
"Beginning Eigen Decomposition\n",
"Starting!\n",
"All final eigenvalues are: \n",
"[-1.00380302e-17 2.30590743e-04 3.59687150e-04 5.18765870e-04\n",
" 8.09465157e-04 9.96780572e-04 1.04112064e-03 1.29675662e-03\n",
" 1.43316868e-03 1.64611011e-03 1.92477145e-03 1.93758193e-03\n",
" 2.26726280e-03 2.42458962e-03 2.59780056e-03 2.69616120e-03\n",
" 2.73929823e-03 3.16132168e-03 3.36328921e-03 3.49594233e-03\n",
" 3.70575568e-03 3.89098790e-03 4.01225225e-03 4.17022216e-03]\n",
"------------------------------------------------------------------------\n",
"Final eigenvalues of interest are: \n",
"[0.00023059 0.00035969 0.00051877 0.00080947 0.00099678 0.00104112\n",
" 0.00129676 0.00143317 0.00164611 0.00192477 0.00193758 0.00226726\n",
" 0.00242459 0.0025978 0.00269616 0.0027393 0.00316132 0.00336329\n",
" 0.00349594 0.00370576 0.00389099 0.00401225 0.00417022]\n",
"Computed spectrum 1\n",
"Loaded Mesh 2\n",
"Beginning Eigen Decomposition\n",
"Starting!\n",
"All final eigenvalues are: \n",
"[-9.77669531e-18 2.25805833e-04 3.66459027e-04 5.05447162e-04\n",
" 8.02476563e-04 1.00400922e-03 1.05255896e-03 1.29327148e-03\n",
" 1.42160764e-03 1.68500660e-03 1.89392890e-03 1.94752650e-03\n",
" 2.24977942e-03 2.36843928e-03 2.57285727e-03 2.68403424e-03\n",
" 2.79090514e-03 3.17695294e-03 3.42505867e-03 3.54689362e-03\n",
" 3.70747185e-03 3.87766577e-03 3.97535312e-03 4.04794116e-03]\n",
"------------------------------------------------------------------------\n",
"Final eigenvalues of interest are: \n",
"[0.00022581 0.00036646 0.00050545 0.00080248 0.00100401 0.00105256\n",
" 0.00129327 0.00142161 0.00168501 0.00189393 0.00194753 0.00224978\n",
" 0.00236844 0.00257286 0.00268403 0.00279091 0.00317695 0.00342506\n",
" 0.00354689 0.00370747 0.00387767 0.00397535 0.00404794]\n",
"Computed spectrum 2\n",
"========================================================================\n",
"\n",
"Eigenvector Sorting Results\n",
"\n",
"========================================================================\n",
"The matches for eigenvectors were as follows:\n",
"Target\t| Source\n",
" 0\t| -0 \n",
" 1\t| 1 \n",
" 2\t| -2 \n",
" 3\t| 3 \n",
" 4\t| -4 \n",
" 5\t| 5 \n",
" 6\t| 6 \n",
" 7\t| -7 \n",
" 8\t| 8 \n",
" 9\t| 9 \n",
" 10\t| 10 \n",
" 11\t| 11 \n",
" 12\t| 12 \n",
" 13\t| 13 \n",
" 14\t| -14 \n",
" 15\t| 15 \n",
" 16\t| -16 \n",
" 17\t| -17 \n",
" 18\t| 18 \n",
" 19\t| -19 \n",
" 20\t| -20 \n",
" 21\t| 21 \n",
" 22\t| -22 \n",
"*Negative source values means those eigenvectors were flipped*\n",
" \n",
"Appending Extra Features to Spectral Coords\n",
"Number of features (including spectral) used for registartion: 22\n",
"========================================================================\n",
"\n",
"Non-Rigid (Deformable) Registration Beginning\n",
"\n",
"========================================================================\n",
"Iteration:1\n",
"ML:-25383.578; \tML change (error): 25383.578; \tSigma^2: 0.015; \tSigma^2 change: 0.093\n",
"[ ]\n",
"Iteration:2\n",
"ML:-44627.068; \tML change (error): 19243.490; \tSigma^2: 0.003; \tSigma^2 change: 0.012\n",
"[ ]\n",
"Iteration:3\n",
"ML:-57743.692; \tML change (error): 13116.624; \tSigma^2: 0.002; \tSigma^2 change: 0.001\n",
"[ ]\n",
"Iteration:4\n",
"ML:-59429.619; \tML change (error): 1685.928; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:5\n",
"ML:-59722.445; \tML change (error): 292.826; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:6\n",
"ML:-59829.906; \tML change (error): 107.461; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:7\n",
"ML:-59881.510; \tML change (error): 51.604; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:8\n",
"ML:-59908.649; \tML change (error): 27.139; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:9\n",
"ML:-59926.127; \tML change (error): 17.477; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:10\n",
"ML:-59935.608; \tML change (error): 9.482; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:11\n",
"ML:-59940.320; \tML change (error): 4.711; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:12\n",
"ML:-59943.767; \tML change (error): 3.447; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:13\n",
"ML:-59948.861; \tML change (error): 5.095; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:14\n",
"ML:-59954.978; \tML change (error): 6.117; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:15\n",
"ML:-59958.676; \tML change (error): 3.697; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:16\n",
"ML:-59961.221; \tML change (error): 2.545; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:17\n",
"ML:-59963.449; \tML change (error): 2.228; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:18\n",
"ML:-59965.370; \tML change (error): 1.922; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:19\n",
"ML:-59966.587; \tML change (error): 1.217; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:20\n",
"ML:-59967.286; \tML change (error): 0.698; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:21\n",
"ML:-59967.692; \tML change (error): 0.406; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:22\n",
"ML:-59967.952; \tML change (error): 0.261; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:23\n",
"ML:-59968.138; \tML change (error): 0.185; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:24\n",
"ML:-59968.291; \tML change (error): 0.154; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:25\n",
"ML:-59968.502; \tML change (error): 0.211; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:26\n",
"ML:-59968.877; \tML change (error): 0.375; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:27\n",
"ML:-59969.221; \tML change (error): 0.344; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:28\n",
"ML:-59969.390; \tML change (error): 0.169; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:29\n",
"ML:-59969.464; \tML change (error): 0.074; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[==== ]\n",
"Iteration:30\n",
"ML:-59969.503; \tML change (error): 0.039; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[==== ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:31\n",
"ML:-59969.535; \tML change (error): 0.031; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[==== ]\n",
"Iteration:32\n",
"ML:-59969.572; \tML change (error): 0.038; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[==== ]\n",
"Iteration:33\n",
"ML:-59969.636; \tML change (error): 0.064; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[==== ]\n",
"Iteration:34\n",
"ML:-59969.788; \tML change (error): 0.152; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:35\n",
"ML:-59970.270; \tML change (error): 0.482; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:36\n",
"ML:-59971.465; \tML change (error): 1.195; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:37\n",
"ML:-59973.456; \tML change (error): 1.991; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:38\n",
"ML:-59976.720; \tML change (error): 3.264; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:39\n",
"ML:-59978.241; \tML change (error): 1.521; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:40\n",
"ML:-59979.233; \tML change (error): 0.992; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:41\n",
"ML:-59979.929; \tML change (error): 0.696; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:42\n",
"ML:-59980.282; \tML change (error): 0.354; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====== ]\n",
"Iteration:43\n",
"ML:-59980.411; \tML change (error): 0.128; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:44\n",
"ML:-59980.456; \tML change (error): 0.046; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:45\n",
"ML:-59980.478; \tML change (error): 0.022; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:46\n",
"ML:-59980.493; \tML change (error): 0.015; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====== ]\n",
"Iteration:47\n",
"ML:-59980.506; \tML change (error): 0.013; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====== ]\n",
"Iteration:48\n",
"ML:-59980.517; \tML change (error): 0.011; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====== ]\n",
"Iteration:49\n",
"ML:-59980.527; \tML change (error): 0.010; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======= ]\n",
"Iteration:50\n",
"ML:-59980.535; \tML change (error): 0.008; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======= ]\n",
"Iteration:51\n",
"ML:-59980.542; \tML change (error): 0.007; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======= ]\n",
"Iteration:52\n",
"ML:-59980.548; \tML change (error): 0.006; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======= ]\n",
"Iteration:53\n",
"ML:-59980.553; \tML change (error): 0.005; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======= ]\n",
"Iteration:54\n",
"ML:-59980.557; \tML change (error): 0.004; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======= ]\n",
"Iteration:55\n",
"ML:-59980.561; \tML change (error): 0.004; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======= ]\n",
"Iteration:56\n",
"ML:-59980.564; \tML change (error): 0.003; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:57\n",
"ML:-59980.566; \tML change (error): 0.002; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:58\n",
"ML:-59980.568; \tML change (error): 0.002; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:59\n",
"ML:-59980.570; \tML change (error): 0.002; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:60\n",
"ML:-59980.571; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:61\n",
"ML:-59980.572; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:62\n",
"ML:-59980.573; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:63\n",
"ML:-59980.574; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:64\n",
"ML:-59980.575; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:65\n",
"ML:-59980.575; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:66\n",
"ML:-59980.576; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:67\n",
"ML:-59980.576; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:68\n",
"ML:-59980.576; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:69\n",
"ML:-59980.577; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:70\n",
"ML:-59980.577; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:71\n",
"ML:-59980.577; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:72\n",
"ML:-59980.577; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:73\n",
"ML:-59980.577; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:74\n",
"ML:-59980.577; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:75\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:76\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:77\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:78\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:79\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:80\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:81\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:82\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:83\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:84\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:85\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:86\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:87\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:88\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:89\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:90\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:91\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:92\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:93\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:94\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:95\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:96\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:97\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:98\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:99\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:100\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:101\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:102\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:103\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:104\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:105\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:106\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:107\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:108\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:109\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:110\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:111\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:112\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"Iteration:113\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"Iteration:114\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"Iteration:115\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"Iteration:116\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================ ]\n",
"Iteration:117\n",
"ML:-59980.578; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"========================================================================\n",
"Registration Performance Metrics\n",
"========================================================================\n",
"Time to initialize EM: 0.032919883728027344\n",
"Time to initialize registration: 1.7132768630981445\n",
"Average Expectation Time: 0.0348 +/- 0.0019\n",
"Average Maximization Time: 0.0475 +/- 0.0218\n",
"Maximization Times - Per individual step\n",
"Average Update Transform Time: 0.0419 +/- 0.0196\n",
"Average Transform Time: 0.0043 +/- 0.0055\n",
"Average Update Variance Time: 0.0013 +/- 0.0014\n",
"\n",
"Number of iterations performed: 117\n",
"Error at time of finish: 3.6452547647058964e-09\n",
"Number of unique correspondences: 16581\n",
"Number of unique correspondences after smoothing: 17399\n",
"\tRegistering to mesh # 2\n",
"Starting Focusr\n",
"Starting ICP\n",
"Starting to build first graph\n",
"Loaded Mesh 1\n",
"Beginning Eigen Decomposition\n",
"Starting!\n",
"Fiedler found, not enough eig_vals - Restarting\n",
"Starting!\n",
"All final eigenvalues are: \n",
"[-9.60965375e-18 -1.29246971e-26 2.30242286e-04 3.70873864e-04\n",
" 5.10618946e-04 8.14318277e-04 9.84091783e-04 1.01933134e-03\n",
" 1.34263521e-03 1.41044018e-03 1.65304519e-03 1.85706793e-03\n",
" 1.90744825e-03 2.25395821e-03 2.44979782e-03 2.63979625e-03\n",
" 2.70590420e-03 2.73451827e-03 3.08402586e-03 3.31964338e-03\n",
" 3.54429205e-03 3.69893285e-03 3.83769255e-03 3.98455989e-03\n",
" 4.13351412e-03 4.35346866e-03]\n",
"------------------------------------------------------------------------\n",
"Final eigenvalues of interest are: \n",
"[0.00023024 0.00037087 0.00051062 0.00081432 0.00098409 0.00101933\n",
" 0.00134264 0.00141044 0.00165305 0.00185707 0.00190745 0.00225396\n",
" 0.0024498 0.0026398 0.0027059 0.00273452 0.00308403 0.00331964\n",
" 0.00354429 0.00369893 0.00383769 0.00398456 0.00413351]\n",
"Computed spectrum 1\n",
"Loaded Mesh 2\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Beginning Eigen Decomposition\n",
"Starting!\n",
"All final eigenvalues are: \n",
"[-9.77669535e-18 2.25805833e-04 3.66459027e-04 5.05447162e-04\n",
" 8.02476563e-04 1.00400922e-03 1.05255896e-03 1.29327148e-03\n",
" 1.42160764e-03 1.68500660e-03 1.89392890e-03 1.94752650e-03\n",
" 2.24977942e-03 2.36843928e-03 2.57285727e-03 2.68403424e-03\n",
" 2.79090514e-03 3.17695294e-03 3.42505867e-03 3.54689362e-03\n",
" 3.70747185e-03 3.87766577e-03 3.97535312e-03 4.04794116e-03]\n",
"------------------------------------------------------------------------\n",
"Final eigenvalues of interest are: \n",
"[0.00022581 0.00036646 0.00050545 0.00080248 0.00100401 0.00105256\n",
" 0.00129327 0.00142161 0.00168501 0.00189393 0.00194753 0.00224978\n",
" 0.00236844 0.00257286 0.00268403 0.00279091 0.00317695 0.00342506\n",
" 0.00354689 0.00370747 0.00387767 0.00397535 0.00404794]\n",
"Computed spectrum 2\n",
"========================================================================\n",
"\n",
"Eigenvector Sorting Results\n",
"\n",
"========================================================================\n",
"The matches for eigenvectors were as follows:\n",
"Target\t| Source\n",
" 0\t| -0 \n",
" 1\t| 1 \n",
" 2\t| -2 \n",
" 3\t| 3 \n",
" 4\t| -4 \n",
" 5\t| -5 \n",
" 6\t| -6 \n",
" 7\t| 7 \n",
" 8\t| -8 \n",
" 9\t| -10 \n",
" 10\t| 9 \n",
" 11\t| -11 \n",
" 12\t| 12 \n",
" 13\t| 13 \n",
" 14\t| -14 \n",
" 15\t| 15 \n",
" 16\t| -16 \n",
" 17\t| -17 \n",
" 18\t| -18 \n",
" 19\t| 19 \n",
" 20\t| 20 \n",
" 21\t| 21 \n",
" 22\t| 22 \n",
"*Negative source values means those eigenvectors were flipped*\n",
" \n",
"Appending Extra Features to Spectral Coords\n",
"Number of features (including spectral) used for registartion: 22\n",
"========================================================================\n",
"\n",
"Non-Rigid (Deformable) Registration Beginning\n",
"\n",
"========================================================================\n",
"Iteration:1\n",
"ML:-25455.810; \tML change (error): 25455.810; \tSigma^2: 0.015; \tSigma^2 change: 0.094\n",
"[ ]\n",
"Iteration:2\n",
"ML:-44364.435; \tML change (error): 18908.625; \tSigma^2: 0.004; \tSigma^2 change: 0.011\n",
"[ ]\n",
"Iteration:3\n",
"ML:-54760.616; \tML change (error): 10396.181; \tSigma^2: 0.002; \tSigma^2 change: 0.001\n",
"[ ]\n",
"Iteration:4\n",
"ML:-56103.704; \tML change (error): 1343.088; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:5\n",
"ML:-56438.140; \tML change (error): 334.436; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:6\n",
"ML:-56577.309; \tML change (error): 139.169; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:7\n",
"ML:-56650.292; \tML change (error): 72.982; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:8\n",
"ML:-56689.944; \tML change (error): 39.652; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:9\n",
"ML:-56724.147; \tML change (error): 34.203; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:10\n",
"ML:-56752.060; \tML change (error): 27.913; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:11\n",
"ML:-56776.685; \tML change (error): 24.625; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:12\n",
"ML:-56799.797; \tML change (error): 23.112; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:13\n",
"ML:-56818.996; \tML change (error): 19.199; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:14\n",
"ML:-56837.008; \tML change (error): 18.012; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:15\n",
"ML:-56853.070; \tML change (error): 16.063; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:16\n",
"ML:-56862.142; \tML change (error): 9.072; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:17\n",
"ML:-56870.479; \tML change (error): 8.337; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:18\n",
"ML:-56876.799; \tML change (error): 6.320; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:19\n",
"ML:-56880.957; \tML change (error): 4.158; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:20\n",
"ML:-56884.245; \tML change (error): 3.288; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:21\n",
"ML:-56886.862; \tML change (error): 2.617; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:22\n",
"ML:-56888.782; \tML change (error): 1.920; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:23\n",
"ML:-56890.295; \tML change (error): 1.513; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:24\n",
"ML:-56891.533; \tML change (error): 1.238; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:25\n",
"ML:-56892.547; \tML change (error): 1.014; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:26\n",
"ML:-56893.338; \tML change (error): 0.790; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:27\n",
"ML:-56893.925; \tML change (error): 0.587; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:28\n",
"ML:-56894.357; \tML change (error): 0.432; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:29\n",
"ML:-56894.683; \tML change (error): 0.326; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:30\n",
"ML:-56894.940; \tML change (error): 0.257; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:31\n",
"ML:-56895.148; \tML change (error): 0.208; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:32\n",
"ML:-56895.312; \tML change (error): 0.164; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:33\n",
"ML:-56895.437; \tML change (error): 0.125; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:34\n",
"ML:-56895.535; \tML change (error): 0.098; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:35\n",
"ML:-56895.619; \tML change (error): 0.085; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:36\n",
"ML:-56895.715; \tML change (error): 0.096; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:37\n",
"ML:-56895.881; \tML change (error): 0.166; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:38\n",
"ML:-56896.175; \tML change (error): 0.294; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:39\n",
"ML:-56896.463; \tML change (error): 0.288; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:40\n",
"ML:-56896.634; \tML change (error): 0.172; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:41\n",
"ML:-56896.741; \tML change (error): 0.107; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:42\n",
"ML:-56896.819; \tML change (error): 0.078; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====== ]\n",
"Iteration:43\n",
"ML:-56896.881; \tML change (error): 0.061; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====== ]\n",
"Iteration:44\n",
"ML:-56896.929; \tML change (error): 0.048; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====== ]\n",
"Iteration:45\n",
"ML:-56896.965; \tML change (error): 0.037; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====== ]\n",
"Iteration:46\n",
"ML:-56896.993; \tML change (error): 0.027; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====== ]\n",
"Iteration:47\n",
"ML:-56897.013; \tML change (error): 0.021; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:48\n",
"ML:-56897.030; \tML change (error): 0.016; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:49\n",
"ML:-56897.043; \tML change (error): 0.013; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:50\n",
"ML:-56897.054; \tML change (error): 0.011; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:51\n",
"ML:-56897.063; \tML change (error): 0.010; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:52\n",
"ML:-56897.073; \tML change (error): 0.009; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:53\n",
"ML:-56897.082; \tML change (error): 0.009; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:54\n",
"ML:-56897.092; \tML change (error): 0.010; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:55\n",
"ML:-56897.103; \tML change (error): 0.011; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:56\n",
"ML:-56897.114; \tML change (error): 0.012; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======== ]\n",
"Iteration:57\n",
"ML:-56897.128; \tML change (error): 0.013; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:58\n",
"ML:-56897.143; \tML change (error): 0.015; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:59\n",
"ML:-56897.161; \tML change (error): 0.018; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:60\n",
"ML:-56897.180; \tML change (error): 0.020; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:61\n",
"ML:-56897.201; \tML change (error): 0.021; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:62\n",
"ML:-56897.223; \tML change (error): 0.021; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:63\n",
"ML:-56897.243; \tML change (error): 0.020; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:64\n",
"ML:-56897.260; \tML change (error): 0.018; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:65\n",
"ML:-56897.275; \tML change (error): 0.015; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:66\n",
"ML:-56897.287; \tML change (error): 0.012; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:67\n",
"ML:-56897.297; \tML change (error): 0.010; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:68\n",
"ML:-56897.305; \tML change (error): 0.008; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:69\n",
"ML:-56897.311; \tML change (error): 0.006; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:70\n",
"ML:-56897.316; \tML change (error): 0.005; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:71\n",
"ML:-56897.320; \tML change (error): 0.004; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:72\n",
"ML:-56897.323; \tML change (error): 0.004; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:73\n",
"ML:-56897.326; \tML change (error): 0.003; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:74\n",
"ML:-56897.329; \tML change (error): 0.003; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:75\n",
"ML:-56897.332; \tML change (error): 0.003; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:76\n",
"ML:-56897.335; \tML change (error): 0.003; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:77\n",
"ML:-56897.338; \tML change (error): 0.003; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:78\n",
"ML:-56897.341; \tML change (error): 0.003; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:79\n",
"ML:-56897.344; \tML change (error): 0.004; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:80\n",
"ML:-56897.349; \tML change (error): 0.004; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:81\n",
"ML:-56897.354; \tML change (error): 0.006; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:82\n",
"ML:-56897.362; \tML change (error): 0.007; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:83\n",
"ML:-56897.372; \tML change (error): 0.010; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:84\n",
"ML:-56897.386; \tML change (error): 0.015; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============ ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:85\n",
"ML:-56897.409; \tML change (error): 0.022; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:86\n",
"ML:-56897.444; \tML change (error): 0.036; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:87\n",
"ML:-56897.502; \tML change (error): 0.058; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:88\n",
"ML:-56897.593; \tML change (error): 0.091; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:89\n",
"ML:-56897.719; \tML change (error): 0.126; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:90\n",
"ML:-56897.856; \tML change (error): 0.137; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:91\n",
"ML:-56897.971; \tML change (error): 0.115; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:92\n",
"ML:-56898.053; \tML change (error): 0.082; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:93\n",
"ML:-56898.112; \tML change (error): 0.059; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:94\n",
"ML:-56898.161; \tML change (error): 0.049; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:95\n",
"ML:-56898.205; \tML change (error): 0.044; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:96\n",
"ML:-56898.245; \tML change (error): 0.040; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:97\n",
"ML:-56898.280; \tML change (error): 0.034; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:98\n",
"ML:-56898.307; \tML change (error): 0.027; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:99\n",
"ML:-56898.327; \tML change (error): 0.020; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:100\n",
"ML:-56898.342; \tML change (error): 0.015; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:101\n",
"ML:-56898.353; \tML change (error): 0.011; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:102\n",
"ML:-56898.361; \tML change (error): 0.008; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:103\n",
"ML:-56898.368; \tML change (error): 0.007; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:104\n",
"ML:-56898.375; \tML change (error): 0.007; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============== ]\n",
"Iteration:105\n",
"ML:-56898.382; \tML change (error): 0.007; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============== ]\n",
"Iteration:106\n",
"ML:-56898.392; \tML change (error): 0.010; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============== ]\n",
"Iteration:107\n",
"ML:-56898.407; \tML change (error): 0.015; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============== ]\n",
"Iteration:108\n",
"ML:-56898.435; \tML change (error): 0.028; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:109\n",
"ML:-56898.499; \tML change (error): 0.063; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:110\n",
"ML:-56898.663; \tML change (error): 0.165; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:111\n",
"ML:-56899.080; \tML change (error): 0.417; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:112\n",
"ML:-56899.752; \tML change (error): 0.672; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"Iteration:113\n",
"ML:-56900.214; \tML change (error): 0.462; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"Iteration:114\n",
"ML:-56900.408; \tML change (error): 0.194; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"Iteration:115\n",
"ML:-56900.493; \tML change (error): 0.085; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================ ]\n",
"Iteration:116\n",
"ML:-56900.535; \tML change (error): 0.042; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================ ]\n",
"Iteration:117\n",
"ML:-56900.561; \tML change (error): 0.026; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================ ]\n",
"Iteration:118\n",
"ML:-56900.580; \tML change (error): 0.019; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================ ]\n",
"Iteration:119\n",
"ML:-56900.597; \tML change (error): 0.017; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================= ]\n",
"Iteration:120\n",
"ML:-56900.613; \tML change (error): 0.016; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================= ]\n",
"Iteration:121\n",
"ML:-56900.630; \tML change (error): 0.017; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================= ]\n",
"Iteration:122\n",
"ML:-56900.650; \tML change (error): 0.020; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================= ]\n",
"Iteration:123\n",
"ML:-56900.675; \tML change (error): 0.025; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================= ]\n",
"Iteration:124\n",
"ML:-56900.708; \tML change (error): 0.033; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================= ]\n",
"Iteration:125\n",
"ML:-56900.752; \tML change (error): 0.044; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================== ]\n",
"Iteration:126\n",
"ML:-56900.812; \tML change (error): 0.060; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================== ]\n",
"Iteration:127\n",
"ML:-56900.894; \tML change (error): 0.082; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================== ]\n",
"Iteration:128\n",
"ML:-56901.009; \tML change (error): 0.115; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================== ]\n",
"Iteration:129\n",
"ML:-56901.174; \tML change (error): 0.165; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================== ]\n",
"Iteration:130\n",
"ML:-56901.409; \tML change (error): 0.235; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================== ]\n",
"Iteration:131\n",
"ML:-56901.699; \tML change (error): 0.290; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================== ]\n",
"Iteration:132\n",
"ML:-56901.955; \tML change (error): 0.256; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=================== ]\n",
"Iteration:133\n",
"ML:-56902.109; \tML change (error): 0.154; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=================== ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:134\n",
"ML:-56902.189; \tML change (error): 0.080; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=================== ]\n",
"Iteration:135\n",
"ML:-56902.230; \tML change (error): 0.041; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=================== ]\n",
"Iteration:136\n",
"ML:-56902.251; \tML change (error): 0.021; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=================== ]\n",
"Iteration:137\n",
"ML:-56902.262; \tML change (error): 0.011; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=================== ]\n",
"Iteration:138\n",
"ML:-56902.268; \tML change (error): 0.006; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=================== ]\n",
"Iteration:139\n",
"ML:-56902.272; \tML change (error): 0.004; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==================== ]\n",
"Iteration:140\n",
"ML:-56902.275; \tML change (error): 0.002; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==================== ]\n",
"Iteration:141\n",
"ML:-56902.276; \tML change (error): 0.002; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==================== ]\n",
"Iteration:142\n",
"ML:-56902.277; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==================== ]\n",
"Iteration:143\n",
"ML:-56902.278; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==================== ]\n",
"Iteration:144\n",
"ML:-56902.279; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==================== ]\n",
"Iteration:145\n",
"ML:-56902.279; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==================== ]\n",
"Iteration:146\n",
"ML:-56902.279; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===================== ]\n",
"Iteration:147\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===================== ]\n",
"Iteration:148\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===================== ]\n",
"Iteration:149\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===================== ]\n",
"Iteration:150\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===================== ]\n",
"Iteration:151\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===================== ]\n",
"Iteration:152\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===================== ]\n",
"Iteration:153\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====================== ]\n",
"Iteration:154\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====================== ]\n",
"Iteration:155\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====================== ]\n",
"Iteration:156\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====================== ]\n",
"Iteration:157\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[====================== ]\n",
"Iteration:158\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====================== ]\n",
"Iteration:159\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====================== ]\n",
"Iteration:160\n",
"ML:-56902.280; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================= ]\n",
"Iteration:161\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================= ]\n",
"Iteration:162\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================= ]\n",
"Iteration:163\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================= ]\n",
"Iteration:164\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================= ]\n",
"Iteration:165\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================= ]\n",
"Iteration:166\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================= ]\n",
"Iteration:167\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================== ]\n",
"Iteration:168\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================== ]\n",
"Iteration:169\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================== ]\n",
"Iteration:170\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================== ]\n",
"Iteration:171\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================== ]\n",
"Iteration:172\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================== ]\n",
"Iteration:173\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======================== ]\n",
"Iteration:174\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================= ]\n",
"Iteration:175\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================= ]\n",
"Iteration:176\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================= ]\n",
"Iteration:177\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================= ]\n",
"Iteration:178\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================= ]\n",
"Iteration:179\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================= ]\n",
"Iteration:180\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================= ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:181\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================== ]\n",
"Iteration:182\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================== ]\n",
"Iteration:183\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================== ]\n",
"Iteration:184\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================== ]\n",
"Iteration:185\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================== ]\n",
"Iteration:186\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================== ]\n",
"Iteration:187\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========================== ]\n",
"Iteration:188\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========================== ]\n",
"Iteration:189\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========================== ]\n",
"Iteration:190\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========================== ]\n",
"Iteration:191\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========================== ]\n",
"Iteration:192\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========================== ]\n",
"Iteration:193\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========================== ]\n",
"Iteration:194\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========================== ]\n",
"Iteration:195\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================ ]\n",
"Iteration:196\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================ ]\n",
"Iteration:197\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================ ]\n",
"Iteration:198\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================ ]\n",
"Iteration:199\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================ ]\n",
"Iteration:200\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================ ]\n",
"Iteration:201\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============================ ]\n",
"Iteration:202\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================= ]\n",
"Iteration:203\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================= ]\n",
"Iteration:204\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================= ]\n",
"Iteration:205\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================= ]\n",
"Iteration:206\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================= ]\n",
"Iteration:207\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================= ]\n",
"Iteration:208\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============================= ]\n",
"Iteration:209\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================== ]\n",
"Iteration:210\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================== ]\n",
"Iteration:211\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================== ]\n",
"Iteration:212\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============================== ]\n",
"Iteration:213\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============================== ]\n",
"Iteration:214\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============================== ]\n",
"Iteration:215\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============================== ]\n",
"Iteration:216\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============================== ]\n",
"Iteration:217\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============================== ]\n",
"Iteration:218\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============================== ]\n",
"Iteration:219\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============================== ]\n",
"Iteration:220\n",
"ML:-56902.281; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============================== ]\n",
"========================================================================\n",
"Registration Performance Metrics\n",
"========================================================================\n",
"Time to initialize EM: 0.022806882858276367\n",
"Time to initialize registration: 1.6212968826293945\n",
"Average Expectation Time: 0.0297 +/- 0.0008\n",
"Average Maximization Time: 0.0330 +/- 0.0278\n",
"Maximization Times - Per individual step\n",
"Average Update Transform Time: 0.0283 +/- 0.0262\n",
"Average Transform Time: 0.0034 +/- 0.0054\n",
"Average Update Variance Time: 0.0012 +/- 0.0018\n",
"\n",
"Number of iterations performed: 220\n",
"Error at time of finish: 1.8189894035458565e-09\n",
"Number of unique correspondences: 16047\n",
"Number of unique correspondences after smoothing: 17067\n",
"\tRegistering to mesh # 3\n",
"Starting Focusr\n",
"Starting ICP\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Starting to build first graph\n",
"Loaded Mesh 1\n",
"Beginning Eigen Decomposition\n",
"Starting!\n",
"Fiedler found, not enough eig_vals - Restarting\n",
"Starting!\n",
"All final eigenvalues are: \n",
"[ 2.58493941e-26 -9.95402367e-18 2.16434150e-04 3.74870297e-04\n",
" 5.20945248e-04 8.11280264e-04 9.73219257e-04 1.01900552e-03\n",
" 1.33789746e-03 1.44057968e-03 1.66427915e-03 1.90443652e-03\n",
" 1.93856786e-03 2.20695959e-03 2.41504104e-03 2.58386775e-03\n",
" 2.69491148e-03 2.77586788e-03 3.12725021e-03 3.43023409e-03\n",
" 3.47745739e-03 3.66871050e-03 3.83583874e-03 4.04215722e-03\n",
" 4.12104550e-03 4.37633647e-03]\n",
"------------------------------------------------------------------------\n",
"Final eigenvalues of interest are: \n",
"[0.00021643 0.00037487 0.00052095 0.00081128 0.00097322 0.00101901\n",
" 0.0013379 0.00144058 0.00166428 0.00190444 0.00193857 0.00220696\n",
" 0.00241504 0.00258387 0.00269491 0.00277587 0.00312725 0.00343023\n",
" 0.00347746 0.00366871 0.00383584 0.00404216 0.00412105]\n",
"Computed spectrum 1\n",
"Loaded Mesh 2\n",
"Beginning Eigen Decomposition\n",
"Starting!\n",
"All final eigenvalues are: \n",
"[-9.77669531e-18 2.25805833e-04 3.66459027e-04 5.05447162e-04\n",
" 8.02476563e-04 1.00400922e-03 1.05255896e-03 1.29327148e-03\n",
" 1.42160764e-03 1.68500660e-03 1.89392890e-03 1.94752650e-03\n",
" 2.24977942e-03 2.36843928e-03 2.57285727e-03 2.68403424e-03\n",
" 2.79090514e-03 3.17695294e-03 3.42505867e-03 3.54689362e-03\n",
" 3.70747185e-03 3.87766577e-03 3.97535312e-03 4.04794116e-03]\n",
"------------------------------------------------------------------------\n",
"Final eigenvalues of interest are: \n",
"[0.00022581 0.00036646 0.00050545 0.00080248 0.00100401 0.00105256\n",
" 0.00129327 0.00142161 0.00168501 0.00189393 0.00194753 0.00224978\n",
" 0.00236844 0.00257286 0.00268403 0.00279091 0.00317695 0.00342506\n",
" 0.00354689 0.00370747 0.00387767 0.00397535 0.00404794]\n",
"Computed spectrum 2\n",
"========================================================================\n",
"\n",
"Eigenvector Sorting Results\n",
"\n",
"========================================================================\n",
"The matches for eigenvectors were as follows:\n",
"Target\t| Source\n",
" 0\t| -0 \n",
" 1\t| 1 \n",
" 2\t| -2 \n",
" 3\t| 3 \n",
" 4\t| -4 \n",
" 5\t| 5 \n",
" 6\t| 6 \n",
" 7\t| -7 \n",
" 8\t| 8 \n",
" 9\t| -9 \n",
" 10\t| 10 \n",
" 11\t| 11 \n",
" 12\t| -12 \n",
" 13\t| 13 \n",
" 14\t| 14 \n",
" 15\t| -15 \n",
" 16\t| 16 \n",
" 17\t| 17 \n",
" 18\t| 18 \n",
" 19\t| 19 \n",
" 20\t| 20 \n",
" 21\t| -21 \n",
" 22\t| 22 \n",
"*Negative source values means those eigenvectors were flipped*\n",
" \n",
"Appending Extra Features to Spectral Coords\n",
"Number of features (including spectral) used for registartion: 22\n",
"========================================================================\n",
"\n",
"Non-Rigid (Deformable) Registration Beginning\n",
"\n",
"========================================================================\n",
"Iteration:1\n",
"ML:-26168.453; \tML change (error): 26168.453; \tSigma^2: 0.012; \tSigma^2 change: 0.097\n",
"[ ]\n",
"Iteration:2\n",
"ML:-47279.982; \tML change (error): 21111.529; \tSigma^2: 0.002; \tSigma^2 change: 0.009\n",
"[ ]\n",
"Iteration:3\n",
"ML:-58662.055; \tML change (error): 11382.073; \tSigma^2: 0.002; \tSigma^2 change: 0.001\n",
"[ ]\n",
"Iteration:4\n",
"ML:-59762.601; \tML change (error): 1100.546; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:5\n",
"ML:-59995.472; \tML change (error): 232.871; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:6\n",
"ML:-60065.296; \tML change (error): 69.824; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:7\n",
"ML:-60097.469; \tML change (error): 32.173; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:8\n",
"ML:-60110.305; \tML change (error): 12.836; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:9\n",
"ML:-60117.015; \tML change (error): 6.710; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:10\n",
"ML:-60125.573; \tML change (error): 8.558; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:11\n",
"ML:-60134.096; \tML change (error): 8.523; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:12\n",
"ML:-60141.340; \tML change (error): 7.244; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:13\n",
"ML:-60144.511; \tML change (error): 3.171; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:14\n",
"ML:-60147.156; \tML change (error): 2.646; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:15\n",
"ML:-60148.975; \tML change (error): 1.818; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:16\n",
"ML:-60150.364; \tML change (error): 1.389; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:17\n",
"ML:-60151.615; \tML change (error): 1.251; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:18\n",
"ML:-60152.714; \tML change (error): 1.098; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:19\n",
"ML:-60153.367; \tML change (error): 0.654; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:20\n",
"ML:-60153.786; \tML change (error): 0.419; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:21\n",
"ML:-60154.018; \tML change (error): 0.231; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=== ]\n",
"Iteration:22\n",
"ML:-60154.152; \tML change (error): 0.135; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=== ]\n",
"Iteration:23\n",
"ML:-60154.253; \tML change (error): 0.101; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=== ]\n",
"Iteration:24\n",
"ML:-60154.354; \tML change (error): 0.101; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=== ]\n",
"Iteration:25\n",
"ML:-60154.481; \tML change (error): 0.127; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:26\n",
"ML:-60154.659; \tML change (error): 0.178; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:27\n",
"ML:-60154.922; \tML change (error): 0.262; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:28\n",
"ML:-60155.277; \tML change (error): 0.356; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:29\n",
"ML:-60155.647; \tML change (error): 0.369; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:30\n",
"ML:-60155.942; \tML change (error): 0.295; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:31\n",
"ML:-60156.184; \tML change (error): 0.242; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:32\n",
"ML:-60156.426; \tML change (error): 0.242; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:33\n",
"ML:-60156.658; \tML change (error): 0.232; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:34\n",
"ML:-60156.807; \tML change (error): 0.149; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:35\n",
"ML:-60156.880; \tML change (error): 0.073; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:36\n",
"ML:-60156.924; \tML change (error): 0.045; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:37\n",
"ML:-60156.954; \tML change (error): 0.030; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[===== ]\n",
"Iteration:38\n",
"ML:-60156.974; \tML change (error): 0.020; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:39\n",
"ML:-60156.989; \tML change (error): 0.015; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:40\n",
"ML:-60157.002; \tML change (error): 0.012; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:41\n",
"ML:-60157.012; \tML change (error): 0.010; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:42\n",
"ML:-60157.020; \tML change (error): 0.009; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:43\n",
"ML:-60157.028; \tML change (error): 0.008; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:44\n",
"ML:-60157.035; \tML change (error): 0.007; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:45\n",
"ML:-60157.042; \tML change (error): 0.007; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:46\n",
"ML:-60157.049; \tML change (error): 0.007; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:47\n",
"ML:-60157.056; \tML change (error): 0.007; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:48\n",
"ML:-60157.064; \tML change (error): 0.008; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:49\n",
"ML:-60157.072; \tML change (error): 0.008; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:50\n",
"ML:-60157.082; \tML change (error): 0.010; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:51\n",
"ML:-60157.094; \tML change (error): 0.012; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:52\n",
"ML:-60157.111; \tML change (error): 0.017; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:53\n",
"ML:-60157.137; \tML change (error): 0.025; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:54\n",
"ML:-60157.180; \tML change (error): 0.043; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:55\n",
"ML:-60157.262; \tML change (error): 0.082; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:56\n",
"ML:-60157.437; \tML change (error): 0.175; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:57\n",
"ML:-60157.806; \tML change (error): 0.369; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:58\n",
"ML:-60158.326; \tML change (error): 0.520; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:59\n",
"ML:-60158.573; \tML change (error): 0.247; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:60\n",
"ML:-60158.654; \tML change (error): 0.081; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:61\n",
"ML:-60158.708; \tML change (error): 0.054; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:62\n",
"ML:-60158.746; \tML change (error): 0.038; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[======== ]\n",
"Iteration:63\n",
"ML:-60158.784; \tML change (error): 0.038; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:64\n",
"ML:-60158.825; \tML change (error): 0.042; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:65\n",
"ML:-60158.870; \tML change (error): 0.045; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:66\n",
"ML:-60158.913; \tML change (error): 0.043; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:67\n",
"ML:-60158.950; \tML change (error): 0.036; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:68\n",
"ML:-60158.976; \tML change (error): 0.027; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:69\n",
"ML:-60158.994; \tML change (error): 0.017; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========= ]\n",
"Iteration:70\n",
"ML:-60159.004; \tML change (error): 0.011; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:71\n",
"ML:-60159.011; \tML change (error): 0.006; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:72\n",
"ML:-60159.014; \tML change (error): 0.004; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:73\n",
"ML:-60159.017; \tML change (error): 0.002; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:74\n",
"ML:-60159.018; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:75\n",
"ML:-60159.018; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:76\n",
"ML:-60159.019; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:77\n",
"ML:-60159.019; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:78\n",
"ML:-60159.019; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:79\n",
"ML:-60159.019; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:80\n",
"ML:-60159.019; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:81\n",
"ML:-60159.019; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:82\n",
"ML:-60159.019; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:83\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:84\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:85\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:86\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============ ]\n",
"Iteration:87\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============ ]\n",
"Iteration:88\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============ ]\n",
"Iteration:89\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============ ]\n",
"Iteration:90\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============ ]\n",
"Iteration:91\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"Iteration:92\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"Iteration:93\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"Iteration:94\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"Iteration:95\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"Iteration:96\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"Iteration:97\n",
"ML:-60159.020; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"========================================================================\n",
"Registration Performance Metrics\n",
"========================================================================\n",
"Time to initialize EM: 0.023514986038208008\n",
"Time to initialize registration: 1.073909044265747\n",
"Average Expectation Time: 0.0347 +/- 0.0014\n",
"Average Maximization Time: 0.0331 +/- 0.0175\n",
"Maximization Times - Per individual step\n",
"Average Update Transform Time: 0.0285 +/- 0.0155\n",
"Average Transform Time: 0.0033 +/- 0.0035\n",
"Average Update Variance Time: 0.0013 +/- 0.0015\n",
"\n",
"Number of iterations performed: 97\n",
"Error at time of finish: 2.3137545213103294e-09\n",
"Number of unique correspondences: 16591\n",
"Number of unique correspondences after smoothing: 17376\n",
"\tRegistering to mesh # 4\n",
"Starting Focusr\n",
"Starting ICP\n",
"Starting to build first graph\n",
"Loaded Mesh 1\n",
"Beginning Eigen Decomposition\n",
"Starting!\n",
"All final eigenvalues are: \n",
"[-9.34895841e-18 2.31380430e-04 3.75776836e-04 4.91953343e-04\n",
" 8.25056049e-04 9.87873498e-04 1.03609575e-03 1.31991205e-03\n",
" 1.40722488e-03 1.70471991e-03 1.90188380e-03 1.94964835e-03\n",
" 2.24307170e-03 2.35253492e-03 2.61038835e-03 2.69372877e-03\n",
" 2.82083934e-03 3.11745131e-03 3.44188173e-03 3.48359826e-03\n",
" 3.71041017e-03 3.93052819e-03 3.99045406e-03 4.12082239e-03]\n",
"------------------------------------------------------------------------\n",
"Final eigenvalues of interest are: \n",
"[0.00023138 0.00037578 0.00049195 0.00082506 0.00098787 0.0010361\n",
" 0.00131991 0.00140722 0.00170472 0.00190188 0.00194965 0.00224307\n",
" 0.00235253 0.00261039 0.00269373 0.00282084 0.00311745 0.00344188\n",
" 0.0034836 0.00371041 0.00393053 0.00399045 0.00412082]\n",
"Computed spectrum 1\n",
"Loaded Mesh 2\n",
"Beginning Eigen Decomposition\n",
"Starting!\n",
"All final eigenvalues are: \n",
"[-9.77669532e-18 2.25805833e-04 3.66459027e-04 5.05447162e-04\n",
" 8.02476563e-04 1.00400922e-03 1.05255896e-03 1.29327148e-03\n",
" 1.42160764e-03 1.68500660e-03 1.89392890e-03 1.94752650e-03\n",
" 2.24977942e-03 2.36843928e-03 2.57285727e-03 2.68403424e-03\n",
" 2.79090514e-03 3.17695294e-03 3.42505867e-03 3.54689362e-03\n",
" 3.70747185e-03 3.87766577e-03 3.97535312e-03 4.04794116e-03]\n",
"------------------------------------------------------------------------\n",
"Final eigenvalues of interest are: \n",
"[0.00022581 0.00036646 0.00050545 0.00080248 0.00100401 0.00105256\n",
" 0.00129327 0.00142161 0.00168501 0.00189393 0.00194753 0.00224978\n",
" 0.00236844 0.00257286 0.00268403 0.00279091 0.00317695 0.00342506\n",
" 0.00354689 0.00370747 0.00387767 0.00397535 0.00404794]\n",
"Computed spectrum 2\n",
"========================================================================\n",
"\n",
"Eigenvector Sorting Results\n",
"\n",
"========================================================================\n",
"The matches for eigenvectors were as follows:\n",
"Target\t| Source\n",
" 0\t| -0 \n",
" 1\t| 1 \n",
" 2\t| 2 \n",
" 3\t| 3 \n",
" 4\t| 4 \n",
" 5\t| 5 \n",
" 6\t| 6 \n",
" 7\t| 7 \n",
" 8\t| 8 \n",
" 9\t| 9 \n",
" 10\t| -10 \n",
" 11\t| -11 \n",
" 12\t| 12 \n",
" 13\t| -13 \n",
" 14\t| 14 \n",
" 15\t| -15 \n",
" 16\t| 16 \n",
" 17\t| 17 \n",
" 18\t| 18 \n",
" 19\t| 19 \n",
" 20\t| -21 \n",
" 21\t| -20 \n",
" 22\t| -22 \n",
"*Negative source values means those eigenvectors were flipped*\n",
" \n",
"Appending Extra Features to Spectral Coords\n",
"Number of features (including spectral) used for registartion: 22\n",
"========================================================================\n",
"\n",
"Non-Rigid (Deformable) Registration Beginning\n",
"\n",
"========================================================================\n",
"Iteration:1\n",
"ML:-26099.255; \tML change (error): 26099.255; \tSigma^2: 0.012; \tSigma^2 change: 0.097\n",
"[ ]\n",
"Iteration:2\n",
"ML:-46951.228; \tML change (error): 20851.972; \tSigma^2: 0.003; \tSigma^2 change: 0.009\n",
"[ ]\n",
"Iteration:3\n",
"ML:-57901.371; \tML change (error): 10950.143; \tSigma^2: 0.002; \tSigma^2 change: 0.001\n",
"[ ]\n",
"Iteration:4\n",
"ML:-58870.309; \tML change (error): 968.938; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:5\n",
"ML:-59067.251; \tML change (error): 196.941; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:6\n",
"ML:-59116.812; \tML change (error): 49.562; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[ ]\n",
"Iteration:7\n",
"ML:-59136.792; \tML change (error): 19.980; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:8\n",
"ML:-59155.042; \tML change (error): 18.250; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:9\n",
"ML:-59171.137; \tML change (error): 16.095; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:10\n",
"ML:-59184.462; \tML change (error): 13.326; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:11\n",
"ML:-59199.462; \tML change (error): 15.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:12\n",
"ML:-59209.477; \tML change (error): 10.015; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:13\n",
"ML:-59215.105; \tML change (error): 5.627; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[= ]\n",
"Iteration:14\n",
"ML:-59217.478; \tML change (error): 2.373; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:15\n",
"ML:-59219.315; \tML change (error): 1.837; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:16\n",
"ML:-59221.569; \tML change (error): 2.255; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:17\n",
"ML:-59222.784; \tML change (error): 1.214; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:18\n",
"ML:-59223.319; \tML change (error): 0.535; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:19\n",
"ML:-59223.596; \tML change (error): 0.277; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:20\n",
"ML:-59223.756; \tML change (error): 0.159; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[== ]\n",
"Iteration:21\n",
"ML:-59223.849; \tML change (error): 0.094; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:22\n",
"ML:-59223.905; \tML change (error): 0.055; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:23\n",
"ML:-59223.938; \tML change (error): 0.033; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:24\n",
"ML:-59223.958; \tML change (error): 0.020; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:25\n",
"ML:-59223.971; \tML change (error): 0.013; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:26\n",
"ML:-59223.979; \tML change (error): 0.008; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:27\n",
"ML:-59223.984; \tML change (error): 0.005; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=== ]\n",
"Iteration:28\n",
"ML:-59223.987; \tML change (error): 0.003; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:29\n",
"ML:-59223.990; \tML change (error): 0.002; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:30\n",
"ML:-59223.991; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:31\n",
"ML:-59223.992; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[==== ]\n",
"Iteration:32\n",
"ML:-59223.993; \tML change (error): 0.001; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[==== ]\n",
"Iteration:33\n",
"ML:-59223.993; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[==== ]\n",
"Iteration:34\n",
"ML:-59223.993; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[==== ]\n",
"Iteration:35\n",
"ML:-59223.993; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:36\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:37\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:38\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:39\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:40\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:41\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[===== ]\n",
"Iteration:42\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:43\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:44\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:45\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:46\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:47\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:48\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[====== ]\n",
"Iteration:49\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:50\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:51\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:52\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:53\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:54\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:55\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======= ]\n",
"Iteration:56\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======== ]\n",
"Iteration:57\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======== ]\n",
"Iteration:58\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======== ]\n",
"Iteration:59\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======== ]\n",
"Iteration:60\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======== ]\n",
"Iteration:61\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======== ]\n",
"Iteration:62\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[======== ]\n",
"Iteration:63\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========= ]\n",
"Iteration:64\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========= ]\n",
"Iteration:65\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========= ]\n",
"Iteration:66\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========= ]\n",
"Iteration:67\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========= ]\n",
"Iteration:68\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========= ]\n",
"Iteration:69\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========= ]\n",
"Iteration:70\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:71\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:72\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:73\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:74\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[========== ]\n",
"Iteration:75\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:76\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[========== ]\n",
"Iteration:77\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:78\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:79\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=========== ]\n",
"Iteration:80\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:81\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:82\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:83\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=========== ]\n",
"Iteration:84\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:85\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:86\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:87\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============ ]\n",
"Iteration:88\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============ ]\n",
"Iteration:89\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============ ]\n",
"Iteration:90\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============ ]\n",
"Iteration:91\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:92\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"Iteration:93\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:94\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"Iteration:95\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:96\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============= ]\n",
"Iteration:97\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============= ]\n",
"Iteration:98\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration:99\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============== ]\n",
"Iteration:100\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============== ]\n",
"Iteration:101\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:102\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============== ]\n",
"Iteration:103\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[============== ]\n",
"Iteration:104\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[============== ]\n",
"Iteration:105\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============== ]\n",
"Iteration:106\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============== ]\n",
"Iteration:107\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============== ]\n",
"Iteration:108\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:109\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[=============== ]\n",
"Iteration:110\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============== ]\n",
"Iteration:111\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[=============== ]\n",
"Iteration:112\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"Iteration:113\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: 0.000\n",
"[================ ]\n",
"Iteration:114\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================ ]\n",
"Iteration:115\n",
"ML:-59223.994; \tML change (error): 0.000; \tSigma^2: 0.002; \tSigma^2 change: -0.000\n",
"[================ ]\n",
"========================================================================\n",
"Registration Performance Metrics\n",
"========================================================================\n",
"Time to initialize EM: 0.022825956344604492\n",
"Time to initialize registration: 0.8721268177032471\n",
"Average Expectation Time: 0.0389 +/- 0.0018\n",
"Average Maximization Time: 0.0295 +/- 0.0179\n",
"Maximization Times - Per individual step\n",
"Average Update Transform Time: 0.0260 +/- 0.0173\n",
"Average Transform Time: 0.0025 +/- 0.0017\n",
"Average Update Variance Time: 0.0010 +/- 0.0008\n",
"\n",
"Number of iterations performed: 115\n",
"Error at time of finish: 5.8498699218034744e-09\n",
"Number of unique correspondences: 16418\n",
"Number of unique correspondences after smoothing: 17273\n",
"\t\tSymmetric surface error: 0.7149036784492468\n"
]
}
],
"source": [
"procrustes_reg = mskt.statistics.ProcrustesRegistration(\n",
" path_ref_mesh=list_mesh_paths[find_ref_mesh.ref_idx], # using the idx of the best mesh from the previous step\n",
" list_mesh_paths=list_mesh_paths, # This will automatically remove the ref_mesh path if it is in the list.\n",
" n_spectral_features=20,\n",
" projection_smooth_iterations=40,\n",
" graph_smoothing_iterations=300, \n",
" max_n_registration_steps=1,\n",
" icp_registration_mode='similarity' # This default & removes scale by isotropically scaling during regisration \n",
" # To not scale during registration, use mode 'rigid'.\n",
")\n",
"\n",
"procrustes_reg.execute()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "42e0c4cc",
"metadata": {},
"outputs": [],
"source": [
"from itkwidgets import view"
]
},
{
"cell_type": "markdown",
"id": "3f90c403",
"metadata": {},
"source": [
"- Create a plot with all of the meshes using their new mesh topology that matches the reference mesh on a point-by-point basis. \n",
"- The final mesh (5) is the reference mesh (mean of all of the meshes). "
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "a76eee13",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "1c2a1e57e2d042a4936a69d9124de284",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Viewer(geometries=[{'vtkClass': 'vtkPolyData', 'points': {'vtkClass': 'vtkPoints', 'name': '_points', 'numberO…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"list_meshes = []\n",
"for idx in range(procrustes_reg.registered_pt_coords.shape[0]):\n",
" mean_mesh = mskt.mesh.utils.vtk_deep_copy(procrustes_reg.ref_mesh)\n",
" mskt.mesh.meshTools.set_mesh_physical_point_coords(mean_mesh, procrustes_reg.registered_pt_coords[idx, :, :])\n",
" list_meshes.append(mean_mesh)\n",
"\n",
"view(geometries=list_meshes + [procrustes_reg.ref_mesh])"
]
},
{
"cell_type": "markdown",
"id": "5bd8a893",
"metadata": {},
"source": [
"- We can save all of the registered meshes to disk"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "4865e148",
"metadata": {},
"outputs": [],
"source": [
"# You may specify the \"folder\" inpu/Users/gattia/Downloads/ do, all of the meshes will be save to this location. A unique\n",
"# suffix will be added to each mesh before saving to ensure they are distinguishable, even if they origainlly\n",
"# all had the same names. \n",
"# Otherwise, each mesh will be saved to the folder it was loaded from, but with the new/unique file extension. \n",
"procrustes_reg.save_meshes(folder='~/Downloads/test')"
]
},
{
"cell_type": "markdown",
"id": "420c5cb8",
"metadata": {},
"source": [
"- the corresponding points for the registered meshes are located inside of the `procrustes_reg` object. These corresponding points can be used for any statistical/data analyses that you want. Next we demonstrate creating a basic statistical shape model using Principal Components Analysis (PCA). "
]
},
{
"cell_type": "markdown",
"id": "88ada104",
"metadata": {},
"source": [
"- Create data array to input for SSM"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "444d5242",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(5, 19998, 3)\n"
]
}
],
"source": [
"# print shape of data\n",
"print(procrustes_reg.registered_pt_coords.shape)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "a46a6d86",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(5, 59994)\n"
]
}
],
"source": [
"points = np.zeros((procrustes_reg.registered_pt_coords.shape[0], \n",
" procrustes_reg.registered_pt_coords.shape[1] * procrustes_reg.registered_pt_coords.shape[2]))\n",
"for idx in range(procrustes_reg.registered_pt_coords.shape[0]):\n",
" points[idx, :] = procrustes_reg.registered_pt_coords[idx,:,:].flatten()\n",
"\n",
"print(points.shape)"
]
},
{
"cell_type": "markdown",
"id": "9e02b3aa",
"metadata": {},
"source": [
"- Get point coordinates for the reference / mean mesh"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "894c85ee",
"metadata": {},
"outputs": [],
"source": [
"mean_coords = mskt.mesh.meshTools.get_mesh_physical_point_coords(procrustes_reg.ref_mesh)"
]
},
{
"cell_type": "markdown",
"id": "fbd032bc",
"metadata": {},
"source": [
"- Compute principal components (PCs) and their variances (Vs)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "6d1ebe56",
"metadata": {},
"outputs": [],
"source": [
"PCs, Vs = mskt.statistics.pca.pca_svd(points.T)"
]
},
{
"cell_type": "markdown",
"id": "b04d2aa0",
"metadata": {},
"source": [
"- Generate new meshes from extremes of first principal component"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "69bd192c",
"metadata": {},
"outputs": [],
"source": [
"pts_minus_2_sd = mskt.statistics.pca.get_ssm_deformation(PCs, Vs, mean_coords, pc=0, n_sds=-2)\n",
"mesh_minus_2_sd = mskt.statistics.pca.create_vtk_mesh_from_deformed_points(procrustes_reg.ref_mesh, pts_minus_2_sd)\n",
"\n",
"pts_plus_2_sd = mskt.statistics.pca.get_ssm_deformation(PCs, Vs, mean_coords, pc=0, n_sds=2)\n",
"mesh_plus_2_sd = mskt.statistics.pca.create_vtk_mesh_from_deformed_points(procrustes_reg.ref_mesh, pts_plus_2_sd)"
]
},
{
"cell_type": "markdown",
"id": "2a8895a3",
"metadata": {},
"source": [
"- Display meshes demonstrating the first PC (-2SD, Mean, +2SD)\n",
" - You can hide different meshes to highlight which part of the distribution you want to see. \n",
"- +/- 2SD is used for this example in part because the small dataset (n=5) leads to rougher surface when interpolating to greater extremes (+/-3SD). \n",
"- If you look at the +/- 2SD meshes you can notice certain features.\n",
" - One extreme has a narrow intercondylar notch, the other has a wide notch. \n",
" - There are also considerable differences in the concavity of the trochlea\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "96249d7b",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "923e827b88c84b4d9d0153149718d94f",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
"Viewer(geometries=[{'vtkClass': 'vtkPolyData', 'points': {'vtkClass': 'vtkPoints', 'name': '_points', 'numberO…"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"view(geometries=[mesh_minus_2_sd, procrustes_reg.ref_mesh, mesh_plus_2_sd])"
]
},
{
"cell_type": "markdown",
"id": "3afbd500",
"metadata": {},
"source": [
"- Save multiple meshes spanning the distribution of a particular principal component. \n",
" - These can be loaded in Paraview (https://www.paraview.org/) and viewed. If you open them all in paraview you can save photos of each mesh (without moving the camera) and use https://ezgif.com/ to make a visualization of how the mesh deforms from one extreme of the distribution to the other - Make sure to name the image files sequentially so that you can sort the images when uploading to ezgif!"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "9c759ff0",
"metadata": {},
"outputs": [],
"source": [
"pc = 0\n",
"min_sd = -2\n",
"max_sd = 2\n",
"step = 0.25\n",
"\n",
"loc_save_meshes = os.path.join('~/Downloads', f'ssm_meshes_PC_{pc}')\n",
"os.makedirs(loc_save_meshes, exist_ok=True)\n",
"\n",
"for sd in np.arange(min_sd, max_sd + step, step):\n",
" pts = mskt.statistics.pca.get_ssm_deformation(PCs, Vs, mean_coords, pc=pc, n_sds=sd)\n",
" mesh = mskt.statistics.pca.create_vtk_mesh_from_deformed_points(procrustes_reg.ref_mesh, pts)\n",
" filename = f'ssm_mode_{pc}_sd_{sd}.vtk'\n",
" mskt.mesh.io.write_vtk(mesh, os.path.join(loc_save_meshes, filename))\n",
" "
]
},
{
"cell_type": "markdown",
"id": "9eaf1f47",
"metadata": {},
"source": [
"- To do statistics, you can score each bone on the PCs. "
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "392ca76e",
"metadata": {},
"outputs": [],
"source": [
"# how many PCs to score\n",
"max_pc = 10\n",
"\n",
"centered_data = points - mean_coords.flatten()\n",
"scores = PCs[:,:max_pc].T @ centered_data.T\n",
"scores = scores / (np.sqrt(Vs)[:max_pc, None])"
]
},
{
"cell_type": "markdown",
"id": "cd3f0d45",
"metadata": {},
"source": [
"- Plot them"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "b186cc39",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(5, 5)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"scores.shape"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "84abbd07",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 27,
"id": "8ae1cdd4",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1152x648 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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Rq0xb6y5YtWeTC7fzTnnnLOAl95YOy6/YbOHsOV96EefudlDAHjY8PcKLAf/vnnoHA8fuq2+Hy7ijOjBJGfPTJ+V5NBaK44xrhpj7Bpj7Nq+ffsCXhoAAICtZhEhujfJC6Z3z31SkvvHGHcvYLsAAAAsoXUvza2qa5NckOT0qjqY5AeT/K0kGWNcmWRfkmckOZDk40levFGDBQAAYOtbN0THGJess3wkeenCRgQAAMBSW8SluQAAADA3IQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAECruUK0qi6sqjuq6kBVXb7G8r9dVb9WVe+pqtur6sWLHyoAAADLYN0QraptSa5IclGSnUkuqaqdq1Z7aZL3jTG+KskFSX6iqk5d8FgBAABYAvOcET0/yYExxp1jjAeSXJdk96p1RpJHVlUl+dwk9yU5stCRAgAAsBTmCdEzk9w1M31wOm/Wq5P8nSSHkrw3yb8YYzy4ekNVtaeq9lfV/sOHD5/gkAEAANjK5gnRWmPeWDX99CTvTvK4JE9M8uqq+rxPe9IYV40xdo0xdm3fvv04hwoAAMAymCdEDyY5e2b6rEzOfM56cZLrx8SBJL+f5EsXM0QAAACWyTwhenOS86rq3OkNiC5OsnfVOh9O8o+SpKoem+RLkty5yIECAACwHE5Zb4UxxpGquizJjUm2Jbl6jHF7VV06XX5lklckuaaq3pvJpbzfO8a4dwPHDQAAwBa1bogmyRhjX5J9q+ZdOfP4UJKnLXZoAAAALKN5Ls0FAACAhRGiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtBKiAAAAtJorRKvqwqq6o6oOVNXlR1nngqp6d1XdXlXvWOwwAQAAWBanrLdCVW1LckWSpyY5mOTmqto7xnjfzDqPSvKaJBeOMT5cVY/ZoPECAACwxc1zRvT8JAfGGHeOMR5Icl2S3avWeX6S68cYH06SMcY9ix0mAAAAy2KeED0zyV0z0wen82Y9Icmjq+rtVXVLVb1grQ1V1Z6q2l9V+w8fPnxiIwYAAGBLmydEa415Y9X0KUm+Jskzkzw9yQ9U1RM+7UljXDXG2DXG2LV9+/bjHiwAAABb37q/I5rJGdCzZ6bPSnJojXXuHWN8LMnHquqdSb4qyQcXMkoAAACWxjxnRG9Ocl5VnVtVpya5OMneVev8apJ/UFWnVNVnJ/m6JO9f7FABAABYBuueER1jHKmqy5LcmGRbkqvHGLdX1aXT5VeOMd5fVb+e5NYkDyZ53Rjjto0cOAAAAFvTPJfmZoyxL8m+VfOuXDX940l+fHFDAwAAYBnNc2kuAAAALIwQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoJUQBQAAoNVcIVpVF1bVHVV1oKouP8Z6X1tVn6iq5yxuiAAAACyTdUO0qrYluSLJRUl2JrmkqnYeZb0fS3LjogcJAADA8pjnjOj5SQ6MMe4cYzyQ5Loku9dY77uSvCHJPQscHwAAAEtmnhA9M8ldM9MHp/P+RlWdmeRZSa481oaqak9V7a+q/YcPHz7esQIAALAE5gnRWmPeWDX9k0m+d4zxiWNtaIxx1Rhj1xhj1/bt2+ccIgAAAMvklDnWOZjk7Jnps5IcWrXOriTXVVWSnJ7kGVV1ZIzxK4sYJAAAAMtjnhC9Ocl5VXVukj9McnGS58+uMMY4d+VxVV2T5E0iFAAAgLWsG6JjjCNVdVkmd8PdluTqMcbtVXXpdPkxfy8UAAAAZs1zRjRjjH1J9q2at2aAjjFe9NCHBQAAwLKa52ZFAAAAsDBCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZCFAAAgFZzhWhVXVhVd1TVgaq6fI3l31pVt06/fqeqvmrxQwUAAGAZrBuiVbUtyRVJLkqyM8klVbVz1Wq/n+QpY4yvTPKKJFcteqAAAAAsh3nOiJ6f5MAY484xxgNJrkuye3aFMcbvjDH+ZDp5U5KzFjtMAAAAlsU8IXpmkrtmpg9O5x3Ntyd580MZFAAAAMvrlDnWqTXmjTVXrPqGTEL064+yfE+SPUlyzjnnzDlEAAAAlsk8Z0QPJjl7ZvqsJIdWr1RVX5nkdUl2jzE+staGxhhXjTF2jTF2bd++/UTGCwAAwBY3T4jenOS8qjq3qk5NcnGSvbMrVNU5Sa5P8m1jjA8ufpgAAAAsi3UvzR1jHKmqy5LcmGRbkqvHGLdX1aXT5VcmeVmSz0/ymqpKkiNjjF0bN2wAAAC2qnl+RzRjjH1J9q2ad+XM45ckeclihwYAAMAymufSXAAAAFgYIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAEArIQoAAECruUK0qi6sqjuq6kBVXb7G8qqqV02X31pVX734oQIAALAM1g3RqtqW5IokFyXZmeSSqtq5arWLkpw3/dqT5LULHicAAABLYp4zoucnOTDGuHOM8UCS65LsXrXO7iSvHxM3JXlUVZ2x4LECAACwBOYJ0TOT3DUzfXA673jXAQAAgJwyxzq1xrxxAuukqvZkculukny0qu6Y4/X5VKcnuXezBzGv+rHNHgHHaUvtX2w59i82kv2LjfQp+5d/37BgJ3T82iL74eOPtmCeED2Y5OyZ6bOSHDqBdTLGuCrJVXO8JkdRVfvHGLs2exwsJ/sXG8n+xUayf7GR7F9spJN1/5rn0tybk5xXVedW1alJLk6yd9U6e5O8YHr33CcluX+McfeCxwoAAMASWPeM6BjjSFVdluTGJNuSXD3GuL2qLp0uvzLJviTPSHIgyceTvHjjhgwAAMBWNs+luRlj7MskNmfnXTnzeCR56WKHxlG4tJmNZP9iI9m/2Ej2LzaS/YuNdFLuXzVpSAAAAOgxz++IAgAAwMII0Ye5qvqWqrq9qh6sqqPeTauqPlRV762qd1fV/s4xsnUdx/51YVXdUVUHquryzjGydVXVaVX11qr63en3Rx9lPccv5rLesWh608RXTZffWlVfvRnjZGuaY/+6oKrunx6r3l1VL9uMcbI1VdXVVXVPVd12lOUn3fFLiD783Zbk2UneOce63zDGeOLJePtnTti6+1dVbUtyRZKLkuxMcklV7ewZHlvc5UneNsY4L8nbptNH4/jFMc15LLooyXnTrz1JXts6SLas4/i77remx6onjjF+uHWQbHXXJLnwGMtPuuOXEH2YG2O8f4xxx2aPg+U05/51fpIDY4w7xxgPJLkuye6NHx1LYHeSn5s+/rkk37x5Q2EJzHMs2p3k9WPipiSPqqozugfKluTvOjbUGOOdSe47xion3fFLiC6PkeQtVXVLVe3Z7MGwVM5MctfM9MHpPFjPY1c+U3r6/TFHWc/xi3nMcyxyvOJEzbvvPLmq3lNVb66qL+sZGieJk+74NdfHt7Cxquo3knzBGou+b4zxq3Nu5u+PMQ5V1WOSvLWqPjD9Py+c5Bawf9Ua89xumyTH3r+OYzOOX8xjnmOR4xUnap595/8mefwY46NV9Ywkv5LJZZSwCCfd8UuIPgyMMb5xAds4NP1+T1W9MZNLTPxDjkXsXweTnD0zfVaSQw9xmyyJY+1fVfXHVXXGGOPu6eVF9xxlG45fzGOeY5HjFSdq3X1njPFnM4/3VdVrqur0Mca9TWNkuZ10xy+X5i6BqvqcqnrkyuMkT8vkJjSwCDcnOa+qzq2qU5NcnGTvJo+JrWFvkhdOH78wyaedgXf84jjMcyzam+QF07tPPinJ/SuXh8M61t2/quoLqqqmj8/P5N/RH2kfKcvqpDt+CdGHuap6VlUdTPLkJDdU1Y3T+Y+rqn3T1R6b5Ler6j1J3pXkhjHGr2/OiNlK5tm/xhhHklyW5MYk70/yS2OM2zdrzGwpP5rkqVX1u0meOp12/OKEHO1YVFWXVtWl09X2JbkzyYEkP53kOzdlsGw5c+5fz0ly2/R49aokF48xlvrSSRanqq5N8r+TfElVHayqbz/Zj1/lvx8AAAA6OSMKAABAKyEKAABAKyEKAABAKyEKAABAKyEKAABAKyEKAABAKyEKAABAKyEKAABAq/8Pb4glHoH0dkYAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 1152x648 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1152x648 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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RAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGglRAEAAGi1aohW1flVdUdV3bCX7VVVZ1fV7qq6vqqetf7TBAAAYKtY5IjoBUlO3sf2U5IcN112JnnL/k8LAACArWrVEB1jfCjJ3fsYclqSC8fMlUmeUFVHrNcEAQAA2FoOXYd9HJnk1mW390z33b5yYFXtzOyoabZv374OT31gHXvmpRs9hU3vljc9b6OnAHDQ8O/K/vPvCsDWsB4nK6o59415A8cY540xdowxdmzbtm0dnhoAAIDNZj1CdE+So5fdPirJbeuwXwAAALag9QjRS5K8fDp77glJ7hljPGRZLgAAACQLfEa0qi5KclKSw6tqT5KfTnJYkowxzk2yK8mpSXYn+XKSVx2oyQIAALD5rRqiY4yXrLJ9JHntus0IAACALW09luYCAADAwoQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArYQoAAAArRYK0ao6uapurqrdVXXmnO0nVdU9VXXtdDlr/acKAADAVnDoagOq6pAkb07y3CR7kny8qi4ZY3xyxdAPjzGefwDmCAAAwBayyBHR45PsHmN8Zoxxf5KLk5x2YKcFAADAVrVIiB6Z5NZlt/dM9610YlVdV1WXVdXT5u2oqnZW1VVVddWdd975MKYLAADAZrdIiNac+8aK29ckOWaM8Y+S/FqS98zb0RjjvDHGjjHGjm3btq1pogAAAGwNi4ToniRHL7t9VJLblg8YY9w7xrhvur4ryWFVdfi6zRIAAIAtY5EQ/XiS46rqG6rq0UnOSHLJ8gFV9ZSqqun68dN+71rvyQIAALD5rXrW3DHGA1X1uiSXJzkkyfljjBur6tXT9nOTvDDJa6rqgSRfSXLGGGPl8l0AAABYPUST/7/cdteK+85ddv2cJOes79QAAADYihZZmgsAAADrRogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQSogCAADQaqEQraqTq+rmqtpdVWfO2V5Vdfa0/fqqetb6TxUAAICtYNUQrapDkrw5ySlJnprkJVX11BXDTkly3HTZmeQt6zxPAAAAtohFjogen2T3GOMzY4z7k1yc5LQVY05LcuGYuTLJE6rqiHWeKwAAAFvAIiF6ZJJbl93eM9231jEAAACQQxcYU3PuGw9jTKpqZ2ZLd5Pkvqq6eYHnZ77Dk3x+oyexmvqljZ4BB4lN8XqFidfrQcy/Kw/h9cpm4zW7TjbJ++Exe9uwSIjuSXL0sttHJbntYYzJGOO8JOct8JysoqquGmPs2Oh5wCK8XtlMvF7ZTLxe2Wy8ZlmyyNLcjyc5rqq+oaoeneSMJJesGHNJkpdPZ889Ick9Y4zb13muAAAAbAGrHhEdYzxQVa9LcnmSQ5KcP8a4sapePW0/N8muJKcm2Z3ky0ledeCmDAAAwGa2yNLcjDF2ZRaby+87d9n1keS16zs1VmGJM5uJ1yubidcrm4nXK5uN1yxJkpo1JAAAAPRY5DOiAAAAsG6E6CZRVT9YVTdW1Veraq9nGquqW6rqE1V1bVVd1TlHWLKG1+vJVXVzVe2uqjM75whLqupJVXVFVf3x9PWJexnn/ZUNs9r75XTCyLOn7ddX1bM2Yp6QLPR6Pamq7pneT6+tqrM2Yp5sLCG6edyQ5PQkH1pg7HePMZ7h1NhsoFVfr1V1SJI3JzklyVOTvKSqntozPXiQM5O8f4xxXJL3T7f3xvsr7RZ8vzwlyXHTZWeSt7ROEiZr+Pf9w9P76TPGGD/bOkkOCkJ0kxhj3DTGuHmj5wGLWPD1enyS3WOMz4wx7k9ycZLTDvzs4CFOS/L26frbk/zAxk0F5lrk/fK0JBeOmSuTPKGqjuieKMS/7yxIiG49I8n7qurqqtq50ZOBfTgyya3Lbu+Z7oNuX7f0t6+nr0/eyzjvr2yURd4vvadysFj0tXhiVV1XVZdV1dN6psbBZKE/30KPqvrDJE+Zs+knxxi/t+BuvmOMcVtVPTnJFVX1qTHGIst5YU3W4fVac+5zGm8OiH29XtewG++vbJRF3i+9p3KwWOS1eE2SY8YY91XVqUnek9mych5BhOhBZIzxnHXYx23T1zuq6t2ZLY/wH0qsu3V4ve5JcvSy20cluW0/9wlz7ev1WlWfq6ojxhi3T0sZ79jLPry/slEWeb/0nsrBYtXX4hjj3mXXd1XVr1fV4WOMzzfNkYOApblbSFX93ap6/NL1JN+b2Ulj4GD08STHVdU3VNWjk5yR5JINnhOPTJckecV0/RVJHnJE3/srG2yR98tLkrx8OnvuCUnuWVpyDs1Wfb1W1VOqqqbrx2fWJHe1z5QNJUQ3iap6QVXtSXJikkur6vLp/q+vql3TsK9L8pGqui7Jx5JcOsb4g42ZMY9ki7xexxgPJHldksuT3JTkd8YYN27UnHlEe1OS51bVHyd57nTb+ysHjb29X1bVq6vq1dOwXUk+k2R3kt9I8iMbMlke8RZ8vb4wyQ3Te+rZSc4YY1hK/ghTfucAAAB0ckQUAACAVkIUAACAVkIUAACAVkIUAACAVkIUAACAVkIUAACAVkIUAACAVkIUAACAVv8PzXl5HAnqkkAAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 1152x648 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1152x648 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for idx in range(min(scores.shape[0], max_pc)):\n",
" plt.figure(figsize=(16,9))\n",
" plt.hist(scores[idx, :])\n",
" plt.title(f'Principal Component: {idx}', fontsize=15)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7b726bbd",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "679f5773",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}