{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/spatially-variant-cnn-based-point-spread","title":"Spatially-Variant CNN-based Point Spread Function Estimation for Blind Deconvolution and Depth Estimation in Optical Microscopy","arxiv_id":"2010.04011","date":"2020-10-08","proceeding":null,"authors":["Adrian Shajkofci","Michael Liebling"],"abstract":"Optical microscopy is an essential tool in biology and medicine. Imaging thin, yet non-flat objects in a single shot (without relying on more sophisticated sectioning setups) remains challenging as the shallow depth of field that comes with high-resolution microscopes leads to unsharp image regions and makes depth localization and quantitative image interpretation difficult. Here, we present a method that improves the resolution of light microscopy images of such objects by locally estimating image distortion while jointly estimating object distance to the focal plane. Specifically, we estimate the parameters of a spatially-variant Point-Spread function (PSF) model using a Convolutional Neural Network (CNN), which does not require instrument- or object-specific calibration. Our method recovers PSF parameters from the image itself with up to a squared Pearson correlation coefficient of 0.99 in ideal conditions, while remaining robust to object rotation, illumination variations, or photon noise. When the recovered PSFs are used with a spatially-variant and regularized Richardson-Lucy deconvolution algorithm, we observed up to 2.1 dB better signal-to-noise ratio compared to other blind deconvolution techniques. Following microscope-specific calibration, we further demonstrate that the recovered PSF model parameters permit estimating surface depth with a precision of 2 micrometers and over an extended range when using engineered PSFs. Our method opens up multiple possibilities for enhancing images of non-flat objects with minimal need for a priori knowledge about the optical setup.","url_abs":"https://arxiv.org/abs/2010.04011v2","url_pdf":"https://arxiv.org/pdf/2010.04011v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"spatially-variant-cnn-based-point-spread","repo_url":"https://github.com/idiap/psfestimation","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"tasks":[{"task_slug":"depth-estimation","task_name":"Depth Estimation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2010.04011","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2010.04011"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/idiap/psfestimation","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"summary":{"unverified":10},"by_repo_kind":{"official":{"samples":10,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"935ee704e27bbb73","entry":"do_convolution_gaussian","repo":"idiap/psfestimation","repo_kind":"official","path":"generate_training_set.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/generate_training_set.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"935ee704e27bbb73"}},{"code_sha256_prefix":"4a2b92b4fb952806","entry":"do_convolution_zernike","repo":"idiap/psfestimation","repo_kind":"official","path":"generate_training_set.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/generate_training_set.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"4a2b92b4fb952806"}},{"code_sha256_prefix":"7eaa65d842a34fd0","entry":"eval_regression_accuracy","repo":"idiap/psfestimation","repo_kind":"official","path":"evaluation_accuracy.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/evaluation_accuracy.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"7eaa65d842a34fd0"}},{"code_sha256_prefix":"c3b88725475c1434","entry":"handle_list","repo":"idiap/psfestimation","repo_kind":"official","path":"generate_training_set.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/generate_training_set.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"c3b88725475c1434"}},{"code_sha256_prefix":"e0deb79d2d4510b5","entry":"scale3d","repo":"idiap/psfestimation","repo_kind":"official","path":"toolbox.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/toolbox.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"e0deb79d2d4510b5"}},{"code_sha256_prefix":"aa8de9c6cf28c31f","entry":"stretch_contrast","repo":"idiap/psfestimation","repo_kind":"official","path":"toolbox.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/toolbox.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"aa8de9c6cf28c31f"}},{"code_sha256_prefix":"6eab011470cb6598","entry":"test","repo":"idiap/psfestimation","repo_kind":"official","path":"benchmark_models.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/benchmark_models.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"6eab011470cb6598"}},{"code_sha256_prefix":"385967e9ab451789","entry":"test_moving_window","repo":"idiap/psfestimation","repo_kind":"official","path":"evaluation_accuracy.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/evaluation_accuracy.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"385967e9ab451789"}},{"code_sha256_prefix":"62b25d2b648c6584","entry":"test_plane_graph","repo":"idiap/psfestimation","repo_kind":"official","path":"benchmark_models.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/benchmark_models.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"62b25d2b648c6584"}},{"code_sha256_prefix":"79b6b194c90d9c4f","entry":"write_tiff_stack","repo":"idiap/psfestimation","repo_kind":"official","path":"toolbox.py","file_url":"https://github.com/idiap/psfestimation/blob/HEAD/toolbox.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"79b6b194c90d9c4f"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}