Join the Competition
SPC-Kronecker — Blind Reconstruction Challenge
What is the Blind Reconstruction Challenge?
The Blind Reconstruction Challenge tests your algorithm's ability to reconstruct signals from measurements with unknown mismatch parameters. In real-world imaging, the actual system parameters often differ from the assumed ideal model. Your task is to produce high-quality reconstructions despite this model mismatch.
How to Participate
Test on Public Dataset
FreeDownload the Public tier dataset which includes measurements, ground truth, and true spec parameters. Run your reconstruction algorithm locally and compute your PSNR / SSIM scores. Then report your score to PWM so we can track your progress.
Submit Reconstruction on Dev Dataset
Free
Download the Dev tier dataset (no ground truth provided). Run your algorithm
and submit the reconstructed result as an HDF5 file containing x_hat.
PWM will evaluate your reconstruction and return your score.
Submit Algorithm for Hidden Evaluation
10 CreditsWhen you are confident in your method, submit your algorithm (Python script or archive) to PWM. We will run it on the hidden dataset with undisclosed mismatch parameters. This is the final evaluation that determines your leaderboard ranking.
Examples & Starter Code
Download baseline algorithms and example datasets to get started quickly. These examples use small 32×32 images so you can test the full pipeline in seconds.
Baseline: Filtered Back-Projection
Show code preview
# ct_baseline_algorithm.py — key reconstruction logic
def fbp_reconstruct(sinogram, angles, img_size=None):
"""Filtered Back-Projection reconstruction."""
n_angles, n_det = sinogram.shape
# 1. Apply ramp filter in frequency domain
freqs = np.fft.fftfreq(n_det)
ramp = np.abs(freqs)
for i in range(n_angles):
proj_fft = np.fft.fft(sinogram[i])
filtered[i] = np.real(np.fft.ifft(proj_fft * ramp))
# 2. Back-project at each angle
for i, angle in enumerate(angles):
rotated = ndrotate(proj_img, angle, ...)
recon += rotated
return recon * np.pi / (2 * n_angles)
def estimate_center_offset(sinogram):
"""Compare 0° and 180° projections to find shift."""
...
numpy
h5py
scipy
Baseline: Zero-Filled IFFT + ISTA
Show code preview
# mri_baseline_algorithm.py — key reconstruction logic
def iterative_soft_threshold(y_kspace, mask, n_iter=30):
"""ISTA: iterative soft-thresholding with data consistency."""
kspace_mag = np.expm1(y_kspace) * mask
x = zero_filled_ifft(y_kspace, mask)
for _ in range(n_iter):
kx = np.fft.fftshift(np.fft.fft2(x))
# Data consistency: keep measured k-space lines
kx_dc = kx * (1 - mask) + kspace_mag * mask
x = np.abs(np.fft.ifft2(np.fft.ifftshift(kx_dc)))
x = soft_threshold(x, lam=0.005)
return x
def estimate_b0_inhomog(x_hat):
"""Estimate B0 from spatial intensity variation."""
...
numpy
h5py
scipy
Example Data Files
Small 32×32 HDF5 files demonstrating the exact challenge format. Use these to test your pipeline before downloading the full datasets.
| File | Tier | Contents | |
|---|---|---|---|
| ct_example_public.h5 | Public | y, H_ideal, x_true, spec_ranges, true_spec | Download |
| ct_example_dev.h5 | Dev | y, H_ideal, spec_ranges (no ground truth) | Download |
| ct_example_submission.h5 | Submission | x_hat, corrected_spec | Download |
| mri_example_public.h5 | Public | y, H_ideal, x_true, spec_ranges, true_spec | Download |
| mri_example_dev.h5 | Dev | y, H_ideal, spec_ranges (no ground truth) | Download |
| mri_example_submission.h5 | Submission | x_hat, corrected_spec | Download |
Quick Solver Upload
Upload your solver file directly. For detailed submission options, use the step-specific buttons above.
Sign in to upload a solver.
CLI alternative (advanced users)
# 1. Scaffold your solver
pwm scaffold solver my_solver
# 2. Implement solve() in contrib/solvers/my_solver/solver.py
# 3. Test locally
pwm evaluate --modality spc_kronecker --solver my_solver --scenes 3 --emit-certificate
# 4. View results
pwm view run_spc_kronecker_my_solver_*/
# 5. Submit for competition
pwm submit run_spc_kronecker_my_solver_*/