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%20numpy%20as%20np%0A%20%20%20%20rng%20%3D%20np.random.default_rng()%0A%20%20%20%20return%20np%2C%20rng%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20matplotlib%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20plt.ion()%3B%0A%20%20%20%20return%20(plt%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20from%20skimage%20import%20io%0A%20%20%20%20import%20scipy.ndimage%20as%20nd%0A%0A%20%20%20%20return%20(io%2C)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20scipy%20as%20si%0A%20%20%20%20import%20scipy.optimize%20as%20sio%0A%0A%20%20%20%20return%20si%2C%20sio%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20timeit%0A%0A%20%20%20%20return%20(timeit%2C)%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(%22Homework6.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%20Cilia%20and%20temporal%20filtering%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%20cilia_movie_crop%20%3D%20io.imread(%22cilia_movie_crop.tif%22%2C%20plugin%3D%22tifffile%22)%0A%20%20%20%20cilia_movie_crop_nframes%20%3D%20cilia_movie_crop.shape%5B0%5D%0A%20%20%20%20return%20cilia_movie_crop%2C%20cilia_movie_crop_nframes%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop_nframes%2C%20mo)%3A%0A%20%20%20%20i%20%3D%20mo.ui.slider(0%2C%20cilia_movie_crop_nframes%20-%201%2C%201)%0A%20%20%20%20i%0A%20%20%20%20return%20(i%2C)%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop%2C%20i%2C%20plt)%3A%0A%20%20%20%20figi%2C%20axi%20%3D%20plt.subplots()%0A%20%20%20%20axi.imshow(cilia_movie_crop%5B0%2C%3A%2C%3A%5D%2C%20cmap%3D%22gray%22)%0A%20%20%20%20axi.imshow(cilia_movie_crop%5Bi.value%2C%3A%2C%3A%5D%2C%20cmap%3D%22gray%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop%2C%20np)%3A%0A%20%20%20%20cilia_movie_crop_med%20%3D%20np.median(cilia_movie_crop%2C%20axis%3D0)%0A%20%20%20%20return%20(cilia_movie_crop_med%2C)%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop%2C%20cilia_movie_crop_med%2C%20cilia_movie_crop_nframes%2C%20np)%3A%0A%20%20%20%20cilia_movie_crop_mmed%20%3D%20cilia_movie_crop%20-%20np.tile(cilia_movie_crop_med%2C%20(cilia_movie_crop_nframes%2C%201%2C%201))%0A%20%20%20%20return%20(cilia_movie_crop_mmed%2C)%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop_nframes%2C%20mo)%3A%0A%20%20%20%20ii%20%3D%20mo.ui.slider(0%2C%20cilia_movie_crop_nframes%20-%201%2C%201)%0A%20%20%20%20ii%0A%20%20%20%20return%20(ii%2C)%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop%2C%20cilia_movie_crop_mmed%2C%20ii%2C%20plt)%3A%0A%20%20%20%20figii%2C%20axii%20%3D%20plt.subplots()%0A%20%20%20%20axii.imshow(cilia_movie_crop%5B0%2C%3A%2C%3A%5D%2C%20cmap%3D%22gray%22)%0A%20%20%20%20axii.imshow(cilia_movie_crop_mmed%5Bii.value%2C%3A%2C%3A%5D%2C%20cmap%3D%22gray%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop_mmed%2C%20plt)%3A%0A%20%20%20%20fig1%2C%20(ax1a%2C%20ax1b)%20%3D%20plt.subplots(2%2C%201)%0A%20%20%20%20ax1a.imshow(cilia_movie_crop_mmed%5B0%2C%3A%2C%3A%5D%2C%20cmap%3D%22gray%22)%0A%20%20%20%20ax1b.hist(cilia_movie_crop_mmed.flatten()%2C%20bins%3D100)%20%23%2C%20log%3DTrue)%0A%20%20%20%20fig1%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop_mmed)%3A%0A%20%20%20%20cilia_imin%20%3D%20-15%0A%20%20%20%20cilia_imax%20%3D%2015%0A%20%20%20%20cilia_movie_crop_mmed_scaled%20%3D%20255%20*%20(cilia_movie_crop_mmed%20-%20cilia_imin)%20%2F%20(cilia_imax%20-%20cilia_imin)%0A%20%20%20%20return%20(cilia_movie_crop_mmed_scaled%2C)%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop_nframes%2C%20mo)%3A%0A%20%20%20%20iii%20%3D%20mo.ui.slider(0%2C%20cilia_movie_crop_nframes%20-%201%2C%201)%0A%20%20%20%20iii%0A%20%20%20%20return%20(iii%2C)%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop_mmed_scaled%2C%20iii%2C%20plt)%3A%0A%20%20%20%20fig4%2C%20ax4%20%3D%20plt.subplots()%0A%20%20%20%20ax4.imshow(cilia_movie_crop_mmed_scaled%5B0%2C%3A%2C%3A%5D%2C%20cmap%3D%22gray%22)%0A%20%20%20%20ax4.imshow(cilia_movie_crop_mmed_scaled%5Biii.value%2C%3A%2C%3A%5D%2C%20cmap%3D%22gray%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop_mmed_scaled%2C%20np)%3A%0A%20%20%20%20cilia_movie_crop_mmed_scaled_std%20%3D%20np.std(cilia_movie_crop_mmed_scaled%2C%200)%0A%20%20%20%20return%20(cilia_movie_crop_mmed_scaled_std%2C)%0A%0A%0A%40app.cell%0Adef%20_(cilia_movie_crop_mmed_scaled_std%2C%20plt)%3A%0A%20%20%20%20fig5%2C%20ax5%20%3D%20plt.subplots()%0A%20%20%20%20ax5.imshow(cilia_movie_crop_mmed_scaled_std%2C%20cmap%3D%22gray%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%20MLE%20Practice%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20def%20A(x0%2C%20b%2C%20x%20%3D%20np.linspace(-3%2C%204%2C%20100))%3A%0A%20%20%20%20%20%20%20%20return%203%20*%20np.power(np.abs(x%20-%20x0)%2C%20b)%20%2B%204%0A%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20Images%20for%20%5C%233-%5C%234%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20si)%3A%0A%20%20%20%20def%20airypsf(xy%2C%20l%3D0.51%2C%20NA%3D0.9%2C%20side%3D0.7%2C%20N%3D210)%3A%0A%20%20%20%20%20%20%20%20center%20%3D%20xy%0A%20%20%20%20%20%20%20%20xs%2C%20ys%20%3D%20np.meshgrid(np.linspace(-%20side%20*%20(1%20-%201%2FN)%20%2F%202%2C%20side%20*%20(1%20-%201%2FN)%2F2%2C%20N)%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20np.linspace(-%20side%20*%20(1%20-%201%2FN)%20%2F%202%2C%20side%20*%20(1%20-%201%2FN)%2F2%2C%20N))%0A%20%20%20%20%20%20%20%20r2s%20%3D%20np.square(xs%20-%20center%5B0%5D)%20%2B%20np.square(ys%20-%20center%5B1%5D)%0A%20%20%20%20%20%20%20%20v%20%3D%202%20*%20np.pi%20*%20NA%20*%20np.sqrt(r2s)%20%2F%20l%0A%20%20%20%20%20%20%20%20psf%20%3D%204%20*%20np.square(si.special.j1(v)%20%2F%20v)%0A%20%20%20%20%20%20%20%20nans%20%3D%20np.isnan(psf)%0A%20%20%20%20%20%20%20%20psf%5Bnans%5D%20%3D%201%0A%20%20%20%20%20%20%20%20scale%20%3D%20side%20%2F%20N%0A%20%20%20%20%20%20%20%20return%20psf%20%2F%20np.sum(psf)%2C%20scale%0A%0A%20%20%20%20return%20(airypsf%2C)%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20def%20pixelate(image%2C%20inscale%2C%20shape%3D(7%2C%207))%3A%0A%20%20%20%20%20%20%20%20outscale%20%3D%20image.shape%5B0%5D%20*%20inscale%20%2F%20shape%5B0%5D%0A%20%20%20%20%20%20%20%20assert%20image.shape%5B0%5D%20%2F%20image.shape%5B1%5D%20%3D%3D%20shape%5B0%5D%20%2F%20shape%5B1%5D%2C%20%22Aspect%20Ratio%20must%20be%20preserved!%22%0A%0A%20%20%20%20%20%20%20%20out%20%3D%20np.sum(image.reshape(shape%5B0%5D%2C%20int(image.shape%5B0%5D%20%2F%20shape%5B0%5D)%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20shape%5B1%5D%2C%20int(image.shape%5B1%5D%20%2F%20shape%5B1%5D))%2C%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20axis%3D(1%2C%203))%0A%0A%20%20%20%20%20%20%20%20return%20out%2C%20outscale%0A%0A%20%20%20%20return%20(pixelate%2C)%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20def%20fishify(image%2C%20N%3D1%2C%20rng%3Dnp.random.default_rng())%3A%0A%20%20%20%20%20%20%20%20return%20rng.poisson(lam%3DN%20*%20(image%20%2F%20np.sum(image)))%0A%0A%20%20%20%20return%20(fishify%2C)%0A%0A%0A%40app.cell%0Adef%20_(airypsf%2C%20fishify%2C%20np%2C%20pixelate)%3A%0A%20%20%20%20def%20simage4(xc%2C%20yc%2C%20N%3D7%2C%20Np%20%3D%201000%2C%20B%3D10)%3A%0A%20%20%20%20%20%20%20%20a%2C%20iscale%20%3D%20airypsf(np.array(%5Bxc%2C%20yc%5D))%0A%20%20%20%20%20%20%20%20p%2C%20scale%20%3D%20pixelate(a%2C%20iscale%2C%20shape%3D(N%2C%20N))%0A%20%20%20%20%20%20%20%20return%20fishify(p%2C%20Np)%20%2B%20fishify(np.ones((N%2C%20N))%2CN%3D(B%20*%20(N%20**%202)))%2C%20scale%0A%0A%20%20%20%20return%20(simage4%2C)%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%20Centroid%20Localization%20Timing%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20def%20centroid(im%2C%20scale%3DNone)%3A%0A%20%20%20%20%20%20%20%20ys%2C%20xs%20%3D%20np.indices(im.shape)%0A%20%20%20%20%20%20%20%20c%20%3D%20np.hstack(%5Bnp.sum(xs%20*%20im)%2C%20np.sum(ys%20*%20im)%5D)%20%2F%20np.sum(im)%0A%20%20%20%20%20%20%20%20c%20%3D%20(im%20*%20np.mgrid%5B0%3Aim.shape%5B0%5D%2C%200%3Aim.shape%5B1%5D%5D).sum(1).sum(1)%2Fim.sum()%0A%20%20%20%20%20%20%20%20return%20c%20if%20scale%20is%20None%20else%20scale%20*%20(c%20-%20np.array(im.shape)%20%2F%2F%202)%0A%0A%20%20%20%20return%20(centroid%2C)%0A%0A%0A%40app.cell%0Adef%20_(centroid%2C%20rng%2C%20simage4%2C%20timeit)%3A%0A%20%20%20%20xys%20%3D%20list(zip(rng.uniform(-0.35%2C%200.35%2C%20100)%2C%20rng.uniform(-0.35%2C%200.35%2C%20100)))%0A%20%20%20%20ims%20%3D%20%5Bsimage4(x%2C%20y)%5B0%5D%20for%20x%2C%20y%20in%20xys%5D%0A%20%20%20%20startt%20%3D%20timeit.default_timer()%0A%20%20%20%20cs%20%3D%20%5Bcentroid(i)%20for%20i%20in%20ims%5D%0A%20%20%20%20print(timeit.default_timer()%20-%20startt%2C%20%22seconds%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%20Gaussian%20MLE%20for%20particle%20localization!%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(plt%2C%20simage4)%3A%0A%20%20%20%20fig2%2C%20ax2%20%3D%20plt.subplots()%0A%20%20%20%20im%2C%20sc%20%3D%20simage4(-0.08%2C%200.03)%0A%20%20%20%20ax2.imshow(im)%0A%20%20%20%20return%20(im%2C)%0A%0A%0A%40app.cell%0Adef%20_(airypsf%2C%20np%2C%20pixelate)%3A%0A%20%20%20%20def%20objcam(params%2C%20im%2C%20l%2C%20NA%2C%20side)%3A%0A%20%20%20%20%20%20%20%20x%2C%20y%20%3D%20params%0A%20%20%20%20%20%20%20%20p%2C%20s%20%3D%20airypsf(np.array(%5Bx%2C%20y%5D)%2C%20l%3Dl%2C%20NA%3DNA%2C%20side%3Dside)%0A%20%20%20%20%20%20%20%20A%2C%20_%20%3D%20pixelate(p%2C%20s%2C%20shape%3Dim.shape)%0A%0A%20%20%20%20%20%20%20%20mlogp%20%3D%20np.sum(A%20-%20im%20*%20np.log(A))%0A%20%20%20%20%20%20%20%20return%20mlogp%0A%0A%20%20%20%20return%20(objcam%2C)%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20objcam%2C%20sio)%3A%0A%20%20%20%20def%20MLElocalize_knowcam(im%2C%20l%3D0.51%2C%20NA%3D0.9%2C%20side%3D0.7%2C%20guess%3Dnp.array(%5B-0.05%2C%200.1%5D))%3A%0A%20%20%20%20%20%20%20%20bnd%20%3D%20((-side%20%2F%202%2C%20side%20%2F%202)%2C%20(-side%20%2F%202%2C%20side%20%2F%202))%0A%20%20%20%20%20%20%20%20res%20%3D%20sio.minimize(objcam%2C%20guess%2C%20args%3D(im%2C%20l%2C%20NA%2C%20side)%2C%20bounds%3D%20bnd)%0A%20%20%20%20%20%20%20%20return%20res%0A%0A%20%20%20%20return%20(MLElocalize_knowcam%2C)%0A%0A%0A%40app.cell%0Adef%20_(MLElocalize_knowcam%2C%20im)%3A%0A%20%20%20%20MLElocalize_knowcam(im)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np)%3A%0A%20%20%20%20def%20gausspsf(xc%2C%20yc%2C%20A0%2C%20s%2C%20B%2C%20N%3D210%2C%20side%3D0.7)%3A%0A%20%20%20%20%20%20%20%20xs%20%3D%20np.linspace(-%20side%20*%20(1%20-%201%2FN)%20%2F%202%2C%20side%20*%20(1%20-%201%2FN)%20%2F%202%2C%20N)%0A%20%20%20%20%20%20%20%20ys%20%3D%20np.linspace(-%20side%20*%20(1%20-%201%2FN)%20%2F%202%2C%20side%20*%20(1%20-%201%2FN)%20%2F%202%2C%20N)%0A%20%20%20%20%20%20%20%20xx%2C%20yy%20%3D%20np.meshgrid(xs%2C%20ys)%0A%20%20%20%20%20%20%20%20g%20%3D%20%20A0%20*%20np.exp(-(np.square(xx%20-%20xc)%20%2B%20np.square(yy%20-%20yc))%20%2F%20(2.0%20*%20np.square(s)))%20%2B%20B%0A%20%20%20%20%20%20%20%20return%20g%2C%20(side%20%2F%20N)%0A%0A%20%20%20%20return%20(gausspsf%2C)%0A%0A%0A%40app.cell%0Adef%20_(gausspsf%2C%20pixelate%2C%20plt)%3A%0A%20%20%20%20fig3%2C%20ax3%20%3D%20plt.subplots()%0A%20%20%20%20im3%2C%20sc3%20%3D%20gausspsf(0%2C%200%2C%200.02%2C%200.1%2C%201)%20%23%20initial%20guess%0A%20%20%20%20im3p%2C%20_%20%3D%20pixelate(im3%2C%20sc3%2C%20shape%3D(7%2C%207))%0A%20%20%20%20ax3.imshow(im3p)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(gausspsf%2C%20np)%3A%0A%20%20%20%20def%20objgauss(params%2C%20im%2C%20side)%3A%0A%20%20%20%20%20%20%20%20xc%2C%20yc%2C%20A0%2C%20s%2C%20B%20%3D%20params%0A%20%20%20%20%20%20%20%20p%2C%20sc%20%3D%20gausspsf(xc%2C%20yc%2C%20A0%2C%20s%2C%20B%2C%20side%3Dside%2C%20N%3Dim.shape%5B0%5D)%0A%20%20%20%20%20%20%20%20%23A%2C%20_%20%3D%20pixelate(p%2C%20sc%2C%20shape%3Dim.shape)%0A%0A%20%20%20%20%20%20%20%20mlogp%20%3D%20np.sum(p%20-%20im%20*%20np.log(p))%0A%20%20%20%20%20%20%20%20%23mlogp%20%3D%20np.sum(A%20-%20im%20*%20np.log(A))%0A%20%20%20%20%20%20%20%20return%20mlogp%0A%0A%20%20%20%20return%20(objgauss%2C)%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20objgauss%2C%20sio)%3A%0A%20%20%20%20def%20MLElocalize_gauss(im%2C%20side%3D0.7%2C%20guess%3DNone)%3A%0A%20%20%20%20%20%20%20%20if%20guess%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20guess%20%3D%20np.array(%5B0%2C%200%2C%20np.max(im)%2C%200.1%2C%20np.min(im)%5D)%0A%20%20%20%20%20%20%20%20bnd%20%3D%20((-side%20%2F%202%2C%20side%20%2F%202)%2C%20(-side%20%2F%202%2C%20side%20%2F%202)%2C%20(0%2C%20np.max(im))%2C%20(1e-2%2C%20None)%2C%20(0%2C%20None))%0A%20%20%20%20%20%20%20%20res%20%3D%20sio.minimize(objgauss%2C%20guess%2C%20args%20%3D%20(im%2C%20side)%2C%20bounds%3D%20bnd)%0A%20%20%20%20%20%20%20%20return%20res%0A%0A%20%20%20%20return%20(MLElocalize_gauss%2C)%0A%0A%0A%40app.cell%0Adef%20_(MLElocalize_gauss%2C%20im)%3A%0A%20%20%20%20res%20%3D%20MLElocalize_gauss(im)%0A%20%20%20%20res%0A%20%20%20%20return%20(res%2C)%0A%0A%0A%40app.cell%0Adef%20_(gausspsf%2C%20plt%2C%20res)%3A%0A%20%20%20%20fig8%2C%20ax8%20%3D%20plt.subplots()%0A%20%20%20%20im8%2C%20_%20%3D%20gausspsf(*res.x%2C%20side%3D0.7%2C%20N%3D7)%0A%20%20%20%20ax8.imshow(im8)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(MLElocalize_gauss%2C%20simage4)%3A%0A%20%20%20%20resx%20%3D%20%5B%5D%0A%20%20%20%20for%20_%20in%20range(100)%3A%0A%20%20%20%20%20%20%20%20im9%2C%20sc9%20%3D%20simage4(0.03%2C%200.03)%0A%20%20%20%20%20%20%20%20res9%20%3D%20MLElocalize_gauss(im9)%0A%20%20%20%20%20%20%20%20resx.append(res9.x%5B0%5D%20-%200.03)%0A%20%20%20%20return%20(resx%2C)%0A%0A%0A%40app.cell%0Adef%20_(plt%2C%20resx)%3A%0A%20%20%20%20figh%2C%20axh%20%3D%20plt.subplots()%0A%20%20%20%20axh.hist(resx%2C%20bins%3D%22auto%22)%0A%20%20%20%20figh%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(MLElocalize_gauss%2C%20np%2C%20plt%2C%20simage4)%3A%0A%20%20%20%20figs%2C%20axs%20%3D%20plt.subplots()%0A%20%20%20%20xs%20%3D%20np.linspace(-0.05%2C%200.05%2C%2010)%0A%20%20%20%20ys%20%3D%20np.zeros(10)%0A%20%20%20%20imss%20%3D%20%5Bsimage4(xs%5Bi%5D%2C%20ys%5Bi%5D)%5B0%5D%20for%20i%20in%20range(10)%5D%0A%20%20%20%20es%20%3D%20%5BMLElocalize_gauss(image).x%5B0%5D%20for%20image%20in%20imss%5D%0A%20%20%20%20axs.scatter(xs%2C%20es%20-%20xs)%0A%20%20%20%20%23axs.set_ylim(%5B-0.5%2C%200.5%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(MLElocalize_gauss%2C%20np%2C%20plt%2C%20rng%2C%20simage4)%3A%0A%20%20%20%20figr%2C%20axr%20%3D%20plt.subplots()%0A%20%20%20%20xss%20%3D%20rng.uniform(-0.5%20*%200.1%2C%200.5%20*%200.1%2C%20100)%0A%20%20%20%20yss%20%3D%20rng.uniform(-0.5%20*%200.1%2C%200.5%20*%200.1%2C%20100)%0A%20%20%20%20imsss%20%3D%20%5Bsimage4(xss%5Bi%5D%2C%20yss%5Bi%5D)%5B0%5D%20for%20i%20in%20range(100)%5D%0A%20%20%20%20ess%20%3D%20np.array(%5BMLElocalize_gauss(image).x%5B0%5D%20for%20image%20in%20imsss%5D)%0A%20%20%20%20axr.scatter(xss%2C%20ess%20-%20xss)%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
1e6e59f00d66f3573c2d719500032a6b