pages.uoregon.edu/courses/uoph410-510a_Image-Analysis/wk2/s2.py

357 lines
9.4 KiB
Python

import marimo
__generated_with = "0.19.11"
app = marimo.App(width="medium")
@app.cell
def _():
import marimo as mo
return (mo,)
@app.cell
def _():
import matplotlib, matplotlib.pyplot as plt
plt.ion()
return (plt,)
@app.cell
def _():
import numpy as np
return (np,)
@app.cell
def _():
from skimage import io
from skimage.filters import threshold_otsu, threshold_local
return io, threshold_local, threshold_otsu
@app.cell
def _(mo):
from pathlib import Path
mo.pdf(src=Path("Homework2.pdf"), width="100%", height="50vh")
return
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
## 1. Thresholding
""")
return
@app.cell
def _(io):
robert_mapplethrope_calla_lily_1984_png = io.imread("robert-mapplethrope-calla-lily-1984.png", as_gray=True)
return (robert_mapplethrope_calla_lily_1984_png,)
@app.cell
def _(plt, robert_mapplethrope_calla_lily_1984_png):
fig1, ax1 = plt.subplots()
p1 = ax1.imshow(robert_mapplethrope_calla_lily_1984_png, cmap="gray")
fig1.colorbar(p1, ax=ax1)
fig1
return
@app.cell
def _(robert_mapplethrope_calla_lily_1984_png, threshold_otsu):
robert_mapplethrope_calla_lily_global_threshold = threshold_otsu(robert_mapplethrope_calla_lily_1984_png)
robert_mapplethrope_calla_lily_global_threshold # print
return (robert_mapplethrope_calla_lily_global_threshold,)
@app.cell
def _(
plt,
robert_mapplethrope_calla_lily_1984_png,
robert_mapplethrope_calla_lily_global_threshold,
):
fig2, (ax2a, ax2b) = plt.subplots(1, 2, figsize=(8, 4))
ax2a.hist(robert_mapplethrope_calla_lily_1984_png.flatten(), log=True, bins="auto")
ax2a.vlines(robert_mapplethrope_calla_lily_global_threshold, 0, 80_000, color="r")
p2b = ax2b.imshow(robert_mapplethrope_calla_lily_1984_png > robert_mapplethrope_calla_lily_global_threshold, cmap="gray")
fig2.colorbar(p2b, ax=ax2b)
fig2
return
@app.cell
def _(io, plt):
fig3, ax3 = plt.subplots()
istanbul_arch_museum_gray_crop_png = io.imread("istanbul_arch_museum_gray_crop.png", as_gray=True)
p3 = ax3.imshow(istanbul_arch_museum_gray_crop_png, cmap="gray")
fig3.colorbar(p3, ax=ax3)
fig3
return (istanbul_arch_museum_gray_crop_png,)
@app.cell
def _(istanbul_arch_museum_gray_crop_png, threshold_otsu):
istanbul_global_threshold = threshold_otsu(istanbul_arch_museum_gray_crop_png)
istanbul_global_threshold # print
return (istanbul_global_threshold,)
@app.cell
def _(istanbul_arch_museum_gray_crop_png, istanbul_global_threshold, plt):
fig4, (ax4a, ax4b) = plt.subplots(1, 2, figsize=(8, 4))
ax4a.hist(istanbul_arch_museum_gray_crop_png.flatten(), log=True, bins="auto")
ax4a.vlines(istanbul_global_threshold, 0, 300_000, color='r')
p4b = ax4b.imshow(istanbul_arch_museum_gray_crop_png > istanbul_global_threshold, cmap="gray")
fig4.colorbar(p4b, ax=ax4b)
fig4
return
@app.cell
def _(io):
robert_mapplethrope_calla_lily_1984_crop_png = io.imread("robert-mapplethrope-calla-lily-1984_CROP.png", as_gray=True)
return (robert_mapplethrope_calla_lily_1984_crop_png,)
@app.cell
def _(plt, robert_mapplethrope_calla_lily_1984_crop_png):
fig5, ax5 = plt.subplots()
p5 = ax5.imshow(robert_mapplethrope_calla_lily_1984_crop_png, cmap="gray")
fig5.colorbar(p5, ax=ax5)
fig5
return
@app.cell
def _(robert_mapplethrope_calla_lily_1984_crop_png, threshold_otsu):
robert_mapplethrope_calla_lily_crop_global_threshold = threshold_otsu(robert_mapplethrope_calla_lily_1984_crop_png)
robert_mapplethrope_calla_lily_crop_global_threshold # print
return (robert_mapplethrope_calla_lily_crop_global_threshold,)
@app.cell
def _(
plt,
robert_mapplethrope_calla_lily_1984_crop_png,
robert_mapplethrope_calla_lily_crop_global_threshold,
):
fig6, (ax6a, ax6b) = plt.subplots(1, 2, figsize=(8, 4))
ax6a.hist(robert_mapplethrope_calla_lily_1984_crop_png.flatten(), log=True, bins="auto")
ax6a.vlines(robert_mapplethrope_calla_lily_crop_global_threshold, 0, 80_000, color="r")
p6b = ax6b.imshow(robert_mapplethrope_calla_lily_1984_crop_png > robert_mapplethrope_calla_lily_crop_global_threshold, cmap="gray")
fig6.colorbar(p6b, ax=ax6b)
fig6
return
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
## 2. Thresholding, again
""")
return
@app.cell
def _(
istanbul_arch_museum_gray_crop_png,
plt,
robert_mapplethrope_calla_lily_1984_crop_png,
robert_mapplethrope_calla_lily_1984_png,
threshold_local,
):
fig7, (ax7a, ax7b, ax7c) = plt.subplots(1, 3, figsize=(12, 4))
p7a = ax7a.imshow(robert_mapplethrope_calla_lily_1984_png > threshold_local(robert_mapplethrope_calla_lily_1984_png, block_size=123), cmap="gray")
fig7.colorbar(p7a, ax=ax7a)
p7b = ax7b.imshow(istanbul_arch_museum_gray_crop_png > threshold_local(istanbul_arch_museum_gray_crop_png, block_size=123), cmap="gray")
fig7.colorbar(p7b, ax=ax7b)
p7c = ax7c.imshow(robert_mapplethrope_calla_lily_1984_crop_png > threshold_local(robert_mapplethrope_calla_lily_1984_crop_png, block_size=123), cmap="gray")
fig7.colorbar(p7c, ax=ax7c)
fig7
return
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
## 3. Protein density
""")
return
@app.cell
def _(io, plt):
fig8, ax8 = plt.subplots()
microarray_crop_png = io.imread("microarray_crop.png", as_gray=True)
p8 = ax8.imshow(microarray_crop_png, cmap="gray")
fig8.colorbar(p8, ax=ax8)
fig8
return
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
## 4. Non-uniform background subtraction
""")
return
@app.cell
def _(io, plt):
fig9, ax9 = plt.subplots()
GUV24_bead_crop_png = io.imread("GUV24_bead_Crop.png", as_gray=True)
p9 = ax9.imshow(GUV24_bead_crop_png, cmap="gray")
fig9.colorbar(p9, ax=ax9)
fig9
return (GUV24_bead_crop_png,)
@app.cell
def _(GUV24_bead_crop_png, np):
x = np.arange(GUV24_bead_crop_png.shape[0])
y = np.arange(GUV24_bead_crop_png.shape[1])
xs, ys = np.meshgrid(x, y)
return x, xs, ys
@app.cell
def _(GUV24_bead_crop_png, plt, xs, ys):
fig10, ax10 = plt.subplots()
ax10 = plt.axes(projection ='3d')
p10 = ax10.plot_surface(xs, ys, GUV24_bead_crop_png, cmap="viridis")
fig10
return
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
### b.
""")
return
@app.cell
def _(GUV24_bead_crop_png, np, xs):
w = np.vstack([xs.ravel(), np.ones(xs.size)]).T
mx, c = np.linalg.lstsq(w, GUV24_bead_crop_png.ravel())[0] # (c-410) 3pt alternative
(mx, c)
return c, mx
@app.cell
def _(GUV24_bead_crop_png, c, mx, plt, x, xs, ys):
fig11, (ax11a, ax11b) = plt.subplots(1, 2, figsize=(8, 4))
ax11a.plot(x, mx * x + c, c='r')
ax11a.scatter(xs.ravel(), GUV24_bead_crop_png.ravel(), s=4)
ax11b.scatter(ys.ravel(), GUV24_bead_crop_png.ravel(), s=4)
fig11
return
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
### c.
#### 410:
""")
return
@app.cell
def _(GUV24_bead_crop_png, np, xs, ys):
# z = m @ w + c
w2 = np.vstack([xs.ravel(), ys.ravel(), np.ones(GUV24_bead_crop_png.size)]).T
mx2, my2, c2 = np.linalg.lstsq(w2, GUV24_bead_crop_png.ravel())[0]
(mx2, my2, c2)
return c2, mx2, my2
@app.cell
def _(GUV24_bead_crop_png, c2, mx2, my2, plt, xs, ys):
fig12, ax12 = plt.subplots()
ax12 = plt.axes(projection ='3d')
ax12.plot_surface(xs, ys, GUV24_bead_crop_png, cmap="viridis", alpha=0.3)
ax12.plot_surface(xs, ys, mx2 * xs + my2 * ys + c2, cmap="plasma")
fig12
return
@app.cell
def _(GUV24_bead_crop_png, c2, mx2, my2, plt, xs, ys):
fig13, ax13 = plt.subplots()
ax13 = plt.axes(projection ='3d')
ax13.plot_surface(xs, ys, GUV24_bead_crop_png - (mx2 * xs + my2 * ys + c2), cmap="viridis")
fig13
return
@app.cell
def _(GUV24_bead_crop_png, c2, mx2, my2, plt, xs, ys):
fig14, ax14 = plt.subplots()
p14 = ax14.imshow(GUV24_bead_crop_png - (mx2 * xs + my2 * ys + c2), cmap="gray")
fig14.colorbar(p14, ax=ax14)
fig14
return
@app.cell(hide_code=True)
def _(mo):
mo.md(r"""
#### 510:
""")
return
@app.cell
def _(GUV24_bead_crop_png, np, xs, ys):
# z = m @ w + c
w3 = np.vstack([xs.ravel(), np.square(xs.ravel()),
ys.ravel(), np.square(ys.ravel()),
np.ones(GUV24_bead_crop_png.size)]).T
mx3, mx3x, my3, my3y, c3 = np.linalg.lstsq(w3, GUV24_bead_crop_png.ravel())[0]
(mx3, mx3x, my3, my3y, c3)
return c3, mx3, mx3x, my3, my3y
@app.cell
def _(GUV24_bead_crop_png, c3, mx3, mx3x, my3, my3y, np, plt, xs, ys):
fig15, ax15 = plt.subplots()
ax15 = plt.axes(projection ='3d')
ax15.plot_surface(xs, ys, GUV24_bead_crop_png, cmap="viridis", alpha=0.3)
ax15.plot_surface(xs, ys, mx3 * xs + mx3x * np.square(xs) + my3 * ys + my3y * np.square(ys) + c3, cmap="plasma")
return
@app.cell
def _(GUV24_bead_crop_png, c3, mx3, mx3x, my3, my3y, np, plt, xs, ys):
fig16, ax16 = plt.subplots()
p16 = ax16.imshow(GUV24_bead_crop_png - (mx3 * xs + mx3x * np.square(xs) + my3 * ys + my3y * np.square(ys) + c3), cmap="gray")
fig16.colorbar(p16, ax=ax16)
fig16
return
@app.cell
def _(GUV24_bead_crop_png, c3, mx3, mx3x, my3, my3y, np, plt, xs, ys):
fig17, ax17 = plt.subplots()
ax17 = plt.axes(projection ='3d')
ax17.plot_surface(xs, ys, GUV24_bead_crop_png -
(mx3 * xs + mx3x * np.square(xs) + my3 * ys + my3y * np.square(ys) + c3), cmap="viridis")
return
@app.cell
def _():
return
if __name__ == "__main__":
app.run()