PyCoupole
GPU-accelerated Monte Carlo uncertainty quantification for SVBRDF measurements on the La Coupole setup. Companion code to the associated Optics Express paper and measured dataset.
Installation
Simply install it from PyPI:
pip install pycoupole
Interpreting the output
computeBRDFDistribution returns a probability density, not a histogram of
counts. The density carries the inverse unit of the BRDF (sr), and integrates
to 1 over its support — so its values are not bounded by 1 and will be large
for a sharply peaked distribution. Recover the per-bin probability mass, then
the moments and credible intervals, as:
binWidth = brdfValues[1] - brdfValues[0]
mass = pdf * binWidth # sums to 1
mean = float(np.sum(mass * brdfValues))
std = float(np.sqrt(np.sum(mass * (brdfValues - mean) ** 2)))
cdf = np.cumsum(mass)
median = float(np.interp(0.50, cdf, brdfValues))
ci95_low = float(np.interp(0.025, cdf, brdfValues))
ci95_up = float(np.interp(0.975, cdf, brdfValues))
For a well-conditioned acquisition the deterministic value sits near the centre
of the distribution and the out-of-range fraction (1 - nbAccepted / nbTotal)
is negligible.
Citation
If you use this software, please cite the associated paper as below (see also CITATION.cff).
La Coupole: an SVBRDF measurement device for large and non-planar objects. Antoine Lucat, Pierre Mézières, François Margall, Louis De Oliveira, Marjorie Paillet, Arnaud Tizon, Pierre Bénard, Romain Pacanowski. Optics Express, Vol. 34, Issue 7, pp. 11695-11709 (March 2026). DOI: 10.1364/OE.587877.
Associated BibTeX entry
@article{Lucat:26,
author = {Antoine Lucat and Pierre M\'{e}zi\`{e}res and Fran\c{c}ois Margall and Louis De Oliveira and Marjorie Paillet and Arnaud Tizon and Pierre B\'{e}nard and Romain Pacanowski},
journal = {Optics Express},
keywords = {Camera calibration; Imaging systems; Light sources; Physiology; Printed circuit boards; Spatial resolution},
number = {7},
pages = {11695--11709},
publisher = {Optica Publishing Group},
title = {La Coupole: an SVBRDF measurement device for large and non-planar objects},
volume = {34},
month = {Apr},
year = {2026},
url = {https://opg.optica.org/oe/abstract.cfm?URI=oe-34-7-11695},
doi = {10.1364/OE.587877},
}
License
PyCoupole is distributed under the MIT License. See LICENSE.txt for more information.
Metadata
Release files for pycoupole 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pycoupole-0.1.1.tar.gz | 14.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pycoupole-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.9 kB
Release files / pycoupole-0.1.1.tar.gz
| Download URL | pycoupole-0.1.1.tar.gz |
|---|---|
| Size | 14.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e0f3e5506b51b39df313d1593b9f2c69a99bfb24bbb424a03742aa1d226351cf
|
|
BLAKE2b-256 checksum How to use checksums |
8ee3bf4023cf4943f552636ba27634ed4c006ae19829141c3a009da5deecfde6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.1
|
Release files / pycoupole-0.1.1-py3-none-any.whl
| Download URL | pycoupole-0.1.1-py3-none-any.whl |
|---|---|
| Size | 13.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1c352eff196d081e7eee3d218c826d3bea6cc090bdff452ec73ab44e50f03d4b
|
|
BLAKE2b-256 checksum How to use checksums |
d1cc31f73434c50d2a90293d49e090346badd03ea8021fd6c67ed603dcd5a530
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.1
|