{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Mikan-tutorial\n",
"\n",
"Welcome to mikan 🍊!\n",
"\n",
"Mikan is a **m**edical **i**mage **k**it for segment**a**tion metrics evaluatio**n**, native Rust support, and Python bindings for cross-language performance. This document introduces how to use mikan and briefly compares its performance and results with medpy.\n",
"\n",
"Main features of mikan:\n",
"\n",
"- Rust-driven, highly parallelized, and extremely fast, 10 to 100 times faster than existing tools (such as medpy)\n",
"- Supports the calculation of almost all segmentation metrics\n",
"- Carefully designed simple, flexible, and intuitive interface, you can master mikan and fall in love with it in just one minute!\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### TL;DR\n",
"\n",
"Run mikan immediately to get all metrics for all segmentation labels:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[{'accuracy': 0.99887297469187, 'adjust_rand_score': 0.9864214165654426, 'amcc': 0.9864367567296637, 'assd': 0.4627411239979557, 'auc': 0.9907127577891529, 'balanced_accuracy': 0.9907127577891529, 'dice': 0.9870104666571462, 'f_score': 0.9870104666571462, 'fn': 136914.0, 'fnr': 0.018227270960283256, 'fp': 57192.0, 'fpr': 0.00034721346141101695, 'hausdorff_distance': 23.23409712643984, 'hausdorff_distance_95': 1.161103780937166, 'jaccard_score': 0.9743540620800129, 'kappa': 0.9864214165654426, 'label': 1.0, 'masd': 0.4570258359112762, 'mcc': 0.9864367567296637, 'nmcc': 0.9932183783648318, 'precision': 0.9923043904749475, 'senstivity': 0.9817727290397168, 'specificity': 0.999652786538589, 'tn': 164659924.0, 'tp': 7374578.0, 'volume_similarity': 0.9946650202613058}, {'accuracy': 0.9994664649440818, 'adjust_rand_score': 0.9635612411025513, 'amcc': 0.963574881429292, 'assd': 0.6030765488980315, 'auc': 0.9843198140671667, 'balanced_accuracy': 0.9843198140671667, 'dice': 0.9638299832080431, 'f_score': 0.9638299832080431, 'fn': 39236.0, 'fnr': 0.031052390818825177, 'fp': 52654.0, 'fpr': 0.0003079810468414641, 'hausdorff_distance': 41.9914108016965, 'hausdorff_distance_95': 1.5640728820017198, 'jaccard_score': 0.9301851699898799, 'kappa': 0.9635612411025514, 'label': 2.0, 'masd': 0.5948439308029991, 'mcc': 0.963574881429292, 'nmcc': 0.9817874407146461, 'precision': 0.9587661320636511, 'senstivity': 0.9689476091811748, 'specificity': 0.9996920189531585, 'tn': 170912412.0, 'tp': 1224306.0, 'volume_similarity': 0.9947183666850095}, {'accuracy': 0.9989030974459249, 'adjust_rand_score': 0.9783230290414697, 'amcc': 0.9783234576595446, 'assd': 0.5355268541078531, 'auc': 0.9887278191513104, 'balanced_accuracy': 0.9887278191513105, 'dice': 0.9788861062581474, 'f_score': 0.9788861062581474, 'fn': 98538.0, 'fnr': 0.022005586146784748, 'fp': 90380.0, 'fpr': 0.0005387755505944251, 'hausdorff_distance': 30.292223674415226, 'hausdorff_distance_95': 1.5, 'jaccard_score': 0.9586453697844007, 'kappa': 0.9783230290414697, 'label': 3.0, 'masd': 0.5363377412762627, 'mcc': 0.9783234576595446, 'nmcc': 0.9891617288297723, 'precision': 0.979779426158997, 'senstivity': 0.9779944138532153, 'specificity': 0.9994612244494055, 'tn': 167660365.0, 'tp': 4379325.0, 'volume_similarity': 0.9990882438669368}, {'accuracy': 0.998878386104125, 'adjust_rand_score': 0.9841329240151302, 'amcc': 0.9841361524052074, 'assd': 0.5081565786837277, 'auc': 0.9909015555714827, 'balanced_accuracy': 0.9909015555714826, 'dice': 0.9847150871159485, 'f_score': 0.9847150871159485, 'fn': 112179.0, 'fnr': 0.017708655138941883, 'fp': 80995.0, 'fpr': 0.00048823371809268777, 'hausdorff_distance': 110.12802692242559, 'hausdorff_distance_95': 1.161103780937166, 'jaccard_score': 0.9698903968923704, 'kappa': 0.9841329240151302, 'label': 4.0, 'masd': 0.5001558675593856, 'mcc': 0.9841361524052074, 'nmcc': 0.9920680762026037, 'precision': 0.9871508198203701, 'senstivity': 0.9822913448610581, 'specificity': 0.9995117662819073, 'tn': 165812914.0, 'tp': 6222520.0, 'volume_similarity': 0.9975325627497683}, {'accuracy': 0.9989219444890364, 'adjust_rand_score': 0.9794127045736161, 'amcc': 0.9794150931247586, 'assd': 0.5361406267949071, 'auc': 0.9886852910988095, 'balanced_accuracy': 0.9886852910988094, 'dice': 0.9799666340747192, 'f_score': 0.9799666340747192, 'fn': 102795.0, 'fnr': 0.022134879462397727, 'fp': 82877.0, 'fpr': 0.0004945383399833087, 'hausdorff_distance': 92.80790962184942, 'hausdorff_distance_95': 1.4819999933242798, 'jaccard_score': 0.9607201752520941, 'kappa': 0.9794127045736161, 'label': 5.0, 'masd': 0.5312467623638308, 'mcc': 0.9794150931247586, 'nmcc': 0.9897075465623792, 'precision': 0.9820771997205949, 'senstivity': 0.9778651205376022, 'specificity': 0.9995054616600166, 'tn': 167501703.0, 'tp': 4541233.0, 'volume_similarity': 0.9978509167645109}]\n"
]
}
],
"source": [
"from mikan import all\n",
"\n",
"all_metrics = all(rf\"..\\data\\patients_26_ground_truth.nii.gz\", rf\"..\\data\\patients_26_segmentation.nii.gz\")\n",
"print(all_metrics)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Usage"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import mikan\n",
"import SimpleITK as sitk\n",
"import time\n",
"from rich import print"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Currently, mikan only supports uint8 data, which is usually sufficient for most tasks."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"gt = sitk.ReadImage(rf\"..\\data\\patients_26_ground_truth.nii.gz\", sitk.sitkUInt8)\n",
"pred = sitk.ReadImage(rf\"..\\data\\patients_26_segmentation.nii.gz\", sitk.sitkUInt8)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using mikan requires just two steps:\n",
"\n",
"1. Initialize an evaluator:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"e = mikan.Evaluator(gt, pred)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2. Obtain metrics:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9870104666571462"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"e.labels(1).metrics(\"dice\") # one label, one metric"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0.9870104666571462, 0.9638299832080431, 0.9788861062581474]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"e.labels([1,2,3]).metrics(\"Dice\") # multi labels, one metric"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[0.9870104666571462, 7374578.0]"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"e.labels(1).metrics([\"Dice\", \"TP\"]) # one label, multi metrics"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'1': {'Dice': 0.9870104666571462, 'TP': 7374578.0},\n",
" '2': {'Dice': 0.9638299832080431, 'TP': 1224306.0}}"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"e.labels([1, 2]).metrics([\"Dice\", \"TP\"]) # multi labels, multi metrics"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'1': {'Dice': 0.9870104666571462, 'TP': 7374578.0},\n",
" '2': {'Dice': 0.9638299832080431, 'TP': 1224306.0},\n",
" '3': {'Dice': 0.9788861062581474, 'TP': 4379325.0},\n",
" '4': {'Dice': 0.9847150871159485, 'TP': 6222520.0},\n",
" '5': {'Dice': 0.9799666340747192, 'TP': 4541233.0}}"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"e.labels(\"all\").metrics([\"Dice\", \"TP\"]) # all labels, multi metrics"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'1': {'precision': 0.9923043904749475,\n",
" 'masd': 0.4570258359112762,\n",
" 'assd': 0.4627411239979557,\n",
" 'fp': 57192.0,\n",
" 'adjust_rand_score': 0.9864214165654426,\n",
" 'jaccard_score': 0.9743540620800129,\n",
" 'auc': 0.9907127577891529,\n",
" 'f_score': 0.9870104666571462,\n",
" 'senstivity': 0.9817727290397168,\n",
" 'dice': 0.9870104666571462,\n",
" 'balanced_accuracy': 0.9907127577891529,\n",
" 'fnr': 0.018227270960283256,\n",
" 'kappa': 0.9864214165654426,\n",
" 'specificity': 0.999652786538589,\n",
" 'tp': 7374578.0,\n",
" 'mcc': 0.9864367567296637,\n",
" 'accuracy': 0.99887297469187,\n",
" 'amcc': 0.9864367567296637,\n",
" 'fpr': 0.00034721346141101695,\n",
" 'nmcc': 0.9932183783648318,\n",
" 'fn': 136914.0,\n",
" 'hausdorff_distance': 23.23409712643984,\n",
" 'hausdorff_distance_95': 1.161103780937166,\n",
" 'volume_similarity': 0.9946650202613058,\n",
" 'tn': 164659924.0},\n",
" '2': {'precision': 0.9587661320636511,\n",
" 'masd': 0.5948439308029991,\n",
" 'assd': 0.6030765488980315,\n",
" 'fp': 52654.0,\n",
" 'adjust_rand_score': 0.9635612411025513,\n",
" 'jaccard_score': 0.9301851699898799,\n",
" 'auc': 0.9843198140671667,\n",
" 'f_score': 0.9638299832080431,\n",
" 'senstivity': 0.9689476091811748,\n",
" 'dice': 0.9638299832080431,\n",
" 'balanced_accuracy': 0.9843198140671667,\n",
" 'fnr': 0.031052390818825177,\n",
" 'kappa': 0.9635612411025514,\n",
" 'specificity': 0.9996920189531585,\n",
" 'tp': 1224306.0,\n",
" 'mcc': 0.963574881429292,\n",
" 'accuracy': 0.9994664649440818,\n",
" 'amcc': 0.963574881429292,\n",
" 'fpr': 0.0003079810468414641,\n",
" 'nmcc': 0.9817874407146461,\n",
" 'fn': 39236.0,\n",
" 'hausdorff_distance': 41.9914108016965,\n",
" 'hausdorff_distance_95': 1.5640728820017198,\n",
" 'volume_similarity': 0.9947183666850095,\n",
" 'tn': 170912412.0},\n",
" '3': {'precision': 0.979779426158997,\n",
" 'masd': 0.5363377412762627,\n",
" 'assd': 0.5355268541078531,\n",
" 'fp': 90380.0,\n",
" 'adjust_rand_score': 0.9783230290414697,\n",
" 'jaccard_score': 0.9586453697844007,\n",
" 'auc': 0.9887278191513104,\n",
" 'f_score': 0.9788861062581474,\n",
" 'senstivity': 0.9779944138532153,\n",
" 'dice': 0.9788861062581474,\n",
" 'balanced_accuracy': 0.9887278191513105,\n",
" 'fnr': 0.022005586146784748,\n",
" 'kappa': 0.9783230290414697,\n",
" 'specificity': 0.9994612244494055,\n",
" 'tp': 4379325.0,\n",
" 'mcc': 0.9783234576595446,\n",
" 'accuracy': 0.9989030974459249,\n",
" 'amcc': 0.9783234576595446,\n",
" 'fpr': 0.0005387755505944251,\n",
" 'nmcc': 0.9891617288297723,\n",
" 'fn': 98538.0,\n",
" 'hausdorff_distance': 30.292223674415226,\n",
" 'hausdorff_distance_95': 1.5,\n",
" 'volume_similarity': 0.9990882438669368,\n",
" 'tn': 167660365.0},\n",
" '4': {'precision': 0.9871508198203701,\n",
" 'masd': 0.5001558675593856,\n",
" 'assd': 0.5081565786837277,\n",
" 'fp': 80995.0,\n",
" 'adjust_rand_score': 0.9841329240151302,\n",
" 'jaccard_score': 0.9698903968923704,\n",
" 'auc': 0.9909015555714827,\n",
" 'f_score': 0.9847150871159485,\n",
" 'senstivity': 0.9822913448610581,\n",
" 'dice': 0.9847150871159485,\n",
" 'balanced_accuracy': 0.9909015555714826,\n",
" 'fnr': 0.017708655138941883,\n",
" 'kappa': 0.9841329240151302,\n",
" 'specificity': 0.9995117662819073,\n",
" 'tp': 6222520.0,\n",
" 'mcc': 0.9841361524052074,\n",
" 'accuracy': 0.998878386104125,\n",
" 'amcc': 0.9841361524052074,\n",
" 'fpr': 0.00048823371809268777,\n",
" 'nmcc': 0.9920680762026037,\n",
" 'fn': 112179.0,\n",
" 'hausdorff_distance': 110.12802692242559,\n",
" 'hausdorff_distance_95': 1.161103780937166,\n",
" 'volume_similarity': 0.9975325627497683,\n",
" 'tn': 165812914.0},\n",
" '5': {'precision': 0.9820771997205949,\n",
" 'masd': 0.5312467623638308,\n",
" 'assd': 0.5361406267949071,\n",
" 'fp': 82877.0,\n",
" 'adjust_rand_score': 0.9794127045736161,\n",
" 'jaccard_score': 0.9607201752520941,\n",
" 'auc': 0.9886852910988095,\n",
" 'f_score': 0.9799666340747192,\n",
" 'senstivity': 0.9778651205376022,\n",
" 'dice': 0.9799666340747192,\n",
" 'balanced_accuracy': 0.9886852910988094,\n",
" 'fnr': 0.022134879462397727,\n",
" 'kappa': 0.9794127045736161,\n",
" 'specificity': 0.9995054616600166,\n",
" 'tp': 4541233.0,\n",
" 'mcc': 0.9794150931247586,\n",
" 'accuracy': 0.9989219444890364,\n",
" 'amcc': 0.9794150931247586,\n",
" 'fpr': 0.0004945383399833087,\n",
" 'nmcc': 0.9897075465623792,\n",
" 'fn': 102795.0,\n",
" 'hausdorff_distance': 92.80790962184942,\n",
" 'hausdorff_distance_95': 1.4819999933242798,\n",
" 'volume_similarity': 0.9978509167645109,\n",
" 'tn': 167501703.0}}"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"e.labels(\"all\").metrics(\"all\") # all labels, all metrics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Efficiency\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Although calculating the Dice coefficient is straightforward, mikan is highly optimized to make this calculation exceptionally fast. \n",
"\n",
"For example:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">mikan DSC: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">8.</span>92x faster\n",
"</pre>\n"
],
"text/plain": [
"mikan DSC: \u001b[1;36m8.\u001b[0m92x faster\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">mikan DSC: <span style=\"font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9870104666571462</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9638299832080431</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9788861062581474</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9847150871159485</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9799666340747192</span><span style=\"font-weight: bold\">]</span>\n",
"</pre>\n"
],
"text/plain": [
"mikan DSC: \u001b[1m[\u001b[0m\u001b[1;36m0.9870104666571462\u001b[0m, \u001b[1;36m0.9638299832080431\u001b[0m, \u001b[1;36m0.9788861062581474\u001b[0m, \u001b[1;36m0.9847150871159485\u001b[0m, \u001b[1;36m0.9799666340747192\u001b[0m\u001b[1m]\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">medpy DSC: <span style=\"font-weight: bold\">[</span><span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9870104666571462</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9638299832080431</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9788861062581474</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9847150871159485</span>, <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.9799666340747192</span><span style=\"font-weight: bold\">]</span>\n",
"</pre>\n"
],
"text/plain": [
"medpy DSC: \u001b[1m[\u001b[0m\u001b[1;36m0.9870104666571462\u001b[0m, \u001b[1;36m0.9638299832080431\u001b[0m, \u001b[1;36m0.9788861062581474\u001b[0m, \u001b[1;36m0.9847150871159485\u001b[0m, \u001b[1;36m0.9799666340747192\u001b[0m\u001b[1m]\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from medpy.metric import dc\n",
"\n",
"e = mikan.Evaluator(gt, pred)\n",
"\n",
"# mikan: DSC\n",
"t = time.time()\n",
"mikan_dscs = e.labels([1,2,3,4,5]).metrics(\"dsc\")\n",
"mikan_costs = time.time() - t\n",
"\n",
"# medpy: DSC\n",
"t = time.time()\n",
"\n",
"pred_arr = sitk.GetArrayFromImage(pred)\n",
"gt_arr = sitk.GetArrayFromImage(gt)\n",
"\n",
"dscs = []\n",
"for i in (1,2,3,4,5):\n",
" dscs.append(dc(pred_arr == i, gt_arr == i))\n",
"medpy_costs = time.time() - t\n",
"\n",
"print(f\"mikan DSC: {medpy_costs / mikan_costs :.2f}x faster\")\n",
"print(f\"mikan DSC: {mikan_dscs}\")\n",
"print(f\"medpy DSC: {dscs}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mikan offers ultra-fast Hausdorff distance calculations::"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Mikan cost <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">4.15</span> s, HD = <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">23.2341</span> mm\n",
"</pre>\n"
],
"text/plain": [
"Mikan cost \u001b[1;36m4.15\u001b[0m s, HD = \u001b[1;36m23.2341\u001b[0m mm\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"t = time.time()\n",
"mikan_hd = e.labels(1).metrics(\"hd\")\n",
"print(f\"Mikan cost {time.time() - t:.2f} s, HD = {mikan_hd:.4f} mm\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Comparison with medpy:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">medpy cost <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">132.0814</span> s, HD = <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">23.2341</span> mm\n",
"</pre>\n"
],
"text/plain": [
"medpy cost \u001b[1;36m132.0814\u001b[0m s, HD = \u001b[1;36m23.2341\u001b[0m mm\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from medpy.metric import hd\n",
"t = time.time()\n",
"medpy_hd = hd(pred_arr == 1, gt_arr == 1, voxelspacing=gt.GetSpacing()[::-1]) # z, y, x\n",
"print(f\"medpy cost {time.time() - t:.4f} s, HD = {medpy_hd:.4f} mm\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Super Caching"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When calculating the Hausdorff Distance (HD), mikan also computes related metrics like the Average Symmetric Surface Distance (ASSD) and the 95th percentile Hausdorff Distance (HD95). There's no need to calculate them separately!"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Mikan cost <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.0000</span> s, ASSD = <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.4627</span> mm\n",
"</pre>\n"
],
"text/plain": [
"Mikan cost \u001b[1;36m0.0000\u001b[0m s, ASSD = \u001b[1;36m0.4627\u001b[0m mm\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"t = time.time()\n",
"mikan_hd = e.labels(1).metrics(\"assd\")\n",
"print(f\"Mikan cost {time.time() - t:.4f} s, ASSD = {mikan_hd:.4f} mm\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In contrast, medpy requires starting from scratch to calculate the ASSD, which can be very slow:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">medpy cost <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">125.13</span> s, ASSD = <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">0.4627</span> mm\n",
"</pre>\n"
],
"text/plain": [
"medpy cost \u001b[1;36m125.13\u001b[0m s, ASSD = \u001b[1;36m0.4627\u001b[0m mm\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from medpy.metric import assd\n",
"t = time.time()\n",
"medpy_hd = assd(pred_arr == 1, gt_arr == 1, voxelspacing=gt.GetSpacing()[::-1]) # z, y, x\n",
"print(f\"medpy cost {time.time() - t:.2f} s, ASSD = {medpy_hd:.4f} mm\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's another example with the Dice coefficient:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">mikan DSC: <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">2590.</span>26x faster\n",
"</pre>\n"
],
"text/plain": [
"mikan DSC: \u001b[1;36m2590.\u001b[0m26x faster\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from medpy.metric import dc\n",
"\n",
"# mikan: DSC\n",
"t = time.time()\n",
"mikan_dscs = e.labels([1,2,3,4,5]).metrics(\"dsc\")\n",
"mikan_costs = time.time() - t + 1e-10 # sometimes zero\n",
"\n",
"# medpy: DSC\n",
"t = time.time()\n",
"dscs = []\n",
"for i in (1,2,3,4,5):\n",
" dscs.append(dc(pred_arr == i, gt_arr == i))\n",
"medpy_costs = time.time() - t\n",
"\n",
"print(f\"mikan DSC: {medpy_costs / mikan_costs :.2f}x faster\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"mikan won't recalculate data that has already been processed. This is thanks to mikan's super caching feature!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Aliases\n",
"\n",
"Mikan also supports aliases. For example, you can refer to \"Dice\" as \"dsc\": "
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.9870104666571462"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"e.labels(1).metrics(\"dsc\") # dsc is also Dice!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We maintain an alias dictionary, allowing you to use any name on the left side, and they will be interpreted as the corresponding name on the right for calculations."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">{</span>\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'accuracy'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'acc'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Acc'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'ACC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Accuracy'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'RI'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'RandIndex'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'adjust_rand_score'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'adjust_rand_score'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'auc'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'auc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'AUC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'auc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'AUC_trapezoid'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'auc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'balanced_accuracy'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'balanced_accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'bacc'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'balanced_accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'BACC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'balanced_accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'BalancedAccuracy'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'balanced_accuracy'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'dice'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'dice'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Dice'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'dice'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'dsc'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'dice'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'DSC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'dice'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'f_score'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'f_score'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'jaccard_score'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'jaccard_score'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'iou'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'jaccard_score'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'IoU'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'jaccard_score'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'jaccard'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'jaccard_score'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Jaccard'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'jaccard_score'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'IntersectionOverUnion'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'jaccard_score'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'kappa'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'kappa'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'KAP'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'kappa'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Kappa'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'kappa'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'CohensKappa'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'kappa'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'mcc'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'mcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'MCC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'mcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'MatthewsCorrelationCoefficient'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'mcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'nmcc'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'nmcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'NMCC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'nmcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'nMCC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'nmcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'MCC_normalized'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'nmcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'amcc'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'amcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'AMCC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'amcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'aMCC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'amcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'MCC_absolute'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'amcc'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'precision'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'precision'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'prec'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'precision'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'PREC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'precision'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Precision'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'precision'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'sens'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'SENS'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Sensitivity'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Recall'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'recall'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'TPR'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'tpr'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'true_positive_rate'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'senstivity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'specificity'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'specificity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Specificity'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'specificity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'spec'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'specificity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'Spec'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'specificity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'SPEC'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'specificity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'TNR'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'specificity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'tnr'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'specificity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'true_negative_rate'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'specificity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'tn'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tn'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'TN'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tn'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'TrueNegative'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tn'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'tp'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tp'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'TP'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tp'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'TruePositive'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'tp'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'fn'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fn'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'FN'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fn'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'FalseNegative'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fn'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'fp'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fp'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'FP'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fp'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'FalsePositive'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fp'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'fnr'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fnr'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'FNR'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fnr'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'fpr'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fpr'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'FPR'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'fpr'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'volume_similarity'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'volume_similarity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'VolumetricSimilarity'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'volume_similarity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'vs'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'volume_similarity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'VS'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'volume_similarity'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'hausdorff_distance_95'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'hausdorff_distance_95'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'HD95'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'hausdorff_distance_95'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'hd95'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'hausdorff_distance_95'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'hausdorff_distance'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'hausdorff_distance'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'hd'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'hausdorff_distance'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'HD'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'hausdorff_distance'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'assd'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'assd'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'ASSD'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'assd'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'masd'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'masd'</span>,\n",
" <span style=\"color: #008000; text-decoration-color: #008000\">'MASD'</span>: <span style=\"color: #008000; text-decoration-color: #008000\">'masd'</span>\n",
"<span style=\"font-weight: bold\">}</span>\n",
"</pre>\n"
],
"text/plain": [
"\u001b[1m{\u001b[0m\n",
" \u001b[32m'accuracy'\u001b[0m: \u001b[32m'accuracy'\u001b[0m,\n",
" \u001b[32m'acc'\u001b[0m: \u001b[32m'accuracy'\u001b[0m,\n",
" \u001b[32m'Acc'\u001b[0m: \u001b[32m'accuracy'\u001b[0m,\n",
" \u001b[32m'ACC'\u001b[0m: \u001b[32m'accuracy'\u001b[0m,\n",
" \u001b[32m'Accuracy'\u001b[0m: \u001b[32m'accuracy'\u001b[0m,\n",
" \u001b[32m'RI'\u001b[0m: \u001b[32m'accuracy'\u001b[0m,\n",
" \u001b[32m'RandIndex'\u001b[0m: \u001b[32m'accuracy'\u001b[0m,\n",
" \u001b[32m'adjust_rand_score'\u001b[0m: \u001b[32m'adjust_rand_score'\u001b[0m,\n",
" \u001b[32m'auc'\u001b[0m: \u001b[32m'auc'\u001b[0m,\n",
" \u001b[32m'AUC'\u001b[0m: \u001b[32m'auc'\u001b[0m,\n",
" \u001b[32m'AUC_trapezoid'\u001b[0m: \u001b[32m'auc'\u001b[0m,\n",
" \u001b[32m'balanced_accuracy'\u001b[0m: \u001b[32m'balanced_accuracy'\u001b[0m,\n",
" \u001b[32m'bacc'\u001b[0m: \u001b[32m'balanced_accuracy'\u001b[0m,\n",
" \u001b[32m'BACC'\u001b[0m: \u001b[32m'balanced_accuracy'\u001b[0m,\n",
" \u001b[32m'BalancedAccuracy'\u001b[0m: \u001b[32m'balanced_accuracy'\u001b[0m,\n",
" \u001b[32m'dice'\u001b[0m: \u001b[32m'dice'\u001b[0m,\n",
" \u001b[32m'Dice'\u001b[0m: \u001b[32m'dice'\u001b[0m,\n",
" \u001b[32m'dsc'\u001b[0m: \u001b[32m'dice'\u001b[0m,\n",
" \u001b[32m'DSC'\u001b[0m: \u001b[32m'dice'\u001b[0m,\n",
" \u001b[32m'f_score'\u001b[0m: \u001b[32m'f_score'\u001b[0m,\n",
" \u001b[32m'jaccard_score'\u001b[0m: \u001b[32m'jaccard_score'\u001b[0m,\n",
" \u001b[32m'iou'\u001b[0m: \u001b[32m'jaccard_score'\u001b[0m,\n",
" \u001b[32m'IoU'\u001b[0m: \u001b[32m'jaccard_score'\u001b[0m,\n",
" \u001b[32m'jaccard'\u001b[0m: \u001b[32m'jaccard_score'\u001b[0m,\n",
" \u001b[32m'Jaccard'\u001b[0m: \u001b[32m'jaccard_score'\u001b[0m,\n",
" \u001b[32m'IntersectionOverUnion'\u001b[0m: \u001b[32m'jaccard_score'\u001b[0m,\n",
" \u001b[32m'kappa'\u001b[0m: \u001b[32m'kappa'\u001b[0m,\n",
" \u001b[32m'KAP'\u001b[0m: \u001b[32m'kappa'\u001b[0m,\n",
" \u001b[32m'Kappa'\u001b[0m: \u001b[32m'kappa'\u001b[0m,\n",
" \u001b[32m'CohensKappa'\u001b[0m: \u001b[32m'kappa'\u001b[0m,\n",
" \u001b[32m'mcc'\u001b[0m: \u001b[32m'mcc'\u001b[0m,\n",
" \u001b[32m'MCC'\u001b[0m: \u001b[32m'mcc'\u001b[0m,\n",
" \u001b[32m'MatthewsCorrelationCoefficient'\u001b[0m: \u001b[32m'mcc'\u001b[0m,\n",
" \u001b[32m'nmcc'\u001b[0m: \u001b[32m'nmcc'\u001b[0m,\n",
" \u001b[32m'NMCC'\u001b[0m: \u001b[32m'nmcc'\u001b[0m,\n",
" \u001b[32m'nMCC'\u001b[0m: \u001b[32m'nmcc'\u001b[0m,\n",
" \u001b[32m'MCC_normalized'\u001b[0m: \u001b[32m'nmcc'\u001b[0m,\n",
" \u001b[32m'amcc'\u001b[0m: \u001b[32m'amcc'\u001b[0m,\n",
" \u001b[32m'AMCC'\u001b[0m: \u001b[32m'amcc'\u001b[0m,\n",
" \u001b[32m'aMCC'\u001b[0m: \u001b[32m'amcc'\u001b[0m,\n",
" \u001b[32m'MCC_absolute'\u001b[0m: \u001b[32m'amcc'\u001b[0m,\n",
" \u001b[32m'precision'\u001b[0m: \u001b[32m'precision'\u001b[0m,\n",
" \u001b[32m'prec'\u001b[0m: \u001b[32m'precision'\u001b[0m,\n",
" \u001b[32m'PREC'\u001b[0m: \u001b[32m'precision'\u001b[0m,\n",
" \u001b[32m'Precision'\u001b[0m: \u001b[32m'precision'\u001b[0m,\n",
" \u001b[32m'senstivity'\u001b[0m: \u001b[32m'senstivity'\u001b[0m,\n",
" \u001b[32m'sens'\u001b[0m: \u001b[32m'senstivity'\u001b[0m,\n",
" \u001b[32m'SENS'\u001b[0m: \u001b[32m'senstivity'\u001b[0m,\n",
" \u001b[32m'Sensitivity'\u001b[0m: \u001b[32m'senstivity'\u001b[0m,\n",
" \u001b[32m'Recall'\u001b[0m: \u001b[32m'senstivity'\u001b[0m,\n",
" \u001b[32m'recall'\u001b[0m: \u001b[32m'senstivity'\u001b[0m,\n",
" \u001b[32m'TPR'\u001b[0m: \u001b[32m'senstivity'\u001b[0m,\n",
" \u001b[32m'tpr'\u001b[0m: \u001b[32m'senstivity'\u001b[0m,\n",
" \u001b[32m'true_positive_rate'\u001b[0m: \u001b[32m'senstivity'\u001b[0m,\n",
" \u001b[32m'specificity'\u001b[0m: \u001b[32m'specificity'\u001b[0m,\n",
" \u001b[32m'Specificity'\u001b[0m: \u001b[32m'specificity'\u001b[0m,\n",
" \u001b[32m'spec'\u001b[0m: \u001b[32m'specificity'\u001b[0m,\n",
" \u001b[32m'Spec'\u001b[0m: \u001b[32m'specificity'\u001b[0m,\n",
" \u001b[32m'SPEC'\u001b[0m: \u001b[32m'specificity'\u001b[0m,\n",
" \u001b[32m'TNR'\u001b[0m: \u001b[32m'specificity'\u001b[0m,\n",
" \u001b[32m'tnr'\u001b[0m: \u001b[32m'specificity'\u001b[0m,\n",
" \u001b[32m'true_negative_rate'\u001b[0m: \u001b[32m'specificity'\u001b[0m,\n",
" \u001b[32m'tn'\u001b[0m: \u001b[32m'tn'\u001b[0m,\n",
" \u001b[32m'TN'\u001b[0m: \u001b[32m'tn'\u001b[0m,\n",
" \u001b[32m'TrueNegative'\u001b[0m: \u001b[32m'tn'\u001b[0m,\n",
" \u001b[32m'tp'\u001b[0m: \u001b[32m'tp'\u001b[0m,\n",
" \u001b[32m'TP'\u001b[0m: \u001b[32m'tp'\u001b[0m,\n",
" \u001b[32m'TruePositive'\u001b[0m: \u001b[32m'tp'\u001b[0m,\n",
" \u001b[32m'fn'\u001b[0m: \u001b[32m'fn'\u001b[0m,\n",
" \u001b[32m'FN'\u001b[0m: \u001b[32m'fn'\u001b[0m,\n",
" \u001b[32m'FalseNegative'\u001b[0m: \u001b[32m'fn'\u001b[0m,\n",
" \u001b[32m'fp'\u001b[0m: \u001b[32m'fp'\u001b[0m,\n",
" \u001b[32m'FP'\u001b[0m: \u001b[32m'fp'\u001b[0m,\n",
" \u001b[32m'FalsePositive'\u001b[0m: \u001b[32m'fp'\u001b[0m,\n",
" \u001b[32m'fnr'\u001b[0m: \u001b[32m'fnr'\u001b[0m,\n",
" \u001b[32m'FNR'\u001b[0m: \u001b[32m'fnr'\u001b[0m,\n",
" \u001b[32m'fpr'\u001b[0m: \u001b[32m'fpr'\u001b[0m,\n",
" \u001b[32m'FPR'\u001b[0m: \u001b[32m'fpr'\u001b[0m,\n",
" \u001b[32m'volume_similarity'\u001b[0m: \u001b[32m'volume_similarity'\u001b[0m,\n",
" \u001b[32m'VolumetricSimilarity'\u001b[0m: \u001b[32m'volume_similarity'\u001b[0m,\n",
" \u001b[32m'vs'\u001b[0m: \u001b[32m'volume_similarity'\u001b[0m,\n",
" \u001b[32m'VS'\u001b[0m: \u001b[32m'volume_similarity'\u001b[0m,\n",
" \u001b[32m'hausdorff_distance_95'\u001b[0m: \u001b[32m'hausdorff_distance_95'\u001b[0m,\n",
" \u001b[32m'HD95'\u001b[0m: \u001b[32m'hausdorff_distance_95'\u001b[0m,\n",
" \u001b[32m'hd95'\u001b[0m: \u001b[32m'hausdorff_distance_95'\u001b[0m,\n",
" \u001b[32m'hausdorff_distance'\u001b[0m: \u001b[32m'hausdorff_distance'\u001b[0m,\n",
" \u001b[32m'hd'\u001b[0m: \u001b[32m'hausdorff_distance'\u001b[0m,\n",
" \u001b[32m'HD'\u001b[0m: \u001b[32m'hausdorff_distance'\u001b[0m,\n",
" \u001b[32m'assd'\u001b[0m: \u001b[32m'assd'\u001b[0m,\n",
" \u001b[32m'ASSD'\u001b[0m: \u001b[32m'assd'\u001b[0m,\n",
" \u001b[32m'masd'\u001b[0m: \u001b[32m'masd'\u001b[0m,\n",
" \u001b[32m'MASD'\u001b[0m: \u001b[32m'masd'\u001b[0m\n",
"\u001b[1m}\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from mikan.alias import ALIAS_DICT\n",
"print(ALIAS_DICT)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Result Consistency\n",
"\n",
"The results are completely consistent with medpy. You can use mikan with confidence!\n",
"\n",
"### Summary\n",
"\n",
"- Mikan can calculate almost all segmentation metrics.\n",
"- Mikan is exceptionally fast.\n",
"- Mikan is very easy to use.\n",
"\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}