{"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/shadow-removal-via-shadow-image-decomposition","title":"Shadow Removal via Shadow Image Decomposition","arxiv_id":"1908.08628","date":"2019-08-23","proceeding":"ICCV 2019 10","authors":["Hieu Le","Dimitris Samaras"],"abstract":"We propose a novel deep learning method for shadow removal. Inspired by physical models of shadow formation, we use a linear illumination transformation to model the shadow effects in the image that allows the shadow image to be expressed as a combination of the shadow-free image, the shadow parameters, and a matte layer. We use two deep networks, namely SP-Net and M-Net, to predict the shadow parameters and the shadow matte respectively. This system allows us to remove the shadow effects on the images. We train and test our framework on the most challenging shadow removal dataset (ISTD). Compared to the state-of-the-art method, our model achieves a 40% error reduction in terms of root mean square error (RMSE) for the shadow area, reducing RMSE from 13.3 to 7.9. Moreover, we create an augmented ISTD dataset based on an image decomposition system by modifying the shadow parameters to generate new synthetic shadow images. Training our model on this new augmented ISTD dataset further lowers the RMSE on the shadow area to 7.4.","url_abs":"https://arxiv.org/abs/1908.08628v1","url_pdf":"https://arxiv.org/pdf/1908.08628v1.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":"shadow-removal-via-shadow-image-decomposition","repo_url":"https://github.com/lmhieu612/SID","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"shadow-removal-via-shadow-image-decomposition","repo_url":"https://github.com/cvlab-stonybrook/SID","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"shadow-removal-via-shadow-image-decomposition","repo_url":"https://github.com/naoto0804/SynShadow","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"shadow-removal","task_name":"Shadow Removal"}],"methods":[{"method_slug":"1x1-convolution","method_name":"1x1 Convolution"},{"method_slug":"average-pooling","method_name":"Average Pooling"},{"method_slug":"batch-normalization","method_name":"Batch Normalization"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"global-average-pooling","method_name":"Global Average Pooling"},{"method_slug":"grouped-convolution","method_name":"Grouped Convolution"},{"method_slug":"kaiming-initialization","method_name":"Kaiming Initialization"},{"method_slug":"relu","method_name":"ReLU"},{"method_slug":"resnext","method_name":"ResNeXt"},{"method_slug":"resnext-block","method_name":"ResNeXt Block"},{"method_slug":"residual-connection","method_name":"Residual Connection"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/shadow-removal-on-istd-1","task":"Shadow Removal","dataset":"ISTD+","model":"SP+M-Net (ICCV 2019) (512x512)","rank_in_archive_order":4,"of":26,"metrics":{"LPIPS":"0.183","PSNR":"28.31","RMSE":"2.96","SSIM":"0.866"},"uses_additional_data":false},{"leaderboard":"/sota/shadow-removal-on-istd-1","task":"Shadow Removal","dataset":"ISTD+","model":"SP+M-Net (ICCV 2019) (256x256)","rank_in_archive_order":15,"of":26,"metrics":{"LPIPS":"0.373","PSNR":"26.58","RMSE":"3.37","SSIM":"0.717"},"uses_additional_data":false},{"leaderboard":"/sota/shadow-removal-on-srd","task":"Shadow Removal","dataset":"SRD","model":"SP+M-Net (ICCV 2019) (512x512)","rank_in_archive_order":14,"of":25,"metrics":{"LPIPS":"0.269","PSNR":"24.89","RMSE":"4.35","SSIM":"0.792"},"uses_additional_data":false},{"leaderboard":"/sota/shadow-removal-on-srd","task":"Shadow Removal","dataset":"SRD","model":"SP+M-Net (ICCV 2019) (256x256)","rank_in_archive_order":23,"of":25,"metrics":{"LPIPS":"0.444","PSNR":"22.25","RMSE":"5.68","SSIM":"0.636"},"uses_additional_data":false}],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=1908.08628","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1908.08628"}},"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/naoto0804/SynShadow","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/cvlab-stonybrook/SID","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/lmhieu612/SID","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":11},"by_repo_kind":{"official":{"samples":3,"ran":0,"repositories":1},"listed":{"samples":8,"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":"7b6ac2089343d3c3","entry":"apply_tone_curve","repo":"naoto0804/SynShadow","repo_kind":"listed","path":"src/util/illum_affine_model.py","file_url":"https://github.com/naoto0804/SynShadow/blob/HEAD/src/util/illum_affine_model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7b6ac2089343d3c3"}},{"code_sha256_prefix":"700b6c26b9f820a8","entry":"copyconf","repo":"naoto0804/SynShadow","repo_kind":"listed","path":"src/util/util.py","file_url":"https://github.com/naoto0804/SynShadow/blob/HEAD/src/util/util.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"700b6c26b9f820a8"}},{"code_sha256_prefix":"063e4397662f061e","entry":"find_image","repo":"naoto0804/SynShadow","repo_kind":"listed","path":"src/util/image.py","file_url":"https://github.com/naoto0804/SynShadow/blob/HEAD/src/util/image.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"063e4397662f061e"}},{"code_sha256_prefix":"16bd26484cba3e49","entry":"im_darken","repo":"lmhieu612/SID","repo_kind":"official","path":"data_processing/dataset_augmentation.py","file_url":"https://github.com/lmhieu612/SID/blob/HEAD/data_processing/dataset_augmentation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"16bd26484cba3e49"}},{"code_sha256_prefix":"c0d7139178892d99","entry":"im_relit","repo":"lmhieu612/SID","repo_kind":"official","path":"data_processing/compute_params.py","file_url":"https://github.com/lmhieu612/SID/blob/HEAD/data_processing/compute_params.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c0d7139178892d99"}},{"code_sha256_prefix":"5a112feba8f53b0c","entry":"load","repo":"naoto0804/SynShadow","repo_kind":"listed","path":"src/util/image.py","file_url":"https://github.com/naoto0804/SynShadow/blob/HEAD/src/util/image.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5a112feba8f53b0c"}},{"code_sha256_prefix":"30d56fdfbf93d0d3","entry":"load_obj","repo":"naoto0804/SynShadow","repo_kind":"listed","path":"src/util/util.py","file_url":"https://github.com/naoto0804/SynShadow/blob/HEAD/src/util/util.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"30d56fdfbf93d0d3"}},{"code_sha256_prefix":"d61e18f527623b40","entry":"relit","repo":"lmhieu612/SID","repo_kind":"official","path":"data_processing/compute_params.py","file_url":"https://github.com/lmhieu612/SID/blob/HEAD/data_processing/compute_params.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d61e18f527623b40"}},{"code_sha256_prefix":"c1ebd10caa104c75","entry":"rgb_to_srgb","repo":"naoto0804/SynShadow","repo_kind":"listed","path":"src/util/illum_affine_model.py","file_url":"https://github.com/naoto0804/SynShadow/blob/HEAD/src/util/illum_affine_model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c1ebd10caa104c75"}},{"code_sha256_prefix":"ea2359b6d27138f3","entry":"srgb_to_rgb","repo":"naoto0804/SynShadow","repo_kind":"listed","path":"src/util/illum_affine_model.py","file_url":"https://github.com/naoto0804/SynShadow/blob/HEAD/src/util/illum_affine_model.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ea2359b6d27138f3"}},{"code_sha256_prefix":"3e5e64c86e05a9f1","entry":"tile_images","repo":"naoto0804/SynShadow","repo_kind":"listed","path":"src/util/util.py","file_url":"https://github.com/naoto0804/SynShadow/blob/HEAD/src/util/util.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3e5e64c86e05a9f1"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}