PartSeg 0.16.4
PartSeg is python GUI and set of napari plugins for bio imaging analysis especially nucleus analysis,
Requires Python: >=3.9
Keywords: bioimaging, GUI

# PartSeg

![Contributions](https://img.shields.io/badge/Contributions-Welcome-brightgreen.svg)
![Tests](https://github.com/4DNucleome/PartSeg/workflows/Tests/badge.svg?branch=develop)
[![PyPI version](https://badge.fury.io/py/PartSeg.svg)](https://badge.fury.io/py/PartSeg)
[![Anaconda version](https://anaconda.org/conda-forge/partseg/badges/version.svg)](https://anaconda.org/conda-forge/partseg)
[![Python Version](https://img.shields.io/pypi/pyversions/partseg.svg)](https://pypi.org/project/partseg)
[![Documentation Status](https://readthedocs.org/projects/partseg/badge/?version=latest)](https://partseg.readthedocs.io/en/latest/?badge=latest)
[![Azure Pipelines Build Status](https://dev.azure.com/PartSeg/PartSeg/_apis/build/status/4DNucleome.PartSeg?branchName=develop)](https://dev.azure.com/PartSeg/PartSeg/_build/latest?definitionId=1&branchName=develop)
[![DOI](https://zenodo.org/badge/166421141.svg)](https://zenodo.org/badge/latestdoi/166421141)
[![Publication DOI](https://img.shields.io/badge/Publication%20DOI-10.1186%2Fs12859--021--03984--1-blue)](https://doi.org/10.1186/s12859-021-03984-1)
[![Licence: BSD3](https://img.shields.io/github/license/4DNucleome/PartSeg)](https://github.com/4DNucleome/PartSeg/blob/master/License.txt)
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
[![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v1.json)](https://github.com/charliermarsh/ruff)
[![CodeQL](https://github.com/4DNucleome/PartSeg/actions/workflows/codeql-analysis.yml/badge.svg?branch=develop)](https://github.com/4DNucleome/PartSeg/actions/workflows/codeql-analysis.yml)
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/f9b0f1eb2c92486d9efd99ed5b2ef326)](https://www.codacy.com/gh/4DNucleome/PartSeg/dashboard?utm_source=github.com&utm_medium=referral&utm_content=4DNucleome/PartSeg&utm_campaign=Badge_Grade)
[![codecov](https://codecov.io/gh/4DNucleome/PartSeg/branch/develop/graph/badge.svg?token=nbAbkOAe1C)](https://codecov.io/gh/4DNucleome/PartSeg)
[![DeepSource](https://deepsource.io/gh/4DNucleome/PartSeg.svg/?label=active+issues&show_trend=true&token=RuuHPIzqyqGaU-bKtOKPFWTg)](https://deepsource.io/gh/4DNucleome/PartSeg/?ref=repository-badge)

PartSeg is a GUI and a library for segmentation algorithms. PartSeg also provide napari plugins for IO and labels measurement.

This application is designed to help biologist with segmentation based on threshold and connected components.

![interface](https://raw.githubusercontent.com/4DNucleome/PartSeg/master/images/roi_analysis.png)

## Tutorials

- Tutorial: **Chromosome 1 (as gui)** [link](https://github.com/4DNucleome/PartSeg/blob/master/tutorials/tutorial-chromosome-1/tutorial-chromosome1_16.md)
- Data for chromosome 1 tutorial [link](https://4dnucleome.cent.uw.edu.pl/PartSeg/Downloads/PartSeg_samples.zip)
- Tutorial: **Different neuron types (as library)** [link](https://github.com/4DNucleome/PartSeg/blob/master/tutorials/tutorial_neuron_types/Neuron_types_example.ipynb)

## Installation

- From binaries:

  - [Windows](https://github.com/4DNucleome/PartSeg/releases/download/v0.16.4/PartSeg-0.16.4-windows.zip) (build on Windows 10)
  - [Linux](https://github.com/4DNucleome/PartSeg/releases/download/v0.16.4/PartSeg-0.16.4-linux.zip) (build on Ubuntu 20.04)
  - [macOS](https://github.com/4DNucleome/PartSeg/releases/download/v0.16.4/PartSeg-0.16.4-macos.zip) (build on macOS 13)
  - [macOS arm](https://github.com/4DNucleome/PartSeg/releases/download/v0.16.4/PartSeg-0.16.4-macos-arm64.zip) (build on macOS 14)
    There are reported problems with permissions systems on macOS. If you have a problem with starting the application, please try to run it from the terminal.

- With pip:

  - From pypi: `pip install PartSeg[all]`
  - From repository: `pip install git+https://github.com/4DNucleome/PartSeg.git`

- With conda:

  - `conda install -c conda-forge partseg`
  - `mamba install -c conda-forge partseg` - As mamba is faster than conda

- With napari:

  If you do not know how to setup python environment on your system you may use [napari](https://napari.org/) to run PartSeg.
  It is a GUI for scientific image analysis. PartSeg is also a plugin for napari so could be installed from plugin dialog.
  To install napari bundle please download it [napari bundle](https://github.com/napari/napari/releases/latest)
  and follow [installation instructions](https://napari.org/stable/tutorials/fundamentals/installation.html#install-as-a-bundled-app).

Installation troubleshooting information could be found in wiki: [wiki](https://github.com/4DNucleome/PartSeg/wiki/Instalation-troubleshoot).
If this information does not solve problem you can open [issue](https://github.com/4DNucleome/PartSeg/issues).

### Qt 6 support

PartSeg development branch support (and stable since 0.15.0) has experimental Qt6 support. Test are passing but not whole GUI code is covered by tests. Inf you Find any problem please report it.

## Running

If you downloaded binaries, run the `PartSeg` (or `PartSeg.exe` for Windows) file inside the `PartSeg` folder

If you installed from repository or from pip, you can run it with `PartSeg` command or `python -m PartSeg`.
First option does not work on Windows.

PartSeg export few commandline options:

- `--no_report` - disable error reporting
- `--no_dialog` - disable error reporting and error dialog. Use only when running from terminal.
- `roi` - skip launcher and start *ROI analysis* gui
- `mask`- skip launcher and start *ROI mask* gui

## napari plugin

PartSeg provides napari plugins for io to allow reading projects format in napari viewer.

## Save Format

Saved projects are tar files compressed with gzip or bz2.

Metadata is saved in data.json file (in json format).
Images/masks are saved as \*.npy (numpy array format).

## Interface

Launcher. Choose the program that you will launch:

![launcher](https://raw.githubusercontent.com/4DNucleome/PartSeg/master/images/launcher.png)

Main window of Segmentation Analysis:

![interface](https://raw.githubusercontent.com/4DNucleome/PartSeg/master/images/roi_analysis.png)

Main window of Segmentation Analysis with view on measurement result:

![interface](https://raw.githubusercontent.com/4DNucleome/PartSeg/master/images/roi_analysis2.png)

Window for creating a set of measurements:

![statistics](https://raw.githubusercontent.com/4DNucleome/PartSeg/master/images/measurement.png)

Main window of Mask Segmentation:

![mask interface](https://raw.githubusercontent.com/4DNucleome/PartSeg/master/images/roi_mask.png)

## Laboratory

Laboratory of Functional and Structural Genomics
[http://4dnucleome.cent.uw.edu.pl/](http://4dnucleome.cent.uw.edu.pl/)

## Cite as

Bokota, G., Sroka, J., Basu, S. et al. PartSeg: a tool for quantitative feature extraction
from 3D microscopy images for dummies. BMC Bioinformatics 22, 72 (2021).
[https://doi.org/10.1186/s12859-021-03984-1](https://doi.org/10.1186/s12859-021-03984-1)


## Changelog

All notable changes to this project will be documented in this file.

### 0.16.4 - 2025-10-21

#### 🚀 Features

- Set units for viewer spawned from the view menu ([#1308](https://github.com/4DNucleome/PartSeg/pull/1308))
- Add saving color maps in OME tiffs ([#1312](https://github.com/4DNucleome/PartSeg/pull/1312))
- Add saving and reading of time scale in ImageJ and OME TIFF files ([#1323](https://github.com/4DNucleome/PartSeg/pull/1323))

#### 🐛 Bug Fixes

- Fit ROI shape to image to solve problem of saving data in batch process ([#1288](https://github.com/4DNucleome/PartSeg/pull/1288))
- If save dialog is used to select directory save it in history not parent ([#1289](https://github.com/4DNucleome/PartSeg/pull/1289))
- Fix `--pre` test by stopping using the deprecated `sentry_sdk` method ([#1304](https://github.com/4DNucleome/PartSeg/pull/1304))
- Fix saving in batch if the data is mask segmentation project ([#1309](https://github.com/4DNucleome/PartSeg/pull/1309))
- Clean elements outside mask for multiple otsu method ([#1319](https://github.com/4DNucleome/PartSeg/pull/1319))

#### 📚 Documentation

- Update changelog for 0.16.4

#### 🧪 Testing

- [Automatic] Constraints upgrades: `pandas` ([#1285](https://github.com/4DNucleome/PartSeg/pull/1285))
- [Automatic] Constraints upgrades: `ipykernel`, `numpy`, `scipy`, `sentry-sdk` ([#1287](https://github.com/4DNucleome/PartSeg/pull/1287))
- [Automatic] Constraints upgrades: `imagecodecs`, `ipykernel`, `napari`, `sentry-sdk` ([#1290](https://github.com/4DNucleome/PartSeg/pull/1290))
- [Automatic] Constraints upgrades: `napari`, `psygnal`, `sentry-sdk`, `superqt` ([#1295](https://github.com/4DNucleome/PartSeg/pull/1295))
- [Automatic] Constraints upgrades: `pandas`, `requests` ([#1297](https://github.com/4DNucleome/PartSeg/pull/1297))
- [Automatic] Constraints upgrades: `ipython`, `numpy`, `pydantic`, `qtconsole`, `scipy`, `sentry-sdk`, `tifffile`, `xlsxwriter` ([#1301](https://github.com/4DNucleome/PartSeg/pull/1301))
- [Automatic] Constraints upgrades: `partsegcore-compiled-backend`, `psygnal`, `sentry-sdk` ([#1305](https://github.com/4DNucleome/PartSeg/pull/1305))
- [Automatic] Constraints upgrades: `ipython`, `napari`, `pandas`, `pydantic`, `tifffile` ([#1311](https://github.com/4DNucleome/PartSeg/pull/1311))
- [Automatic] Constraints upgrades: `pydantic`, `sentry-sdk` ([#1316](https://github.com/4DNucleome/PartSeg/pull/1316))
- [Automatic] Constraints upgrades: `h5py`, `ipykernel`, `numpy`, `psygnal`, `pydantic`, `sentry-sdk`, `tifffile` ([#1322](https://github.com/4DNucleome/PartSeg/pull/1322))

#### ⚙️ Miscellaneous Tasks

- [pre-commit.ci] pre-commit autoupdate ([#1286](https://github.com/4DNucleome/PartSeg/pull/1286))
- [pre-commit.ci] pre-commit autoupdate ([#1291](https://github.com/4DNucleome/PartSeg/pull/1291))
- [pre-commit.ci] pre-commit autoupdate ([#1296](https://github.com/4DNucleome/PartSeg/pull/1296))
- [pre-commit.ci] pre-commit autoupdate ([#1298](https://github.com/4DNucleome/PartSeg/pull/1298))
- Add more wait on coderabbit review ([#1300](https://github.com/4DNucleome/PartSeg/pull/1300))
- Use prek for initial check of code format ([#1299](https://github.com/4DNucleome/PartSeg/pull/1299))
- [pre-commit.ci] pre-commit autoupdate ([#1302](https://github.com/4DNucleome/PartSeg/pull/1302))
- Use most recent macOS images on GitHub Actions ([#1310](https://github.com/4DNucleome/PartSeg/pull/1310))
- [pre-commit.ci] pre-commit autoupdate ([#1306](https://github.com/4DNucleome/PartSeg/pull/1306))
- [pre-commit.ci] pre-commit autoupdate ([#1313](https://github.com/4DNucleome/PartSeg/pull/1313))
- Add cooldown of dependabot PR ([#1317](https://github.com/4DNucleome/PartSeg/pull/1317))
- Update licensing metadata to follow modern standards ([#1314](https://github.com/4DNucleome/PartSeg/pull/1314))
- Make test log more readable by using 120 columns and colors ([#1320](https://github.com/4DNucleome/PartSeg/pull/1320))
- [pre-commit.ci] pre-commit autoupdate ([#1318](https://github.com/4DNucleome/PartSeg/pull/1318))
- Add changelog for 0.16.4 ([#1321](https://github.com/4DNucleome/PartSeg/pull/1321))
- Use ruff formatter in place of black ([#1324](https://github.com/4DNucleome/PartSeg/pull/1324))

#### 🛡️ Security

- *(deps)* Bump actions/download-artifact from 4 to 5 in the github-actions group ([#1292](https://github.com/4DNucleome/PartSeg/pull/1292))
- *(deps)* Bump pyvista/setup-headless-display-action from 3 to 4 ([#1294](https://github.com/4DNucleome/PartSeg/pull/1294))
- *(deps)* Bump actions/checkout from 4 to 5 in the github-actions group ([#1293](https://github.com/4DNucleome/PartSeg/pull/1293))
- *(deps)* Bump actions/setup-python from 5 to 6 in the github-actions group ([#1303](https://github.com/4DNucleome/PartSeg/pull/1303))
- *(deps)* Bump github/codeql-action from 3 to 4 ([#1315](https://github.com/4DNucleome/PartSeg/pull/1315))

### 0.16.3 - 2025-07-10

#### 🐛 Bug Fixes

- Do not use default parameters in default leaf ([#1283](https://github.com/4DNucleome/PartSeg/pull/1283))

#### 🧪 Testing

- [Automatic] Constraints upgrades: `napari`, `numpy`, `pydantic`, `sentry-sdk`, `tifffile`, `vispy` ([#1273](https://github.com/4DNucleome/PartSeg/pull/1273))
- [Automatic] Constraints upgrades: `h5py`, `ipython`, `magicgui`, `numpy`, `pandas`, `pydantic`, `requests`, `sentry-sdk`, `superqt`, `tifffile`, `xlrd` ([#1276](https://github.com/4DNucleome/PartSeg/pull/1276))
- [Automatic] Constraints upgrades: `numpy`, `pygments`, `scipy`, `simpleitk`, `superqt`, `xlsxwriter` ([#1278](https://github.com/4DNucleome/PartSeg/pull/1278))
- [Automatic] Constraints upgrades: `ipython`, `napari`, `partsegcore-compiled-backend`, `psygnal`, `sentry-sdk` ([#1281](https://github.com/4DNucleome/PartSeg/pull/1281))

#### ⚙️ Miscellaneous Tasks

- Block `sentry==3.0.0a1` for pre-tests ([#1272](https://github.com/4DNucleome/PartSeg/pull/1272))
- Add fallback version for `setuptools_scm` ([#1271](https://github.com/4DNucleome/PartSeg/pull/1271))
- [pre-commit.ci] pre-commit autoupdate ([#1270](https://github.com/4DNucleome/PartSeg/pull/1270))
- Use ubuntu 22.04 when building pyinstaller bundle ([#1275](https://github.com/4DNucleome/PartSeg/pull/1275))
- [pre-commit.ci] pre-commit autoupdate ([#1274](https://github.com/4DNucleome/PartSeg/pull/1274))
- [pre-commit.ci] pre-commit autoupdate ([#1277](https://github.com/4DNucleome/PartSeg/pull/1277))
- Block sentry alpha 3.0.0a1 and 3.0.0a2 ([#1279](https://github.com/4DNucleome/PartSeg/pull/1279))
- Block `pytest-qt==4.5.0` (for `pyside2` compatibility) ([#1282](https://github.com/4DNucleome/PartSeg/pull/1282))
- [pre-commit.ci] pre-commit autoupdate ([#1280](https://github.com/4DNucleome/PartSeg/pull/1280))
- Migrate Windows images from 2019 to 2022 in Azure Pipelines and GitHub Actions ([#1284](https://github.com/4DNucleome/PartSeg/pull/1284))

### 0.16.2 - 2025-05-12

#### 🧪 Testing

- [Automatic] Constraints upgrades: `numpy`, `partsegcore-compiled-backend`, `tifffile` ([#1253](https://github.com/4DNucleome/PartSeg/pull/1253))
- [Automatic] Constraints upgrades: `imagecodecs`, `ipython`, `pydantic`, `sentry-sdk`, `superqt`, `tifffile` ([#1255](https://github.com/4DNucleome/PartSeg/pull/1255))
- [Automatic] Constraints upgrades: `ipython`, `napari`, `numpy`, `packaging`, `pydantic`, `sentry-sdk`, `simpleitk`, `sympy`, `xlsxwriter` ([#1266](https://github.com/4DNucleome/PartSeg/pull/1266))
- [Automatic] Constraints upgrades: `oiffile`, `psygnal`, `scipy`, `sentry-sdk`, `tifffile` ([#1267](https://github.com/4DNucleome/PartSeg/pull/1267))

#### ⚙️ Miscellaneous Tasks

- [pre-commit.ci] pre-commit autoupdate ([#1251](https://github.com/4DNucleome/PartSeg/pull/1251))
- Prepare for napari 0.6.0 deprecations ([#1256](https://github.com/4DNucleome/PartSeg/pull/1256))
- [pre-commit.ci] pre-commit autoupdate ([#1254](https://github.com/4DNucleome/PartSeg/pull/1254))
- [pre-commit.ci] pre-commit autoupdate ([#1259](https://github.com/4DNucleome/PartSeg/pull/1259))
- Update workflow to use Ubuntu 22.04 instead of 20.04 ([#1261](https://github.com/4DNucleome/PartSeg/pull/1261))
- [pre-commit.ci] pre-commit autoupdate ([#1260](https://github.com/4DNucleome/PartSeg/pull/1260))
- Try to fix Upgrade dependencies workflow part 2 ([#1265](https://github.com/4DNucleome/PartSeg/pull/1265))
- [pre-commit.ci] pre-commit autoupdate ([#1268](https://github.com/4DNucleome/PartSeg/pull/1268))

#### 🛡️ Security

- *(deps)* Bump peter-evans/create-pull-request from 6 to 7 ([#1262](https://github.com/4DNucleome/PartSeg/pull/1262))
- *(deps)* Bump codecov/codecov-action from 4 to 5 ([#1263](https://github.com/4DNucleome/PartSeg/pull/1263))

### 0.16.1 - 2025-03-10

#### 🐛 Bug Fixes

- Fix rendering of alternative representation if there are more components in the alternative representation than in ROI ([#1240](https://github.com/4DNucleome/PartSeg/pull/1240))
- Enable czifile workaround for 2019.7.2.1 ([#1246](https://github.com/4DNucleome/PartSeg/pull/1246))

#### 🧪 Testing

- [Automatic] Constraints upgrades: `ipython`, `magicgui`, `numpy`, `partsegcore-compiled-backend`, `pydantic` ([#1231](https://github.com/4DNucleome/PartSeg/pull/1231))
- [Automatic] Constraints upgrades: `imagecodecs` ([#1233](https://github.com/4DNucleome/PartSeg/pull/1233))
- [Automatic] Constraints upgrades: `oiffile`, `pygments`, `scipy`, `superqt` ([#1234](https://github.com/4DNucleome/PartSeg/pull/1234))
- [Automatic] Constraints upgrades: `imageio`, `napari`, `numpy`, `partsegcore-compiled-backend`, `pydantic`, `pygments`, `scipy`, `sentry-sdk`, `simpleitk`, `tifffile`, `xlsxwriter` ([#1236](https://github.com/4DNucleome/PartSeg/pull/1236))
- [Automatic] Constraints upgrades: `ipython`, `xlsxwriter` ([#1239](https://github.com/4DNucleome/PartSeg/pull/1239))
- [Automatic] Constraints upgrades: `numpy`, `partsegcore-compiled-backend`, `psygnal`, `qtpy`, `scipy`, `sentry-sdk` ([#1241](https://github.com/4DNucleome/PartSeg/pull/1241))
- [Automatic] Constraints upgrades: `czifile`, `h5py`, `ipython`, `qtawesome`, `sentry-sdk`, `tifffile`, `traceback-with-variables` ([#1247](https://github.com/4DNucleome/PartSeg/pull/1247))

#### ⚙️ Miscellaneous Tasks

- [pre-commit.ci] pre-commit autoupdate ([#1232](https://github.com/4DNucleome/PartSeg/pull/1232))
- [pre-commit.ci] pre-commit autoupdate ([#1235](https://github.com/4DNucleome/PartSeg/pull/1235))
- [pre-commit.ci] pre-commit autoupdate ([#1237](https://github.com/4DNucleome/PartSeg/pull/1237))
- Drop python 3.9 tests for napari repository ([#1244](https://github.com/4DNucleome/PartSeg/pull/1244))
- Block ipykernel 7.0.0a1 ([#1248](https://github.com/4DNucleome/PartSeg/pull/1248))
- [pre-commit.ci] pre-commit autoupdate ([#1242](https://github.com/4DNucleome/PartSeg/pull/1242))
- Switch to `get_qapp` from `get_app` to handle napari deprecation ([#1249](https://github.com/4DNucleome/PartSeg/pull/1249))

### 0.16.0 - 2024-12-21

#### 🚀 Features

- Allow set units that will be used for load/save data using PartSeg as napari plugin ([#1228](https://github.com/4DNucleome/PartSeg/pull/1228))
- Show filename when importing with PartSeg in napari ([#1226](https://github.com/4DNucleome/PartSeg/pull/1226))

#### 🐛 Bug Fixes

- Fix error when image changed during segmentation ([#1218](https://github.com/4DNucleome/PartSeg/pull/1218))
- Fix pre release tests ([#1219](https://github.com/4DNucleome/PartSeg/pull/1219))
- Drop imagej LUTs of size `24*x` ([#1227](https://github.com/4DNucleome/PartSeg/pull/1227))

#### 🧪 Testing

- [Automatic] Constraints upgrades: `h5py`, `imageio`, `ipython`, `napari`, `numpy`, `sentry-sdk` ([#1201](https://github.com/4DNucleome/PartSeg/pull/1201))
- [Automatic] Constraints upgrades: `sentry-sdk` ([#1214](https://github.com/4DNucleome/PartSeg/pull/1214))
- [Automatic] Constraints upgrades: `ipython`, `traceback-with-variables` ([#1221](https://github.com/4DNucleome/PartSeg/pull/1221))
- [Automatic] Constraints upgrades: `numpy`, `packaging`, `pydantic`, `qtconsole`, `qtpy`, `sentry-sdk`, `traceback-with-variables` ([#1223](https://github.com/4DNucleome/PartSeg/pull/1223))
- [Automatic] Constraints upgrades: `imageio`, `ipython`, `pydantic` ([#1225](https://github.com/4DNucleome/PartSeg/pull/1225))
- [Automatic] Constraints upgrades: `napari`, `numpy`, `pydantic`, `sentry-sdk`, `six`, `superqt`, `tifffile` ([#1229](https://github.com/4DNucleome/PartSeg/pull/1229))

#### ⚙️ Miscellaneous Tasks

- Stop using mambaforge in tests ([#1203](https://github.com/4DNucleome/PartSeg/pull/1203))
- [pre-commit.ci] pre-commit autoupdate ([#1202](https://github.com/4DNucleome/PartSeg/pull/1202))
- [pre-commit.ci] pre-commit autoupdate ([#1204](https://github.com/4DNucleome/PartSeg/pull/1204))
- Remove defining default version of language in pre-commit configuration ([#1208](https://github.com/4DNucleome/PartSeg/pull/1208))
- [pre-commit.ci] pre-commit autoupdate ([#1209](https://github.com/4DNucleome/PartSeg/pull/1209))
- Drop python 3.8 ([#1206](https://github.com/4DNucleome/PartSeg/pull/1206))
- Use `PublishPipelineArtifact` in place of `PublishBuildArtifacts` to reduce CI fragility ([#1213](https://github.com/4DNucleome/PartSeg/pull/1213))
- Update CI configuration to use more modern OS and python versions ([#1207](https://github.com/4DNucleome/PartSeg/pull/1207))
- Fix `upgrade-dependencies.yaml`docs constraints ([#1215](https://github.com/4DNucleome/PartSeg/pull/1215))
- [pre-commit.ci] pre-commit autoupdate ([#1216](https://github.com/4DNucleome/PartSeg/pull/1216))
- Add changelog 0.16.0a1
- [pre-commit.ci] pre-commit autoupdate ([#1222](https://github.com/4DNucleome/PartSeg/pull/1222))
- [pre-commit.ci] pre-commit autoupdate ([#1230](https://github.com/4DNucleome/PartSeg/pull/1230))

### 0.15.4 - 2024-09-27

#### 🚀 Features

- Add preview of image metadata ([#1154](https://github.com/4DNucleome/PartSeg/pull/1154))
- Add option to combine channels using sum and max ([#1159](https://github.com/4DNucleome/PartSeg/pull/1159))
- Add metadata viewer as napari widget ([#1195](https://github.com/4DNucleome/PartSeg/pull/1195))
- Read channel colors from `*.czi` metadata ([#1198](https://github.com/4DNucleome/PartSeg/pull/1198))
- Use image color when add layer to napari ([#1200](https://github.com/4DNucleome/PartSeg/pull/1200))

#### 🐛 Bug Fixes

- Fix selection of custom label colors for napari 0.5.0 ([#1138](https://github.com/4DNucleome/PartSeg/pull/1138))
- Add pint call to enforce initialization of unit registry ([#1146](https://github.com/4DNucleome/PartSeg/pull/1146))
- Workaround for lack of zsd support in czifile ([#1142](https://github.com/4DNucleome/PartSeg/pull/1142))
- Fix preparing data for `mahotas.haralick` to avoid overflow problem ([#1150](https://github.com/4DNucleome/PartSeg/pull/1150))
- Fix `use_convex` type from `int` to `bool` for segmentation algorithms ([#1152](https://github.com/4DNucleome/PartSeg/pull/1152))
- Prevent propagation of decreasing contrast limits set by user ([#1166](https://github.com/4DNucleome/PartSeg/pull/1166))
- Prevent error on searching component if there is no component ([#1167](https://github.com/4DNucleome/PartSeg/pull/1167))
- Fix checking if channel requested by MeasurementProfile exists ([#1165](https://github.com/4DNucleome/PartSeg/pull/1165))
- Fix trying to access to just deleted measurement profile from edit window. ([#1168](https://github.com/4DNucleome/PartSeg/pull/1168))
- Fix bug in code for checking for survey file ([#1174](https://github.com/4DNucleome/PartSeg/pull/1174))
- Fix plugin discovery in bundle to register them in napari viewer ([#1175](https://github.com/4DNucleome/PartSeg/pull/1175))
- Fix problem with setting range of auto-generated widget ([#1187](https://github.com/4DNucleome/PartSeg/pull/1187))
- Fix reading channel names from single channel czi files ([#1194](https://github.com/4DNucleome/PartSeg/pull/1194))

#### 🚜 Refactor

- Make warnings error in tests ([#1192](https://github.com/4DNucleome/PartSeg/pull/1192))
- Merge all channel-specific attributes of the Image class ([#1191](https://github.com/4DNucleome/PartSeg/pull/1191))

#### 📚 Documentation

- Change homepage URL ([#1139](https://github.com/4DNucleome/PartSeg/pull/1139))
- Add link for download macOS arm bundle ([#1140](https://github.com/4DNucleome/PartSeg/pull/1140))
- Add changelog for 0.15.4 release
- Update changelog ([#1176](https://github.com/4DNucleome/PartSeg/pull/1176))

#### 🧪 Testing

- [Automatic] Constraints upgrades: `napari`, `sentry-sdk`, `sympy` ([#1128](https://github.com/4DNucleome/PartSeg/pull/1128))
- [Automatic] Constraints upgrades: `mahotas`, `numpy`, `sentry-sdk`, `sympy` ([#1145](https://github.com/4DNucleome/PartSeg/pull/1145))
- [Automatic] Constraints upgrades: `numpy`, `tifffile` ([#1163](https://github.com/4DNucleome/PartSeg/pull/1163))
- [Automatic] Constraints upgrades: `napari`, `sentry-sdk`, `tifffile` ([#1169](https://github.com/4DNucleome/PartSeg/pull/1169))
- [Automatic] Constraints upgrades: `magicgui`, `sentry-sdk` ([#1172](https://github.com/4DNucleome/PartSeg/pull/1172))
- [Automatic] Constraints upgrades: `sympy`, `tifffile` ([#1177](https://github.com/4DNucleome/PartSeg/pull/1177))
- [Automatic] Constraints upgrades: `imageio`, `napari`, `numpy` ([#1180](https://github.com/4DNucleome/PartSeg/pull/1180))
- Constraints upgrades: `sentry-sdk` and fix tests ([#1182](https://github.com/4DNucleome/PartSeg/pull/1182))
- `napari==0.5.3` related fixes, Constraints upgrades: `imageio`, `ipython`, `numpy`, `qtconsole`, `scipy`, `simpleitk`, `tifffile` ([#1183](https://github.com/4DNucleome/PartSeg/pull/1183))
- [Automatic] Constraints upgrades: `numpy`, `pydantic` ([#1188](https://github.com/4DNucleome/PartSeg/pull/1188))
- [Automatic] Constraints upgrades: `imagecodecs`, `pandas`, `pydantic`, `sentry-sdk`, `sympy`, `tifffile` ([#1190](https://github.com/4DNucleome/PartSeg/pull/1190))

#### ⚙️ Miscellaneous Tasks

- Speedup tests by use `tox-uv` ([#1141](https://github.com/4DNucleome/PartSeg/pull/1141))
- Get additional dict from PR branch for checking PR title ([#1144](https://github.com/4DNucleome/PartSeg/pull/1144))
- Relax numpy constraint ([#1143](https://github.com/4DNucleome/PartSeg/pull/1143))
- Allow to skip spellchecking PR title ([#1147](https://github.com/4DNucleome/PartSeg/pull/1147))
- [pre-commit.ci] pre-commit autoupdate ([#1149](https://github.com/4DNucleome/PartSeg/pull/1149))
- Create only archive with version in name on azures pipeline ([#1151](https://github.com/4DNucleome/PartSeg/pull/1151))
- Fix tests for napari from repository ([#1148](https://github.com/4DNucleome/PartSeg/pull/1148))
- Use python 3.11 to determine updated packages in PR description ([#1160](https://github.com/4DNucleome/PartSeg/pull/1160))
- [pre-commit.ci] pre-commit autoupdate ([#1164](https://github.com/4DNucleome/PartSeg/pull/1164))
- [pre-commit.ci] pre-commit autoupdate ([#1170](https://github.com/4DNucleome/PartSeg/pull/1170))
- Disable thumbnail generation in napari layer as it is fragile and not used ([#1171](https://github.com/4DNucleome/PartSeg/pull/1171))
- [pre-commit.ci] pre-commit autoupdate ([#1173](https://github.com/4DNucleome/PartSeg/pull/1173))
- [pre-commit.ci] pre-commit autoupdate ([#1178](https://github.com/4DNucleome/PartSeg/pull/1178))
- Fix call of logger to properly pass arguments to messages ([#1179](https://github.com/4DNucleome/PartSeg/pull/1179))
- Fix coverage files upload by enable hidden files upload ([#1186](https://github.com/4DNucleome/PartSeg/pull/1186))
- [pre-commit.ci] pre-commit autoupdate ([#1184](https://github.com/4DNucleome/PartSeg/pull/1184))
- Use PyQt6 in pre-tests ([#1196](https://github.com/4DNucleome/PartSeg/pull/1196))
- Add missed code from #1191 ([#1197](https://github.com/4DNucleome/PartSeg/pull/1197))
- [pre-commit.ci] pre-commit autoupdate ([#1189](https://github.com/4DNucleome/PartSeg/pull/1189))
- Auto add "skip check PR title" label in update dependencies PR ([#1199](https://github.com/4DNucleome/PartSeg/pull/1199))

#### Build

- Remove PyOpenGL-accelerate from dependencies because of numpy incompatibility ([#1155](https://github.com/4DNucleome/PartSeg/pull/1155))
- Update install constraints on numpy and qt packages ([#1157](https://github.com/4DNucleome/PartSeg/pull/1157))
- Enforce napari 0.5.0 for Qt6 bindings ([#1161](https://github.com/4DNucleome/PartSeg/pull/1161))
- Require napari>=0.5.0 only for python 3.9+ ([#1162](https://github.com/4DNucleome/PartSeg/pull/1162))

### 0.15.3 - 2024-07-08

#### 🚀 Features

- Pydantic 2 compatibility ([#1084](https://github.com/4DNucleome/PartSeg/pull/1084))

#### 🐛 Bug Fixes

- Fix rendering icons in colormap preview ([#1040](https://github.com/4DNucleome/PartSeg/pull/1040))
- Fix test for validation length of message for sentry-sdk 2.0 release ([#1098](https://github.com/4DNucleome/PartSeg/pull/1098))
- When fix reader check lowercase extension for validate compatibility ([#1097](https://github.com/4DNucleome/PartSeg/pull/1097))
- Fix napari 0.5.0 compatibility ([#1116](https://github.com/4DNucleome/PartSeg/pull/1116))

#### 🚜 Refactor

- Fix Qt flags ([#1041](https://github.com/4DNucleome/PartSeg/pull/1041))
- Fix qt flags in roi mask code ([#1042](https://github.com/4DNucleome/PartSeg/pull/1042))
- Fix qt flags in roi analysis ([#1043](https://github.com/4DNucleome/PartSeg/pull/1043))
- Migrate from setup.cfg to `pyproject.toml` ([#1070](https://github.com/4DNucleome/PartSeg/pull/1070))

#### 📚 Documentation

- Allow to use newer release of build docs dependencies ([#1057](https://github.com/4DNucleome/PartSeg/pull/1057))

#### 🧪 Testing

- [Automatic] Constraints upgrades: `imagecodecs`, `imageio`, `ipykernel`, `ipython`, `numpy`, `oiffile`, `pandas`, `psygnal`, `pyinstaller`, `qtconsole`, `qtpy`, `sentry-sdk`, `simpleitk`, `superqt`, `tifffile`, `xlsxwriter` ([#1020](https://github.com/4DNucleome/PartSeg/pull/1020))
- [Automatic] Constraints upgrades: `h5py`, `imageio`, `ipython`, `numpy`, `packaging`, `pydantic`, `pyinstaller`, `pyqt5`, `scipy`, `sentry-sdk`, `superqt`, `tifffile`, `xlsxwriter` ([#1027](https://github.com/4DNucleome/PartSeg/pull/1027))
- [Automatic] Constraints upgrades: `imageio`, `magicgui`, `xlsxwriter` ([#1030](https://github.com/4DNucleome/PartSeg/pull/1030))
- [Automatic] Constraints upgrades: `ipykernel`, `pandas`, `qtpy` ([#1032](https://github.com/4DNucleome/PartSeg/pull/1032))
- [Automatic] Constraints upgrades: `imageio`, `ipykernel`, `ipython`, `numpy`, `pandas`, `psygnal`, `pygments`, `pyinstaller`, `qtconsole`, `scipy`, `sentry-sdk`, `simpleitk` ([#1035](https://github.com/4DNucleome/PartSeg/pull/1035))
- [Automatic] Constraints upgrades: `imagecodecs`, `imageio`, `ipykernel`, `magicgui`, `pandas`, `pyinstaller`, `qtawesome`, `sentry-sdk`, `tifffile` ([#1048](https://github.com/4DNucleome/PartSeg/pull/1048))
- [Automatic] Constraints upgrades: `ipykernel`, `numpy`, `pandas`, `partsegcore-compiled-backend`, `pydantic`, `scipy`, `sentry-sdk` ([#1058](https://github.com/4DNucleome/PartSeg/pull/1058))
- Improve test of PartSegImage ([#1072](https://github.com/4DNucleome/PartSeg/pull/1072))
- Improve test suite for `PartSegCore` ([#1077](https://github.com/4DNucleome/PartSeg/pull/1077))
- [Automatic] Constraints upgrades: `imageio`, `ipykernel`, `local-migrator`, `napari`, `numpy`, `pandas`, `partsegcore-compiled-backend`, `pyinstaller`, `sentry-sdk`, `tifffile`, `vispy`, `xlsxwriter` ([#1063](https://github.com/4DNucleome/PartSeg/pull/1063))
- [Automatic] Constraints upgrades: `magicgui`, `packaging`, `psygnal`, `pyinstaller`, `sentry-sdk`, `superqt` ([#1086](https://github.com/4DNucleome/PartSeg/pull/1086))
- [Automatic] Constraints upgrades: `psygnal`, `pydantic`, `sentry-sdk`, `vispy` ([#1090](https://github.com/4DNucleome/PartSeg/pull/1090))
- [Automatic] Constraints upgrades: `h5py`, `ipykernel`, `mahotas`, `pandas`, `psygnal`, `pydantic`, `pyinstaller`, `qtawesome`, `scipy`, `sentry-sdk`, `superqt` ([#1092](https://github.com/4DNucleome/PartSeg/pull/1092))
- [Automatic] Constraints upgrades: `imageio`, `tifffile` ([#1100](https://github.com/4DNucleome/PartSeg/pull/1100))
- [Automatic] Constraints upgrades: `pydantic`, `sentry-sdk`, `superqt`, `tifffile` ([#1102](https://github.com/4DNucleome/PartSeg/pull/1102))
- [Automatic] Constraints upgrades: `psygnal`, `pygments`, `qtconsole`, `sentry-sdk`, `superqt`, `tifffile` ([#1105](https://github.com/4DNucleome/PartSeg/pull/1105))
- [Automatic] Constraints upgrades: `imagecodecs`, `magicgui`, `oiffile`, `openpyxl`, `packaging`, `pydantic`, `pyinstaller`, `requests`, `scipy`, `sentry-sdk`, `superqt`, `sympy`, `tifffile`, `vispy` ([#1107](https://github.com/4DNucleome/PartSeg/pull/1107))
- [Automatic] Constraints upgrades: `pydantic` ([#1112](https://github.com/4DNucleome/PartSeg/pull/1112))

#### ⚙️ Miscellaneous Tasks

- [pre-commit.ci] pre-commit autoupdate ([#1019](https://github.com/4DNucleome/PartSeg/pull/1019))
- Remove plugin page preview as it is no longer maintained ([#1021](https://github.com/4DNucleome/PartSeg/pull/1021))
- [pre-commit.ci] pre-commit autoupdate ([#1022](https://github.com/4DNucleome/PartSeg/pull/1022))
- [pre-commit.ci] pre-commit autoupdate ([#1026](https://github.com/4DNucleome/PartSeg/pull/1026))
- [pre-commit.ci] pre-commit autoupdate ([#1031](https://github.com/4DNucleome/PartSeg/pull/1031))
- [pre-commit.ci] pre-commit autoupdate ([#1034](https://github.com/4DNucleome/PartSeg/pull/1034))
- Use new semgrep configuration ([#1039](https://github.com/4DNucleome/PartSeg/pull/1039))
- Upload raw coverage information ([#1044](https://github.com/4DNucleome/PartSeg/pull/1044))
- [pre-commit.ci] pre-commit autoupdate ([#1036](https://github.com/4DNucleome/PartSeg/pull/1036))
- Run coverage upload in separate steep ([#1053](https://github.com/4DNucleome/PartSeg/pull/1053))
- Generate local report in `Tests` workflow and use proper script for fetch report ([#1054](https://github.com/4DNucleome/PartSeg/pull/1054))
- Move coverage back to main workflow ([#1055](https://github.com/4DNucleome/PartSeg/pull/1055))
- [pre-commit.ci] pre-commit autoupdate ([#1056](https://github.com/4DNucleome/PartSeg/pull/1056))
- [pre-commit.ci] pre-commit autoupdate ([#1059](https://github.com/4DNucleome/PartSeg/pull/1059))
- Update `actions/upload-artifact` and `actions/download-artifact` from 3 to 4 ([#1062](https://github.com/4DNucleome/PartSeg/pull/1062))
- [pre-commit.ci] pre-commit autoupdate ([#1064](https://github.com/4DNucleome/PartSeg/pull/1064))
- Group actions update ([#1065](https://github.com/4DNucleome/PartSeg/pull/1065))
- [pre-commit.ci] pre-commit autoupdate ([#1068](https://github.com/4DNucleome/PartSeg/pull/1068))
- Remove requirement of 2 builds upload to codecov.io ([#1073](https://github.com/4DNucleome/PartSeg/pull/1073))
- Re add tests to coverage report ([#1074](https://github.com/4DNucleome/PartSeg/pull/1074))
- Switch from setup.cfg to pyproject.toml in workflows ([#1076](https://github.com/4DNucleome/PartSeg/pull/1076))
- Fix compiling pyinstaller pre-deps ([#1075](https://github.com/4DNucleome/PartSeg/pull/1075))
- Add codespell to pre-commit and fix pointed bugs ([#1078](https://github.com/4DNucleome/PartSeg/pull/1078))
- Add new ruff rules and apply them ([#1079](https://github.com/4DNucleome/PartSeg/pull/1079))
- [pre-commit.ci] pre-commit autoupdate ([#1080](https://github.com/4DNucleome/PartSeg/pull/1080))
- [pre-commit.ci] pre-commit autoupdate ([#1081](https://github.com/4DNucleome/PartSeg/pull/1081))
- Fix upgrade depenecies workflow ([#1083](https://github.com/4DNucleome/PartSeg/pull/1083))
- Block using `mpmath==1.4.0a0` and `sentry-sdk` 2.0.0a1/a2 in pre-test ([#1085](https://github.com/4DNucleome/PartSeg/pull/1085))
- [pre-commit.ci] pre-commit autoupdate ([#1089](https://github.com/4DNucleome/PartSeg/pull/1089))
- Fix jupyter failing test by using constraints ([#1093](https://github.com/4DNucleome/PartSeg/pull/1093))
- [pre-commit.ci] pre-commit autoupdate ([#1091](https://github.com/4DNucleome/PartSeg/pull/1091))
- [pre-commit.ci] pre-commit autoupdate ([#1096](https://github.com/4DNucleome/PartSeg/pull/1096))
- Add python 3.12 testing ([#1087](https://github.com/4DNucleome/PartSeg/pull/1087))
- Exclude pyside2 on python 3.11 and 3.12 from testing ([#1099](https://github.com/4DNucleome/PartSeg/pull/1099))
- [pre-commit.ci] pre-commit autoupdate ([#1101](https://github.com/4DNucleome/PartSeg/pull/1101))
- [pre-commit.ci] pre-commit autoupdate ([#1103](https://github.com/4DNucleome/PartSeg/pull/1103))
- Bump macos runners to macos-13 (both azure and GHA) ([#1113](https://github.com/4DNucleome/PartSeg/pull/1113))
- [pre-commit.ci] pre-commit autoupdate ([#1108](https://github.com/4DNucleome/PartSeg/pull/1108))
- Remove pyqt5 from constraints ([#1118](https://github.com/4DNucleome/PartSeg/pull/1118))
- Add workflow for releases from GHA ([#1117](https://github.com/4DNucleome/PartSeg/pull/1117))
- Add actionlint to CI to early prevent bug in github workflows ([#1119](https://github.com/4DNucleome/PartSeg/pull/1119))
- Fix release workflow, by update permissions
- Check if release notes are properly created ([#1122](https://github.com/4DNucleome/PartSeg/pull/1122))
- Proper use enum in checking new version ([#1123](https://github.com/4DNucleome/PartSeg/pull/1123))
- Refactor and simplify menu bar creation, add workaround for macOS numpy problem ([#1124](https://github.com/4DNucleome/PartSeg/pull/1124))
- Simplify release workflow ([#1126](https://github.com/4DNucleome/PartSeg/pull/1126))
- Fix `make_release.yml` to proper detect release, attempt 3 ([#1127](https://github.com/4DNucleome/PartSeg/pull/1127))

#### 🛡️ Security

- *(deps)* Bump actions/checkout from 3 to 4 ([#1029](https://github.com/4DNucleome/PartSeg/pull/1029))
- *(deps)* Bump conda-incubator/setup-miniconda from 2 to 3 ([#1038](https://github.com/4DNucleome/PartSeg/pull/1038))
- *(deps)* Bump aganders3/headless-gui from 1 to 2 ([#1047](https://github.com/4DNucleome/PartSeg/pull/1047))
- *(deps)* Bump actions/checkout from 3 to 4 ([#1045](https://github.com/4DNucleome/PartSeg/pull/1045))
- *(deps)* Bump hynek/build-and-inspect-python-package from 1 to 2 ([#1050](https://github.com/4DNucleome/PartSeg/pull/1050))
- *(deps)* Bump actions/setup-python from 4 to 5 ([#1046](https://github.com/4DNucleome/PartSeg/pull/1046))
- *(deps)* Bump github/codeql-action from 2 to 3 ([#1051](https://github.com/4DNucleome/PartSeg/pull/1051))
- *(deps)* Bump peter-evans/create-pull-request from 5 to 6 ([#1067](https://github.com/4DNucleome/PartSeg/pull/1067))
- *(deps)* Bump codecov/codecov-action from 3 to 4 ([#1066](https://github.com/4DNucleome/PartSeg/pull/1066))

#### Build

- Fix not bundling `Font Awesome 6 Free-Solid-900.otf` file to executable ([#1114](https://github.com/4DNucleome/PartSeg/pull/1114))
- Update readme and release to point to GitHub releases ([#1115](https://github.com/4DNucleome/PartSeg/pull/1115))
- Do not create archive twice when create bundle ([#1120](https://github.com/4DNucleome/PartSeg/pull/1120))
- Enable macOS-arm bundle builds ([#1121](https://github.com/4DNucleome/PartSeg/pull/1121))

### 0.15.2 - 2023-08-28

#### 🐛 Bug Fixes

- Fix range threshold selection of algorithms ([#1009](https://github.com/4DNucleome/PartSeg/pull/1009))
- When run batch check if file extension is supported by loader ([#1016](https://github.com/4DNucleome/PartSeg/pull/1016))
- Do not allow to select and render corrupted batch plans ([#1015](https://github.com/4DNucleome/PartSeg/pull/1015))

#### 🧪 Testing

- [Automatic] Constraints upgrades: `imagecodecs`, `ipykernel`, `magicgui`, `psygnal`, `scipy`, `superqt`, `tifffile` ([#1011](https://github.com/4DNucleome/PartSeg/pull/1011))
- [Automatic] Constraints upgrades: `imageio`, `pyinstaller`, `tifffile` ([#1018](https://github.com/4DNucleome/PartSeg/pull/1018))

#### ⚙️ Miscellaneous Tasks

- Use faster version of black ([#1010](https://github.com/4DNucleome/PartSeg/pull/1010))
- [pre-commit.ci] pre-commit autoupdate ([#1013](https://github.com/4DNucleome/PartSeg/pull/1013))

### 0.15.1 - 2023-08-08

#### 🚀 Features

- Allow to save multiple napari image layers to single tiff file ([#1000](https://github.com/4DNucleome/PartSeg/pull/1000))
- Add option to export batch project with data ([#996](https://github.com/4DNucleome/PartSeg/pull/996))

#### 🐛 Bug Fixes

- Fix possible problem of double registration napari plugin in PartSeg bundle ([#974](https://github.com/4DNucleome/PartSeg/pull/974))
- Bump OS versions for part of testing workflows. ([#977](https://github.com/4DNucleome/PartSeg/pull/977))
- Bump os version for main tests workflow. (