{"id":29023505,"url":"https://github.com/daniilsjb/suspectral","last_synced_at":"2026-04-29T06:38:52.468Z","repository":{"id":299649169,"uuid":"962835675","full_name":"daniilsjb/suspectral","owner":"daniilsjb","description":"Source code for a bachelor's thesis in Computer Science (Double Degree) at Transport and Telecommunication Institute (TSI), Riga, Latvia, 2025.","archived":false,"fork":false,"pushed_at":"2025-06-17T16:57:17.000Z","size":36875,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-29T06:38:29.865Z","etag":null,"topics":["hyperspectral","machine-learning","multispectral","python","spectral-reconstruction"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/daniilsjb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-08T18:41:01.000Z","updated_at":"2025-06-17T16:57:21.000Z","dependencies_parsed_at":"2025-06-17T16:32:32.822Z","dependency_job_id":null,"html_url":"https://github.com/daniilsjb/suspectral","commit_stats":null,"previous_names":["daniilsjb/suspectral"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/daniilsjb/suspectral","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniilsjb%2Fsuspectral","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniilsjb%2Fsuspectral/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniilsjb%2Fsuspectral/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniilsjb%2Fsuspectral/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daniilsjb","download_url":"https://codeload.github.com/daniilsjb/suspectral/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniilsjb%2Fsuspectral/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32414422,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-29T06:29:02.080Z","status":"ssl_error","status_checked_at":"2026-04-29T06:29:00.631Z","response_time":110,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hyperspectral","machine-learning","multispectral","python","spectral-reconstruction"],"created_at":"2025-06-26T03:30:40.250Z","updated_at":"2026-04-29T06:38:52.452Z","avatar_url":"https://github.com/daniilsjb.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/user-attachments/assets/4847f508-03ac-42e1-ad1b-d2eef5533373\" width=\"100\" alt=\"Suspectral\"\u003e\n  \u003ch1\u003eSuspectral\u003c/h1\u003e\n  \u003cdiv\u003eVisualization and reconstruction of hyperspectral imaging data\u003c/div\u003e\n  \u003cdiv\u003efrom RGB images based on spectral response functions.\u003c/div\u003e\n\u003c/div\u003e\n\n## Features\n\n- Support for hyperspectral images in the ENVI format. 📂\n- Sensor-based synthesis of RGB images from hypercubes. 🖼️\n- Preview of sRGB images based on the CIE XYZ 1931 CMFs. 👁️\n- Options for performing color correction on synthetic images. 🎨\n- Ability to display pixel spectra either individually or in groups. 📈\n- Export of spectral data into CSV, MATLAB, and NumPy tabular files. 📝\n- Saving image previews and spectral plots into PNG, JPG, TIFF, and BMP. 📷\n- Transformations for image preview: zooming, panning, rotations, flips. 🔄️\n- Automatic detection of the operating system's light and dark themes. 🔥\n\n## Running / Building\n\nThis repository contains two subprojects: [suspectral-app](./suspectral-app) and [suspectral-notebook](./suspectral-notebook).\nBoth projects are intended to be run separately, each in its own [virtual environment](https://docs.python.org/3/library/venv.html), if needed.\n\n### suspectral-app\n\nThis subproject contains the software application developed using [PySide6](https://doc.qt.io/qtforpython-6/gettingstarted.html#getting-started) bindings for the [Qt](https://www.qt.io/) framework.\nTo run the software, simply follow these steps from the [suspectral-app](./suspectral-app) directory, assuming you have already activated its virtual environment:\n\n1. `pip install -r requirements.txt`\n2. `pyside6-rcc resources/resources.qrc -o resources.py`\n3. `py app.py`\n\nTo run automated tests using [pytest](https://docs.pytest.org/en/stable/), simply execute one of the following commands:\n\n- `pytest tests` (without coverage)\n- `pytest tests --cov=suspectral` (with coverage)\n\nThe software can be packaged into a Windows executable using [PyInstaller](https://github.com/pyinstaller/pyinstaller):\n\n1. `pyinstaller app.spec`\n\nTo create an installation wizard via [Inno Setup](https://jrsoftware.org/isinfo.php), use the provided [compilation script](./suspectral-app/app.iss).\n\n### suspectral-notebook\n\nThis subproject contains the [Jupyter](https://jupyter.org/) notebooks contain various experiments and demonstrations revolving around image synthesis and spectral reconstruction.\nTo run the notebooks, simply follow these steps from the [suspectral-notebook](./suspectral-notebook) directory, assuming you have already activated its virtual environment:\n\n1. `pip install -r requirements.txt`\n2. `jupyter notebook`\n\nYou must download datasets from their respective authors and extract them in corresponding [datasets](./suspectral-notebook/datasets) directories:\n\n- [ICVL](https://icvl.cs.bgu.ac.il/pages/researches/hyperspectral-imaging.html). Arad, B. and Ben-Shahar, O., 2016. Sparse recovery of hyperspectral signal from natural RGB images. In Computer Vision–ECCV 2016: 14th European Conference, Amsterdam, The Netherlands, October 11–14, 2016, Proceedings, Part VII 14 (pp. 19-34). Springer International Publishing.\n- [CAVE](https://cave.cs.columbia.edu/repository/Multispectral). Yasuma, F., Mitsunaga, T., Iso, D. and Nayar, S.K., 2010. Generalized assorted pixel camera: postcapture control of resolution, dynamic range, and spectrum. IEEE transactions on image processing, 19(9), pp.2241-2253.\n- [KAUST](https://hdl.handle.net/10754/670368). Li, Y., Fu, Q. and Heidrich, W., 2021. Multispectral illumination estimation using deep unrolling network. In Proceedings of the IEEE/CVF international conference on computer vision (pp. 2672-2681).\n- [Harvard](https://vision.seas.harvard.edu/hyperspec/). Chakrabarti, A. and Zickler, T., 2011, June. Statistics of real-world hyperspectral images. In CVPR 2011 (pp. 193-200). IEEE.\n\nTo convert the hyperspectral images into a format that is compatible with the software, use the [hsi2envi.py](./suspectral-notebook/scripts/hsi2envi.py) script.\n\n\u003e [!NOTE]\n\u003e The [ICVL-MATLAB](./suspectral-notebook/datasets/ICVL-MATLAB) directory is intended for the downsampled images with `.mat` extension, whereas the [ICVL-ENVI-RAW](./suspectral-notebook/datasets/ICVL-ENVI-RAW)\n\u003e is intended for the original output of the hyperspectral camera with paired `.hdr`/`.raw` files. The directory [ICVL-ENVI](./suspectral-notebook/datasets/ICVL-ENVI) should be populated by manually downsampled\n\u003e images using the [resample_icvl.py](./suspectral-notebook/scripts/resample_icvl.py) script.\n\nTo prepare the datasets for training of spectral reconstruction models, use the [synthesize_cave.py](./suspectral-notebook/scripts/synthesize_cave.py),\n[synthesize_icvl_envi.py](./suspectral-notebook/scripts/synthesize_icvl_envi.py), and [synthesize_icvl_matlab.py](./suspectral-notebook/scripts/synthesize_icvl_matlab.py)\nscripts (other datasets were only used for software testing).\n\n## License\n\nMIT, Copyright © 2025, Daniils Buts\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniilsjb%2Fsuspectral","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaniilsjb%2Fsuspectral","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniilsjb%2Fsuspectral/lists"}