Skip to content

Instantly share code, notes, and snippets.

@kaizu
Created September 4, 2020 01:57
Show Gist options
  • Save kaizu/8efca2f51211a8b8e0ed3f42597a1708 to your computer and use it in GitHub Desktop.
Save kaizu/8efca2f51211a8b8e0ed3f42597a1708 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test spot detection (Evaluation)\n",
"\n",
"This is a test suite."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"!pip uninstall -y scopyon\n",
"!pip install git+https://github.com/ecell/scopyon\n",
"!pip freeze | grep scopyon"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy\n",
"import scopyon"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Set physical parameters."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"from pathlib import Path\n",
"inputpath = Path(\"./artifacts\")\n",
"\n",
"artifacts = Path(\"./artifacts\")\n",
"artifacts.mkdir(parents=True, exist_ok=True)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"config = scopyon.Configuration(str(inputpath / 'config.yaml'))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"pixel_length = config.default.detector.pixel_length / config.default.magnification\n",
"L_2 = config.default.detector.image_size[0] * pixel_length * 0.5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Collect data."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/kaizu/environ/anaconda3/lib/python3.7/site-packages/skimage/feature/blob.py:126: RuntimeWarning: invalid value encountered in true_divide\n",
" pos1 = blob1[:ndim] / (max_sigma * root_ndim)\n",
"/home/kaizu/environ/anaconda3/lib/python3.7/site-packages/skimage/feature/blob.py:127: RuntimeWarning: invalid value encountered in true_divide\n",
" pos2 = blob2[:ndim] / (max_sigma * root_ndim)\n"
]
}
],
"source": [
"res = []\n",
"for i in range(10):\n",
" img = scopyon.Image.load(str(inputpath / f'image{i:03d}.npy'))\n",
" data = numpy.load(inputpath / f'data{i:03d}.npy')\n",
" \n",
" spots = scopyon.analysis.spot_detection(\n",
" img.as_array(), min_sigma=1, max_sigma=4, threshold=40.0, overlap=0.5)\n",
" numpy.save(artifacts / f'spots{i:03d}.npy', spots)\n",
" res.append((img, data, spots))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(<scopyon.image.Image at 0x14fa06174110>,\n",
" array([[356.09222303, 146.00333949],\n",
" [115.64794422, 281.77316177],\n",
" [367.86811253, 216.13050758],\n",
" ...,\n",
" [352.99904041, 98.32232649],\n",
" [374.10499998, 140.15222748],\n",
" [369.07057184, 49.60580637]]),\n",
" array([[5.10342596e+02, 3.69881913e+02, 6.08821891e+02, 1.83742555e+05,\n",
" 1.71623928e+02, 1.19236538e+00],\n",
" [5.08811035e+02, 1.20208096e+02, 2.11166976e+03, 1.86044521e+05,\n",
" 1.20702206e+02, 5.94516821e+00],\n",
" [5.08197707e+02, 1.11994326e+02, 1.59905233e+03, 1.86335912e+05,\n",
" 3.64401560e+02, 1.39681448e+00],\n",
" ...,\n",
" [5.05265779e-01, 5.03467801e+02, 6.01330613e+02, 1.83950870e+05,\n",
" 3.87941964e+03, 1.53083505e-01],\n",
" [8.96973188e-01, 2.46741759e+02, 1.48207600e+03, 1.84091270e+05,\n",
" 9.03947598e+01, 6.69960786e+00],\n",
" [1.41987253e+00, 1.74386668e+02, 9.61936997e+02, 1.84584727e+05,\n",
" 2.49995816e+02, 1.23022522e+00]])),\n",
" (<scopyon.image.Image at 0x14fa072eb4d0>,\n",
" array([[ 81.16449308, 0.80242695],\n",
" [345.88656606, 428.16299411],\n",
" [225.64918882, 505.15314725],\n",
" ...,\n",
" [202.91788695, 227.53377723],\n",
" [ 21.27787868, 257.57977838],\n",
" [440.84524075, 220.06435755]]),\n",
" array([[ 5.08789209e+02, 5.09430162e+02, 6.96981811e+02,\n",
" 1.27475753e+05, 6.38146345e+01, 3.79333148e+00],\n",
" [ 5.09314779e+02, 4.36462946e+02, 1.17948434e+03,\n",
" 1.84297075e+05, 1.44435721e+02, 2.66700449e+00],\n",
" [ 5.11088815e+02, 3.74000262e+02, 2.22153266e+02,\n",
" 1.84505983e+05, 2.55001946e+02, 5.72004502e-02],\n",
" ...,\n",
" [ 1.08844242e+00, 3.05576150e+02, 3.82733839e+02,\n",
" 1.82526202e+05, 2.06548507e+02, 5.90242267e-01],\n",
" [ 4.40368625e+00, 1.53941675e+02, -1.12870566e+03,\n",
" 1.84805634e+05, -6.32082949e+01, 6.66142981e+00],\n",
" [ 1.03725094e+00, 1.31044995e+02, 4.62548033e+02,\n",
" 1.83116871e+05, 1.97582643e+02, 7.45192161e-01]])),\n",
" (<scopyon.image.Image at 0x14fa06174750>,\n",
" array([[ 43.94807808, 181.87380584],\n",
" [348.91206267, 63.62228283],\n",
" [369.25716933, 442.96093075],\n",
" ...,\n",
" [354.64271676, 77.60002033],\n",
" [332.17167798, 15.059298 ],\n",
" [405.98745672, 48.03945483]]),\n",
" array([[5.08858270e+02, 9.89208503e+01, 1.87083890e+03, 1.84032179e+05,\n",
" 1.18472464e+02, 5.30813088e+00],\n",
" [5.08541070e+02, 4.94723729e+02, 2.27656778e+02, 2.36753652e+05,\n",
" 1.54091703e+03, 1.22107128e-01],\n",
" [5.08268711e+02, 4.36722658e+02, 1.23320010e+03, 2.35893026e+05,\n",
" 9.36014153e+01, 4.24408690e+00],\n",
" ...,\n",
" [4.13015662e-01, 4.59350328e+02, 3.12551525e+02, 1.83669716e+05,\n",
" 2.02218638e+03, 1.32938519e-01],\n",
" [5.47110124e-01, 2.91021758e+02, 5.26305760e+02, 1.82652296e+05,\n",
" 7.12398446e+01, 2.88316463e+00],\n",
" [6.81660682e-01, 2.39147166e+02, 5.89399996e+02, 1.82961493e+05,\n",
" 1.17289989e+02, 1.76326675e+00]])),\n",
" (<scopyon.image.Image at 0x14fa31fec890>,\n",
" array([[190.96000361, 1.44394621],\n",
" [ 54.65990755, 171.14169492],\n",
" [133.59970583, 281.17657066],\n",
" ...,\n",
" [383.09616806, 359.16772773],\n",
" [299.98899053, 397.12929971],\n",
" [269.4473922 , 163.92692174]]),\n",
" array([[ 5.11145686e+02, 4.00809930e+02, 4.36344436e+02,\n",
" 1.82941990e+05, 1.17723943e+02, 1.80854195e+00],\n",
" [ 5.10782268e+02, 1.76423782e+02, 1.07843544e+03,\n",
" 1.83687299e+05, 1.15998069e+02, 4.27840842e+00],\n",
" [ 5.08382842e+02, 8.15909204e+01, -5.45778090e+02,\n",
" 1.84729262e+05, -4.26967680e+01, 4.63156210e+00],\n",
" ...,\n",
" [ 1.80513738e+00, 3.13767809e+02, 1.67953315e+03,\n",
" 1.82763577e+05, 1.06801580e+02, 5.43999440e+00],\n",
" [ 2.01928651e+00, 1.72080835e+02, 2.92575367e+03,\n",
" 1.83678012e+05, 1.46169423e+02, 7.04311932e+00],\n",
" [ 1.07770411e+00, 1.65691047e+01, 3.26615620e+02,\n",
" 1.82817501e+05, 5.90111038e+02, 1.91359787e-01]])),\n",
" (<scopyon.image.Image at 0x14fa07c4a9d0>,\n",
" array([[118.27620502, 371.06266792],\n",
" [ 52.69940098, 16.02990875],\n",
" [352.83627839, 289.96217276],\n",
" ...,\n",
" [ 65.77398973, 473.56248684],\n",
" [348.70248414, 156.69755273],\n",
" [ 39.76965624, 184.1155371 ]]),\n",
" array([[ 5.09987523e+02, 4.88118594e+02, 9.44660877e+02,\n",
" 1.83609226e+05, 1.00943788e+02, 3.36961647e+00],\n",
" [ 5.10601532e+02, 3.92182608e+02, 8.38109434e+02,\n",
" 1.83633900e+05, 1.17886043e+02, 2.90584381e+00],\n",
" [ 5.10579130e+02, 3.78432842e+02, -1.31927856e+02,\n",
" 1.82283434e+05, -1.28770362e+01, 4.95254537e+00],\n",
" ...,\n",
" [ 1.49236549e-01, 2.02641178e+02, 7.02923510e+02,\n",
" 1.83485919e+05, 5.15740691e+01, 6.79107685e+00],\n",
" [ 1.34870994e+00, 1.67145144e+02, 1.24845858e+03,\n",
" 1.82790656e+05, 1.44517231e+02, 2.91746738e+00],\n",
" [ 2.84201021e+00, 4.01730517e+01, 1.81307215e+03,\n",
" 1.82962815e+05, 1.13583129e+02, 5.23104467e+00]])),\n",
" (<scopyon.image.Image at 0x14fa0908a1d0>,\n",
" array([[405.83755453, 298.55910735],\n",
" [134.5971336 , 506.32442408],\n",
" [140.81935606, 346.96147603],\n",
" ...,\n",
" [418.02844617, 386.64943104],\n",
" [380.35468861, 380.15663658],\n",
" [177.2914551 , 471.4650986 ]]),\n",
" array([[ 5.09299982e+02, 3.77207546e+02, -2.85748391e+02,\n",
" 1.82524321e+05, -1.81527127e+01, 5.66480001e+00],\n",
" [ 5.09652007e+02, 3.22006329e+02, 1.04768739e+03,\n",
" 1.83039727e+05, 6.27818782e+01, 6.21777913e+00],\n",
" [ 5.09743389e+02, 9.37318734e+01, -3.32406095e+02,\n",
" 1.83884136e+05, -4.52169223e+01, 2.94718265e+00],\n",
" ...,\n",
" [ 2.30954122e+00, 4.63501177e+02, 3.12790264e+02,\n",
" 2.35048325e+05, 1.81369590e+03, 1.37679608e-01],\n",
" [ 3.57626003e+00, 1.20082952e+02, 1.09795027e+03,\n",
" 2.35724687e+05, 1.05090877e+02, 3.32775994e+00],\n",
" [ 1.51444035e+00, 3.42818598e+02, 6.67363452e+02,\n",
" 1.83979870e+05, 1.87281365e+02, 1.13661240e+00]])),\n",
" (<scopyon.image.Image at 0x14fa072eb650>,\n",
" array([[377.43289046, 89.0024471 ],\n",
" [313.08406714, 45.53313141],\n",
" [411.94724852, 15.22675522],\n",
" ...,\n",
" [457.99256436, 477.53438856],\n",
" [510.99418215, 499.02693583],\n",
" [258.66772554, 386.51911939]]),\n",
" array([[ 5.08219669e+02, 4.96537997e+02, 2.29686566e+03,\n",
" 1.83266106e+05, 1.35984467e+02, 5.57122645e+00],\n",
" [ 5.11342357e+02, 4.40126945e+02, 7.49111206e+02,\n",
" 1.83404902e+05, 9.26072469e+01, 4.75556308e+00],\n",
" [ 5.07684397e+02, 3.71976310e+02, -6.12627414e+02,\n",
" 1.83384589e+05, -3.18706834e+01, 6.49797435e+00],\n",
" ...,\n",
" [ 3.63907905e+00, 2.12687809e+01, 1.99257443e+03,\n",
" 2.34319022e+05, 5.73514336e+01, 1.19404691e+01],\n",
" [ 1.47936081e+00, 3.42603353e+02, 6.77608943e+02,\n",
" 1.82865564e+05, 1.72088603e+02, 1.25820436e+00],\n",
" [ 2.55538372e+00, 2.62933524e+02, 1.73791207e+03,\n",
" 1.84060272e+05, 1.66439738e+02, 3.35273302e+00]])),\n",
" (<scopyon.image.Image at 0x14fa072eb490>,\n",
" array([[-5.64950740e-03, 1.79953985e+02],\n",
" [ 1.32104077e+02, 4.93612659e+02],\n",
" [ 3.57433010e+01, 1.70745728e+01],\n",
" ...,\n",
" [ 2.49216400e+02, 4.05550262e+02],\n",
" [ 5.09825818e+02, 1.69402717e+02],\n",
" [ 1.83101389e+02, 2.80936620e+02]]),\n",
" array([[ 5.10051019e+02, 4.47217443e+02, 7.70272054e+02,\n",
" 1.83102146e+05, 4.79137212e+01, 6.46220608e+00],\n",
" [ 5.08612285e+02, 3.73778861e+02, -3.08064464e+02,\n",
" 1.83613736e+05, -3.06609054e+01, 3.23151700e+00],\n",
" [ 5.09815941e+02, 1.69581707e+02, 1.05621093e+03,\n",
" 1.83737285e+05, 7.41869165e+01, 5.31574718e+00],\n",
" ...,\n",
" [ 3.78903731e-01, 3.74879700e+02, 3.06869869e+02,\n",
" 1.83358647e+05, 1.82285782e+02, 5.49065894e-01],\n",
" [ 5.15146064e-01, 3.29941744e+02, 4.97439706e+02,\n",
" 1.82875012e+05, 2.73675531e+02, 5.87558202e-01],\n",
" [ 2.79842637e+00, 5.72065876e+01, 1.63446495e+03,\n",
" 1.83246072e+05, 1.28875901e+02, 4.09188203e+00]])),\n",
" (<scopyon.image.Image at 0x14fa07650a50>,\n",
" array([[ 9.16125497, 230.46669352],\n",
" [123.88070742, 411.60159528],\n",
" [165.52463727, 469.14694898],\n",
" ...,\n",
" [205.7768759 , 466.26572333],\n",
" [141.57231412, 139.39889958],\n",
" [166.51964938, 191.03225256]]),\n",
" array([[5.10635098e+02, 4.33507426e+02, 7.68731915e+02, 1.83067689e+05,\n",
" 1.14925665e+02, 2.73927930e+00],\n",
" [5.09635227e+02, 4.07157047e+02, 9.80574330e+02, 1.82677297e+05,\n",
" 5.39954606e+01, 6.86026503e+00],\n",
" [5.10746433e+02, 3.73956783e+02, 3.76188647e+02, 1.84416267e+05,\n",
" 2.74174280e+02, 4.36071753e-01],\n",
" ...,\n",
" [1.36882504e+00, 1.85881033e+02, 3.43068477e+03, 1.84247313e+05,\n",
" 1.93001576e+02, 6.67734167e+00],\n",
" [6.10586104e+00, 1.79097213e+02, 1.90638929e+02, 1.84426505e+05,\n",
" 2.55026875e+02, 7.09886642e-02],\n",
" [1.80273449e+00, 6.19637299e+01, 1.32119867e+03, 1.83252304e+05,\n",
" 1.31712571e+02, 3.30208256e+00]])),\n",
" (<scopyon.image.Image at 0x14fa072ebed0>,\n",
" array([[467.4505987 , 223.67924817],\n",
" [ 52.81605387, 363.20205683],\n",
" [364.42403451, 29.15189691],\n",
" ...,\n",
" [179.2012337 , 443.35777758],\n",
" [ 13.31369195, 103.0872777 ],\n",
" [235.58283422, 88.94340176]]),\n",
" array([[ 5.08772325e+02, 3.76385957e+02, -6.60439361e+02,\n",
" 1.83659435e+05, -3.88619624e+01, 5.77763133e+00],\n",
" [ 5.07915702e+02, 8.54171954e+00, -5.57008658e+02,\n",
" 1.84921604e+05, -4.13934094e+01, 4.81323841e+00],\n",
" [ 5.10237001e+02, 4.64889370e+02, 6.18412068e+02,\n",
" 2.10611645e+05, 1.41370270e+02, 1.48054341e+00],\n",
" ...,\n",
" [ 2.49894100e+00, 9.92121616e+01, 2.19405162e+03,\n",
" 1.82538104e+05, 1.75657177e+02, 4.04762198e+00],\n",
" [ 2.27411784e+00, 6.85153314e+01, 1.51832463e+03,\n",
" 1.83833807e+05, 1.32133804e+02, 3.73095773e+00],\n",
" [ 5.79346785e-01, 1.49562178e+01, 9.16394225e+02,\n",
" 1.82891530e+05, 1.05258280e+02, 3.46517539e+00]]))]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"res"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Find closest true positions from spots detected."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"closest = []\n",
"for img, data, spots in res:\n",
" for spot in spots:\n",
" distance = data - spot[0: 2]\n",
" idx = (distance ** 2).sum(axis=1).argmin()\n",
" closest.append(distance[idx])\n",
"closest = numpy.array(closest).T"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculate average and std for the accuracy of the spot detection method."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Average along x-axis = +0.01747 pixels, std = 1.180638361085026\n",
"Average along y-axis = +0.00887 pixels, std = 1.207056270635648\n"
]
}
],
"source": [
"print(f\"Average along x-axis = {numpy.average(closest[0]):+.5f} pixels, std = {numpy.std(closest[0])}\")\n",
"print(f\"Average along y-axis = {numpy.average(closest[1]):+.5f} pixels, std = {numpy.std(closest[1])}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Show the heat map."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import plotly.express as px\n",
"H, xedges, yedges = numpy.histogram2d(x=closest[0], y=closest[1], bins=41, range=[[-2, +2], [-2, +2]])\n",
"fig = px.imshow(H, x=(xedges[: -1]+xedges[1: ])*0.5, y=(yedges[: -1]+yedges[1: ])*0.5)\n",
"fig.show()"
]
}
],
"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.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment