import%20marimo%0A%0A__generated_with%20%3D%20%220.19.11%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20matplotlib%2C%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20plt.ion()%0A%20%20%20%20return%20(plt%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20numpy%20as%20np%0A%0A%20%20%20%20return%20(np%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20skimage%20import%20io%0A%20%20%20%20from%20skimage.filters%20import%20threshold_otsu%2C%20threshold_local%0A%0A%20%20%20%20return%20io%2C%20threshold_local%2C%20threshold_otsu%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20from%20pathlib%20import%20Path%0A%20%20%20%20mo.pdf(src%3DPath(%22Homework2.pdf%22)%2C%20width%3D%22100%25%22%2C%20height%3D%2250vh%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%201.%20Thresholding%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(io)%3A%0A%20%20%20%20robert_mapplethrope_calla_lily_1984_png%20%3D%20io.imread(%22robert-mapplethrope-calla-lily-1984.png%22%2C%20as_gray%3DTrue)%0A%20%20%20%20return%20(robert_mapplethrope_calla_lily_1984_png%2C)%0A%0A%0A%40app.cell%0Adef%20_(plt%2C%20robert_mapplethrope_calla_lily_1984_png)%3A%0A%20%20%20%20fig1%2C%20ax1%20%3D%20plt.subplots()%0A%20%20%20%20p1%20%3D%20ax1.imshow(robert_mapplethrope_calla_lily_1984_png%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig1.colorbar(p1%2C%20ax%3Dax1)%0A%20%20%20%20fig1%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(robert_mapplethrope_calla_lily_1984_png%2C%20threshold_otsu)%3A%0A%20%20%20%20robert_mapplethrope_calla_lily_global_threshold%20%3D%20threshold_otsu(robert_mapplethrope_calla_lily_1984_png)%0A%20%20%20%20robert_mapplethrope_calla_lily_global_threshold%20%23%20print%0A%20%20%20%20return%20(robert_mapplethrope_calla_lily_global_threshold%2C)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20plt%2C%0A%20%20%20%20robert_mapplethrope_calla_lily_1984_png%2C%0A%20%20%20%20robert_mapplethrope_calla_lily_global_threshold%2C%0A)%3A%0A%20%20%20%20fig2%2C%20(ax2a%2C%20ax2b)%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(8%2C%204))%0A%20%20%20%20ax2a.hist(robert_mapplethrope_calla_lily_1984_png.flatten()%2C%20log%3DTrue%2C%20bins%3D%22auto%22)%0A%20%20%20%20ax2a.vlines(robert_mapplethrope_calla_lily_global_threshold%2C%200%2C%2080_000%2C%20color%3D%22r%22)%0A%20%20%20%20p2b%20%3D%20ax2b.imshow(robert_mapplethrope_calla_lily_1984_png%20%3E%20robert_mapplethrope_calla_lily_global_threshold%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig2.colorbar(p2b%2C%20ax%3Dax2b)%0A%20%20%20%20fig2%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(io%2C%20plt)%3A%0A%20%20%20%20fig3%2C%20ax3%20%3D%20plt.subplots()%0A%20%20%20%20istanbul_arch_museum_gray_crop_png%20%3D%20io.imread(%22istanbul_arch_museum_gray_crop.png%22%2C%20as_gray%3DTrue)%0A%20%20%20%20p3%20%3D%20ax3.imshow(istanbul_arch_museum_gray_crop_png%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig3.colorbar(p3%2C%20ax%3Dax3)%0A%20%20%20%20fig3%0A%20%20%20%20return%20(istanbul_arch_museum_gray_crop_png%2C)%0A%0A%0A%40app.cell%0Adef%20_(istanbul_arch_museum_gray_crop_png%2C%20threshold_otsu)%3A%0A%20%20%20%20istanbul_global_threshold%20%3D%20threshold_otsu(istanbul_arch_museum_gray_crop_png)%0A%20%20%20%20istanbul_global_threshold%20%23%20print%0A%20%20%20%20return%20(istanbul_global_threshold%2C)%0A%0A%0A%40app.cell%0Adef%20_(istanbul_arch_museum_gray_crop_png%2C%20istanbul_global_threshold%2C%20plt)%3A%0A%20%20%20%20fig4%2C%20(ax4a%2C%20ax4b)%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(8%2C%204))%0A%20%20%20%20ax4a.hist(istanbul_arch_museum_gray_crop_png.flatten()%2C%20log%3DTrue%2C%20bins%3D%22auto%22)%0A%20%20%20%20ax4a.vlines(istanbul_global_threshold%2C%200%2C%20300_000%2C%20color%3D'r')%0A%20%20%20%20p4b%20%3D%20ax4b.imshow(istanbul_arch_museum_gray_crop_png%20%3E%20istanbul_global_threshold%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig4.colorbar(p4b%2C%20ax%3Dax4b)%0A%20%20%20%20fig4%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(io)%3A%0A%20%20%20%20robert_mapplethrope_calla_lily_1984_crop_png%20%3D%20io.imread(%22robert-mapplethrope-calla-lily-1984_CROP.png%22%2C%20as_gray%3DTrue)%0A%20%20%20%20return%20(robert_mapplethrope_calla_lily_1984_crop_png%2C)%0A%0A%0A%40app.cell%0Adef%20_(plt%2C%20robert_mapplethrope_calla_lily_1984_crop_png)%3A%0A%20%20%20%20fig5%2C%20ax5%20%3D%20plt.subplots()%0A%20%20%20%20p5%20%3D%20ax5.imshow(robert_mapplethrope_calla_lily_1984_crop_png%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig5.colorbar(p5%2C%20ax%3Dax5)%0A%20%20%20%20fig5%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(robert_mapplethrope_calla_lily_1984_crop_png%2C%20threshold_otsu)%3A%0A%20%20%20%20robert_mapplethrope_calla_lily_crop_global_threshold%20%3D%20threshold_otsu(robert_mapplethrope_calla_lily_1984_crop_png)%0A%20%20%20%20robert_mapplethrope_calla_lily_crop_global_threshold%20%23%20print%0A%20%20%20%20return%20(robert_mapplethrope_calla_lily_crop_global_threshold%2C)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20plt%2C%0A%20%20%20%20robert_mapplethrope_calla_lily_1984_crop_png%2C%0A%20%20%20%20robert_mapplethrope_calla_lily_crop_global_threshold%2C%0A)%3A%0A%20%20%20%20fig6%2C%20(ax6a%2C%20ax6b)%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(8%2C%204))%0A%20%20%20%20ax6a.hist(robert_mapplethrope_calla_lily_1984_crop_png.flatten()%2C%20log%3DTrue%2C%20bins%3D%22auto%22)%0A%20%20%20%20ax6a.vlines(robert_mapplethrope_calla_lily_crop_global_threshold%2C%200%2C%2080_000%2C%20color%3D%22r%22)%0A%20%20%20%20p6b%20%3D%20ax6b.imshow(robert_mapplethrope_calla_lily_1984_crop_png%20%3E%20robert_mapplethrope_calla_lily_crop_global_threshold%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig6.colorbar(p6b%2C%20ax%3Dax6b)%0A%20%20%20%20fig6%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%202.%20Thresholding%2C%20again%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20istanbul_arch_museum_gray_crop_png%2C%0A%20%20%20%20plt%2C%0A%20%20%20%20robert_mapplethrope_calla_lily_1984_crop_png%2C%0A%20%20%20%20robert_mapplethrope_calla_lily_1984_png%2C%0A%20%20%20%20threshold_local%2C%0A)%3A%0A%20%20%20%20fig7%2C%20(ax7a%2C%20ax7b%2C%20ax7c)%20%3D%20plt.subplots(1%2C%203%2C%20figsize%3D(12%2C%204))%0A%20%20%20%20p7a%20%3D%20ax7a.imshow(robert_mapplethrope_calla_lily_1984_png%20%3E%20threshold_local(robert_mapplethrope_calla_lily_1984_png%2C%20block_size%3D123)%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig7.colorbar(p7a%2C%20ax%3Dax7a)%0A%20%20%20%20p7b%20%3D%20ax7b.imshow(istanbul_arch_museum_gray_crop_png%20%3E%20threshold_local(istanbul_arch_museum_gray_crop_png%2C%20block_size%3D123)%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig7.colorbar(p7b%2C%20ax%3Dax7b)%0A%20%20%20%20p7c%20%3D%20ax7c.imshow(robert_mapplethrope_calla_lily_1984_crop_png%20%3E%20threshold_local(robert_mapplethrope_calla_lily_1984_crop_png%2C%20block_size%3D123)%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig7.colorbar(p7c%2C%20ax%3Dax7c)%0A%20%20%20%20fig7%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%203.%20Protein%20density%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(io%2C%20plt)%3A%0A%20%20%20%20fig8%2C%20ax8%20%3D%20plt.subplots()%0A%20%20%20%20microarray_crop_png%20%3D%20io.imread(%22microarray_crop.png%22%2C%20as_gray%3DTrue)%0A%20%20%20%20p8%20%3D%20ax8.imshow(microarray_crop_png%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig8.colorbar(p8%2C%20ax%3Dax8)%0A%20%20%20%20fig8%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%204.%20Non-uniform%20background%20subtraction%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(io%2C%20plt)%3A%0A%20%20%20%20fig9%2C%20ax9%20%3D%20plt.subplots()%0A%20%20%20%20GUV24_bead_crop_png%20%3D%20io.imread(%22GUV24_bead_Crop.png%22%2C%20as_gray%3DTrue)%0A%20%20%20%20p9%20%3D%20ax9.imshow(GUV24_bead_crop_png%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig9.colorbar(p9%2C%20ax%3Dax9)%0A%20%20%20%20fig9%0A%20%20%20%20return%20(GUV24_bead_crop_png%2C)%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20np)%3A%0A%20%20%20%20x%20%3D%20np.arange(GUV24_bead_crop_png.shape%5B0%5D)%0A%20%20%20%20y%20%3D%20np.arange(GUV24_bead_crop_png.shape%5B1%5D)%0A%20%20%20%20xs%2C%20ys%20%3D%20np.meshgrid(x%2C%20y)%0A%20%20%20%20return%20x%2C%20xs%2C%20ys%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20plt%2C%20xs%2C%20ys)%3A%0A%20%20%20%20fig10%2C%20ax10%20%3D%20plt.subplots()%0A%20%20%20%20ax10%20%3D%20plt.axes(projection%20%3D'3d')%0A%20%20%20%20p10%20%3D%20ax10.plot_surface(xs%2C%20ys%2C%20GUV24_bead_crop_png%2C%20cmap%3D%22viridis%22)%0A%20%20%20%20fig10%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20b.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20np%2C%20xs)%3A%0A%20%20%20%20w%20%3D%20np.vstack(%5Bxs.ravel()%2C%20np.ones(xs.size)%5D).T%0A%20%20%20%20mx%2C%20c%20%3D%20np.linalg.lstsq(w%2C%20GUV24_bead_crop_png.ravel())%5B0%5D%20%23%20(c-410)%203pt%20alternative%0A%20%20%20%20(mx%2C%20c)%0A%20%20%20%20return%20c%2C%20mx%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20c%2C%20mx%2C%20plt%2C%20x%2C%20xs%2C%20ys)%3A%0A%20%20%20%20fig11%2C%20(ax11a%2C%20ax11b)%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(8%2C%204))%0A%20%20%20%20ax11a.plot(x%2C%20mx%20*%20x%20%2B%20c%2C%20c%3D'r')%0A%20%20%20%20ax11a.scatter(xs.ravel()%2C%20GUV24_bead_crop_png.ravel()%2C%20s%3D4)%0A%20%20%20%20ax11b.scatter(ys.ravel()%2C%20GUV24_bead_crop_png.ravel()%2C%20s%3D4)%0A%20%20%20%20fig11%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20c.%0A%20%20%20%20%23%23%23%23%20410%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20np%2C%20xs%2C%20ys)%3A%0A%20%20%20%20%23%20z%20%3D%20m%20%40%20w%20%2B%20c%0A%20%20%20%20w2%20%3D%20np.vstack(%5Bxs.ravel()%2C%20ys.ravel()%2C%20np.ones(GUV24_bead_crop_png.size)%5D).T%0A%20%20%20%20mx2%2C%20my2%2C%20c2%20%3D%20np.linalg.lstsq(w2%2C%20GUV24_bead_crop_png.ravel())%5B0%5D%0A%20%20%20%20(mx2%2C%20my2%2C%20c2)%0A%20%20%20%20return%20c2%2C%20mx2%2C%20my2%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20c2%2C%20mx2%2C%20my2%2C%20plt%2C%20xs%2C%20ys)%3A%0A%20%20%20%20fig12%2C%20ax12%20%3D%20plt.subplots()%0A%20%20%20%20ax12%20%3D%20plt.axes(projection%20%3D'3d')%0A%20%20%20%20ax12.plot_surface(xs%2C%20ys%2C%20GUV24_bead_crop_png%2C%20cmap%3D%22viridis%22%2C%20alpha%3D0.3)%0A%20%20%20%20ax12.plot_surface(xs%2C%20ys%2C%20mx2%20*%20xs%20%2B%20my2%20*%20ys%20%2B%20c2%2C%20cmap%3D%22plasma%22)%0A%20%20%20%20fig12%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20c2%2C%20mx2%2C%20my2%2C%20plt%2C%20xs%2C%20ys)%3A%0A%20%20%20%20fig13%2C%20ax13%20%3D%20plt.subplots()%0A%20%20%20%20ax13%20%3D%20plt.axes(projection%20%3D'3d')%0A%20%20%20%20ax13.plot_surface(xs%2C%20ys%2C%20GUV24_bead_crop_png%20-%20(mx2%20*%20xs%20%2B%20my2%20*%20ys%20%2B%20c2)%2C%20cmap%3D%22viridis%22)%0A%20%20%20%20fig13%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20c2%2C%20mx2%2C%20my2%2C%20plt%2C%20xs%2C%20ys)%3A%0A%20%20%20%20fig14%2C%20ax14%20%3D%20plt.subplots()%0A%20%20%20%20p14%20%3D%20ax14.imshow(GUV24_bead_crop_png%20-%20(mx2%20*%20xs%20%2B%20my2%20*%20ys%20%2B%20c2)%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig14.colorbar(p14%2C%20ax%3Dax14)%0A%20%20%20%20fig14%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%23%20510%3A%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20np%2C%20xs%2C%20ys)%3A%0A%20%20%20%20%23%20z%20%3D%20m%20%40%20w%20%2B%20c%0A%20%20%20%20w3%20%3D%20np.vstack(%5Bxs.ravel()%2C%20np.square(xs.ravel())%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ys.ravel()%2C%20np.square(ys.ravel())%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20np.ones(GUV24_bead_crop_png.size)%5D).T%0A%20%20%20%20mx3%2C%20mx3x%2C%20my3%2C%20my3y%2C%20c3%20%3D%20np.linalg.lstsq(w3%2C%20GUV24_bead_crop_png.ravel())%5B0%5D%0A%20%20%20%20(mx3%2C%20mx3x%2C%20my3%2C%20my3y%2C%20c3)%0A%20%20%20%20return%20c3%2C%20mx3%2C%20mx3x%2C%20my3%2C%20my3y%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20c3%2C%20mx3%2C%20mx3x%2C%20my3%2C%20my3y%2C%20np%2C%20plt%2C%20xs%2C%20ys)%3A%0A%20%20%20%20fig15%2C%20ax15%20%3D%20plt.subplots()%0A%20%20%20%20ax15%20%3D%20plt.axes(projection%20%3D'3d')%0A%20%20%20%20ax15.plot_surface(xs%2C%20ys%2C%20GUV24_bead_crop_png%2C%20cmap%3D%22viridis%22%2C%20alpha%3D0.3)%0A%20%20%20%20ax15.plot_surface(xs%2C%20ys%2C%20mx3%20*%20xs%20%2B%20mx3x%20*%20np.square(xs)%20%2B%20my3%20*%20ys%20%2B%20my3y%20*%20np.square(ys)%20%2B%20c3%2C%20cmap%3D%22plasma%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20c3%2C%20mx3%2C%20mx3x%2C%20my3%2C%20my3y%2C%20np%2C%20plt%2C%20xs%2C%20ys)%3A%0A%20%20%20%20fig16%2C%20ax16%20%3D%20plt.subplots()%0A%20%20%20%20p16%20%3D%20ax16.imshow(GUV24_bead_crop_png%20-%20(mx3%20*%20xs%20%2B%20mx3x%20*%20np.square(xs)%20%2B%20my3%20*%20ys%20%2B%20my3y%20*%20np.square(ys)%20%2B%20c3)%2C%20cmap%3D%22gray%22)%0A%20%20%20%20fig16.colorbar(p16%2C%20ax%3Dax16)%0A%20%20%20%20fig16%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GUV24_bead_crop_png%2C%20c3%2C%20mx3%2C%20mx3x%2C%20my3%2C%20my3y%2C%20np%2C%20plt%2C%20xs%2C%20ys)%3A%0A%20%20%20%20fig17%2C%20ax17%20%3D%20plt.subplots()%0A%20%20%20%20ax17%20%3D%20plt.axes(projection%20%3D'3d')%0A%20%20%20%20ax17.plot_surface(xs%2C%20ys%2C%20GUV24_bead_crop_png%20-%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(mx3%20*%20xs%20%2B%20mx3x%20*%20np.square(xs)%20%2B%20my3%20*%20ys%20%2B%20my3y%20*%20np.square(ys)%20%2B%20c3)%2C%20cmap%3D%22viridis%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
13e3c1490cbaffa16bad36d8d18bd2c6