Papers › SCARLET: Source separation in multi-band images by Constrained Matrix Factorization

SCARLET: Source separation in multi-band images by Constrained Matrix Factorization

27 Feb 2018arXiv:1802.10157links table onlyarchive 2025-07-28

Peter Melchior, Fred Moolekamp, Maximilian Jerdee, Robert Armstrong, Ai-Lei Sun, James Bosch, Robert Lupton

The archive published only this paper's code-link row. Authors, date and abstract are from arXiv's metadata (CC0), read from the Kaggle arXiv metadata snapshot of 2026-09-12 where its title matched the archive's; the title is the archive's.

We present the source separation framework SCARLET for multi-band images, which is based on a generalization of the Non-negative Matrix Factorization to alternative and several simultaneous constraints. Our approach describes the observed scene as a mixture of components with compact spatial support and uniform spectra over their support. We present the algorithm to perform the matrix factorization and introduce constraints that are useful for optical images of stars and distinct stellar populations in galaxies, in particular symmetry and monotonicity with respect to the source peak position. We also derive the treatment of correlated noise and convolutions with band-dependent point spread functions, rendering our approach applicable to coadded images observed under variable seeing conditions. SCARLET thus yields a PSF-matched photometry measurement with an optimally chosen weight function given by the mean morphology in all available bands. We demonstrate the performance of SCARLET for deblending crowded extragalactic scenes and on an AGN jet -- host galaxy separation problem in deep 5-band imaging from the Hyper Suprime-Cam Stategic Survey Program. Using simulations with prominent crowding we show that SCARLET yields superior results to the HSC-SDSS deblender for the recovery of total fluxes, colors, and morphologies. Due to its non-parametric nature, a conceptual limitation of SCARLET is its sensitivity to undetected sources or multiple stellar population within detected sources, but an iterative strategy that adds components at the location of significant residuals appears promising. The code is implemented in Python with C++ extensions and is available at https://github.com/fred3m/scarlet

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="1802.10157")

Code

Syntology Ran 2 of 37 code samples harvested from 4 repositories linked to this paper; 35 have no recorded run. Of those that ran: 2 ran · our draft was wrong.

By repository: official repository: 18 samples from 2 repositories, 2 ran; community (archive-listed): 19 samples from 2 repositories, 0 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

fred3m/scarlet officialmentioned in papermentioned on GitHubMIT report
pmelchior/scarlet officialmentioned on GitHub report
gcmshadow/scarlet mentioned on GitHubMIT report
herjy/scarlet mentioned on GitHubMIT report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

37 samples harvested; 2 ran; 0 honoured the contract we drafted; 35 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

2ran · our draft was wrong
35unverified

Licence: 0 of the 37 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 4 repositories linked to this paper, official or community; each sample names its own and says which. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: 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. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

get_blend pmelchior/scarlet/scarlet/testing/api.py official repository ran · our draft was wrong MIT (permissive) · 5b1edbc5178af928 · report
get_local_blend_ids pmelchior/scarlet/scarlet/testing/api.py official repository ran · our draft was wrong MIT (permissive) · c9ae8bfcd6a8134f · report
bounds_to_bbox fred3m/scarlet/scarlet/detect.py official repository unverified MIT (permissive) · 7685bd9e0b61668e · report
box_intersect fred3m/scarlet/scarlet/detect.py official repository unverified MIT (permissive) · fa5a71fd35d529a5 · report
channels_to_rgb fred3m/scarlet/scarlet/display.py official repository unverified MIT (permissive) · 609f46126e6fdd0c · report
convolve fred3m/scarlet/scarlet/fft.py official repository unverified MIT (permissive) · f64f9f315400a3ed · report
fast_zero_pad fred3m/scarlet/scarlet/fft.py official repository unverified MIT (permissive) · c762972251944add · report
footprint_intersect fred3m/scarlet/scarlet/detect.py official repository unverified MIT (permissive) · e19d6606be65dbfc · report
get_blend_ids pmelchior/scarlet/scarlet/testing/api.py official repository unverified MIT (permissive) · e6dcb05d3d66201a · report
get_filter_bounds fred3m/scarlet/scarlet/interpolation.py official repository unverified MIT (permissive) · 5129633075a467cf · report
get_filter_coords fred3m/scarlet/scarlet/interpolation.py official repository unverified MIT (permissive) · ae372a6b1295d160 · report
get_minimal_boxsize fred3m/scarlet/scarlet/initialization.py official repository unverified MIT (permissive) · 0fc8fb03cebac2b4 · report
get_pixel_spectrum fred3m/scarlet/scarlet/initialization.py official repository unverified MIT (permissive) · 380a95e22f8af0a6 · report
get_projection_slices fred3m/scarlet/scarlet/interpolation.py official repository unverified MIT (permissive) · 5673a4ea33b2749f · report
get_psf_spectrum fred3m/scarlet/scarlet/initialization.py official repository unverified MIT (permissive) · 0a1925f2ef97f7b1 · report
img_to_3channel fred3m/scarlet/scarlet/display.py official repository unverified MIT (permissive) · 8c1f007c5ddb44ae · report
match_psf fred3m/scarlet/scarlet/fft.py official repository unverified MIT (permissive) · 47543c70ea3e72ce · report
overlapped_slices fred3m/scarlet/scarlet/bbox.py official repository unverified MIT (permissive) · cb492b5b0a9c4153 · report
channels_to_rgb gcmshadow/scarlet/scarlet/display.py community (archive-listed) unverified MIT (permissive) · 4a469f49e50f19d7 · report
common_projections gcmshadow/scarlet/scarlet/interpolation.py community (archive-listed) unverified MIT (permissive) · c7b3bea951cfab74 · report
convolve gcmshadow/scarlet/scarlet/fft.py community (archive-listed) unverified MIT (permissive) · e6458fe124e7e5ee · report
double_gaussian herjy/scarlet/scarlet/psf_match.py community (archive-listed) unverified MIT (permissive) · 01028fe9d12d2260 · report
flux gcmshadow/scarlet/scarlet/measure.py community (archive-listed) unverified MIT (permissive) · 5dfc438d66678b96 · report
gaussian herjy/scarlet/scarlet/psf_match.py community (archive-listed) unverified MIT (permissive) · 03d84bdc8fd219c3 · report
get_best_fit_sed herjy/scarlet/scarlet/source.py community (archive-listed) unverified MIT (permissive) · 7838796abb4c9a6a · report
get_filter_slices herjy/scarlet/scarlet/transformation.py community (archive-listed) unverified MIT (permissive) · 0797f19575911143 · report
get_model gcmshadow/scarlet/scarlet/measure.py community (archive-listed) unverified MIT (permissive) · 8f54c0b99cc9d4b9 · report
img_to_3channel gcmshadow/scarlet/scarlet/display.py community (archive-listed) unverified MIT (permissive) · def0a10810077962 · report
match_psfs gcmshadow/scarlet/scarlet/fft.py community (archive-listed) unverified MIT (permissive) · b78c5b0837a51743 · report
max_pixel gcmshadow/scarlet/scarlet/measure.py community (archive-listed) unverified MIT (permissive) · 03c08ce8d98ca390 · report
moffat herjy/scarlet/scarlet/psf_match.py community (archive-listed) unverified MIT (permissive) · 025cdf3ba20ed087 · report
project_image gcmshadow/scarlet/scarlet/interpolation.py community (archive-listed) unverified MIT (permissive) · 399194c75ab1ab15 · report
prox_cone gcmshadow/scarlet/scarlet/operator.py community (archive-listed) unverified MIT (permissive) · e3f100ed55e5130f · report
prox_strict_monotonic herjy/scarlet/scarlet/operator.py community (archive-listed) unverified MIT (permissive) · af8381e2c1ce599f · report
sort_by_radius gcmshadow/scarlet/scarlet/operator.py community (archive-listed) unverified MIT (permissive) · 22f8a375d9af043a · report
sort_by_radius herjy/scarlet/scarlet/operator.py community (archive-listed) unverified MIT (permissive) · 73eab8ee673489ad · report
zscale herjy/scarlet/scarlet/display.py community (archive-listed) unverified MIT (permissive) · c18eceb1e0fae726 · report

Results from the paper archive 2025-07-28

No leaderboard rows for this paper in the archive.

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections