mirror of
https://github.com/c-sooyoung/lemon-sandbox.git
synced 2026-11-16 04:07:59 +09:00
260414
This commit is contained in:
1 parent
2545c55958
commit
346b9cb2d0
1 file changed
+280
@@ -0,0 +1,280 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "405952b4",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"# THIS METHOD IS WRONG FOR IDENTIFYING ATOMS"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 2,
|
||||||
|
"id": "368a5090",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import numpy as np\n",
|
||||||
|
"from matplotlib import pyplot as plt\n",
|
||||||
|
"import tifffile\n",
|
||||||
|
"import os\n",
|
||||||
|
"from scipy.ndimage import gaussian_filter, binary_opening, label\n",
|
||||||
|
"from skimage import exposure, filters, morphology, measure\n",
|
||||||
|
"from scipy.signal import convolve2d\n",
|
||||||
|
"from skimage.morphology import disk\n",
|
||||||
|
"from skimage.feature import peak_local_max\n",
|
||||||
|
"\n",
|
||||||
|
"from tqdm.notebook import tqdm\n",
|
||||||
|
"\n",
|
||||||
|
"plt.rcParams['font.family'] = 'sans-serif'\n",
|
||||||
|
"plt.rcParams['font.sans-serif'] = ['Inter Variable ss02']\n",
|
||||||
|
"plt.rcParams['figure.titlesize'] = 10\n",
|
||||||
|
"plt.rcParams['axes.titlesize'] = 10"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 3,
|
||||||
|
"id": "2912e633",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"['bto02_objp_zstack_crop_08bit_iter1000.tif',\n",
|
||||||
|
" 'bto02_objp_zsum_crop_08bit_iter1000.tif',\n",
|
||||||
|
" 'bto05_objp_zstack_crop_08bit_iter1000.tif',\n",
|
||||||
|
" 'bto05_objp_zsum_crop_08bit_iter1000.tif',\n",
|
||||||
|
" 'bto08_objp_zstack_crop_08bit_iter0100.tif',\n",
|
||||||
|
" 'bto08_objp_zsum_crop_08bit_iter0100.tif',\n",
|
||||||
|
" '260414.ipynb']"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 3,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"os.listdir()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 9,
|
||||||
|
"id": "2d3b2fa3",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"ptycho_stack = tifffile.imread('bto02_objp_zstack_crop_08bit_iter1000.tif') / 255\n",
|
||||||
|
"# ptycho_sum = tifffile.imread('bto02_objp_zsum_crop_08bit_iter1000.tif') / 255\n",
|
||||||
|
"ptycho_slice = ptycho_stack[13]\n",
|
||||||
|
"# bf = plt.imread('bf.png').mean(axis=2)\n",
|
||||||
|
"# bf = 1 - (bf - bf.min()) / (bf.max() - bf.min())\n",
|
||||||
|
"# haadf = plt.imread('haadf.png').mean(axis=2)\n",
|
||||||
|
"# haadf = (haadf - haadf.min()) / (haadf.max() - haadf.min()) \n",
|
||||||
|
"# laadf = plt.imread('laadf.png').mean(axis=2)\n",
|
||||||
|
"# laadf = (laadf - laadf.min()) / (laadf.max() - laadf.min())\n",
|
||||||
|
"\n",
|
||||||
|
"images = [ptycho_slice]\n",
|
||||||
|
"# names = ['Ptycho Sum', 'Ptycho Slice', 'Bright Field (Inverted)', 'HAADF', 'LAADF']\n",
|
||||||
|
"\n",
|
||||||
|
"# fig, axs = plt.subplots(1, len(images), dpi=300)\n",
|
||||||
|
"# for i, ax in enumerate(axs):\n",
|
||||||
|
"# ax.axis('off')\n",
|
||||||
|
"# ax.imshow(images[i], cmap='gray')\n",
|
||||||
|
"# ax.set_title(names[i], size=8)\n",
|
||||||
|
"\n",
|
||||||
|
"# plt.tight_layout()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 10,
|
||||||
|
"id": "a52ce371",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"def feature_count_vs_radius(img, radii, high_pass=5):\n",
|
||||||
|
" if high_pass:\n",
|
||||||
|
" img = img - gaussian_filter(img, sigma=high_pass)\n",
|
||||||
|
"\n",
|
||||||
|
" counts = []\n",
|
||||||
|
" peak_locs = []\n",
|
||||||
|
"\n",
|
||||||
|
" for r in tqdm(radii):\n",
|
||||||
|
" # ---- 1. Build a disc kernel ------------------------------------\n",
|
||||||
|
" # (skimage.disk returns a binary mask; we normalize it to sum = 1)\n",
|
||||||
|
" kernel = disk(r).astype(float)\n",
|
||||||
|
" kernel /= kernel.sum()\n",
|
||||||
|
"\n",
|
||||||
|
" # ---- 2. Convolve -------------------------------------------------\n",
|
||||||
|
" conv = convolve2d(img, kernel, mode='same', boundary='symm')\n",
|
||||||
|
"\n",
|
||||||
|
" # ---- 3. Find local maxima ---------------------------------------\n",
|
||||||
|
" # * min_distance ensures that peaks are at least r pixels apart\n",
|
||||||
|
" # * threshold_abs picks peaks that stand out above the background\n",
|
||||||
|
" peaks = peak_local_max(conv,\n",
|
||||||
|
" min_distance=int(r),\n",
|
||||||
|
" threshold_abs=conv.mean() + 2*conv.std(),\n",
|
||||||
|
" num_peaks=np.inf)\n",
|
||||||
|
"\n",
|
||||||
|
" counts.append(len(peaks))\n",
|
||||||
|
" peak_locs.append(peaks)\n",
|
||||||
|
" \n",
|
||||||
|
" return radii, counts, peak_locs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 11,
|
||||||
|
"id": "6d8b25e3",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"application/vnd.jupyter.widget-view+json": {
|
||||||
|
"model_id": "9599a4de81f440cb9c9cdbf3d1925c78",
|
||||||
|
"version_major": 2,
|
||||||
|
"version_minor": 0
|
||||||
|
},
|
||||||
|
"text/plain": [
|
||||||
|
" 0%| | 0/32 [00:00<?, ?it/s]"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"r, c, pl = [], [], []\n",
|
||||||
|
"radii = np.arange(1, 32+1, 1)\n",
|
||||||
|
"\n",
|
||||||
|
"for img in images:\n",
|
||||||
|
" r_i, c_i, pl_i = feature_count_vs_radius(img, radii, high_pass=8)\n",
|
||||||
|
" r.append(r_i)\n",
|
||||||
|
" c.append(c_i)\n",
|
||||||
|
" pl.append(pl_i)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 12,
|
||||||
|
"id": "c18ffc6d",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"# fig, axs = plt.subplots(1, len(images), figsize=(18, 4), sharey=True, dpi=300)\n",
|
||||||
|
"# for i, ax in enumerate(axs):\n",
|
||||||
|
"# ax.plot(r[i], c[i], 'ko-')\n",
|
||||||
|
"# ax.set_xlim(r[i][0], r[i][-1])\n",
|
||||||
|
"# ax.set_title(names[i])\n",
|
||||||
|
"# ax.set_xlabel('Kernel radius (pixels)')\n",
|
||||||
|
"# axs[0].set_ylabel('Feature count')\n",
|
||||||
|
"# plt.tight_layout()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 13,
|
||||||
|
"id": "b95333bc",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"# idxs = [6, 14, 20]\n",
|
||||||
|
"\n",
|
||||||
|
"# for i in range(len(images)):\n",
|
||||||
|
"# plt.figure(dpi=300)\n",
|
||||||
|
"# plt.imshow(images[i], cmap='gray')\n",
|
||||||
|
"# for idx in idxs:\n",
|
||||||
|
"# plt.scatter(\n",
|
||||||
|
"# pl[i][idx][:,1],\n",
|
||||||
|
"# pl[i][idx][:,0],\n",
|
||||||
|
"# s=3,\n",
|
||||||
|
"# edgecolors='none')\n",
|
||||||
|
"# plt.axis('off')\n",
|
||||||
|
"\n",
|
||||||
|
"# plt.legend(['Ba', 'O', 'Ti'], loc='lower right')\n",
|
||||||
|
"\n",
|
||||||
|
"# plt.show()\n",
|
||||||
|
"# plt.close()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 15,
|
||||||
|
"id": "bd4f0ef8",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"image/png": "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 truncated
|
||||||
|
"text/plain": [
|
||||||
|
"<Figure size 460.8x345.6 with 1 Axes>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "display_data"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"idxs = [6, 14, 20]\n",
|
||||||
|
"i = 0\n",
|
||||||
|
"\n",
|
||||||
|
"plt.figure(dpi=72)\n",
|
||||||
|
"plt.imshow(images[i], cmap='gray')\n",
|
||||||
|
"for idx in idxs:\n",
|
||||||
|
" plt.scatter(\n",
|
||||||
|
" pl[i][idx][:,1][pl[i][idx][:,1] < 300],\n",
|
||||||
|
" pl[i][idx][:,0][pl[i][idx][:,1] < 300],\n",
|
||||||
|
" s=30,)\n",
|
||||||
|
"plt.axis('off')\n",
|
||||||
|
"\n",
|
||||||
|
"plt.xlim(200, 400)\n",
|
||||||
|
"plt.ylim(200, 400)\n",
|
||||||
|
"\n",
|
||||||
|
"# plt.legend(['Ba', 'O', 'Ti'], loc='lower right')\n",
|
||||||
|
"\n",
|
||||||
|
"x = 385\n",
|
||||||
|
"L = 55\n",
|
||||||
|
"plt.plot([x - L, x], [215] *2, 'w-', lw=10)\n",
|
||||||
|
"plt.text(x - L/2, 220, '1 nm', color='w', ha='center', va='bottom', fontsize=30)\n",
|
||||||
|
"\n",
|
||||||
|
"plt.show()\n",
|
||||||
|
"plt.close()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "8f1b5ac6",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "lemon",
|
||||||
|
"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.12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 5
|
||||||
|
}
|
||||||
Reference in new issue
Block a user