shinestacker 0.3.3__tar.gz → 0.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of shinestacker might be problematic. Click here for more details.
- shinestacker-0.3.4/.flake8 +8 -0
- shinestacker-0.3.4/.github/workflows/pylint.yml +28 -0
- shinestacker-0.3.4/.pylintrc +6 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/CHANGELOG.md +23 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/PKG-INFO +10 -4
- {shinestacker-0.3.3 → shinestacker-0.3.4}/README.md +9 -3
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/focus_stacking.md +2 -2
- shinestacker-0.3.4/docs/index.md +17 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/job.md +6 -13
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/main.md +11 -23
- shinestacker-0.3.4/img/coffee.gif +0 -0
- shinestacker-0.3.4/img/coffee_stack.jpg +0 -0
- shinestacker-0.3.4/img/flies.gif +0 -0
- shinestacker-0.3.4/img/flies_stack.jpg +0 -0
- shinestacker-0.3.4/requirements.txt +13 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/__init__.py +2 -1
- shinestacker-0.3.4/src/shinestacker/_version.py +1 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/__init__.py +3 -2
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/align.py +102 -64
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/balance.py +89 -42
- shinestacker-0.3.4/src/shinestacker/algorithms/base_stack_algo.py +42 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/core_utils.py +6 -6
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/denoise.py +4 -1
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/depth_map.py +28 -39
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/exif.py +43 -38
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/multilayer.py +48 -28
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/noise_detection.py +34 -23
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/pyramid.py +42 -42
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/sharpen.py +1 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/stack.py +42 -41
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/stack_framework.py +111 -65
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/utils.py +12 -11
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/vignetting.py +48 -22
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/algorithms/white_balance.py +1 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/about_dialog.py +6 -2
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/app_config.py +1 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/gui_utils.py +20 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/help_menu.py +1 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/main.py +9 -18
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/open_frames.py +5 -4
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/project.py +5 -16
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/retouch.py +5 -17
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/colors.py +4 -4
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/core_utils.py +1 -1
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/exceptions.py +2 -1
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/framework.py +46 -33
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/logging.py +9 -10
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/action_config.py +253 -197
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/actions_window.py +32 -28
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/colors.py +1 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/gui_images.py +7 -3
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/gui_logging.py +3 -2
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/gui_run.py +53 -38
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/main_window.py +69 -25
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/new_project.py +35 -2
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/project_converter.py +21 -20
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/project_editor.py +45 -52
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/project_model.py +15 -23
- shinestacker-0.3.3/src/shinestacker/retouch/filter_base.py → shinestacker-0.3.4/src/shinestacker/retouch/base_filter.py +7 -4
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/brush.py +1 -0
- shinestacker-0.3.4/src/shinestacker/retouch/brush_gradient.py +34 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/brush_preview.py +14 -10
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/brush_tool.py +28 -19
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/denoise_filter.py +3 -2
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/display_manager.py +11 -5
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/exif_data.py +1 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/file_loader.py +13 -9
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/filter_manager.py +1 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/image_editor.py +14 -48
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/image_editor_ui.py +10 -5
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/image_filters.py +4 -2
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/image_viewer.py +33 -31
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/io_gui_handler.py +25 -13
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/io_manager.py +3 -2
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/layer_collection.py +79 -23
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/shortcuts_help.py +1 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/undo_manager.py +7 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/unsharp_mask_filter.py +3 -2
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/white_balance_filter.py +11 -6
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/PKG-INFO +10 -4
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/SOURCES.txt +7 -1
- shinestacker-0.3.3/.flake8 +0 -4
- shinestacker-0.3.3/docs/index.md +0 -23
- shinestacker-0.3.3/img/flies.gif +0 -0
- shinestacker-0.3.3/img/flies_stack.jpg +0 -0
- shinestacker-0.3.3/src/shinestacker/_version.py +0 -1
- shinestacker-0.3.3/src/shinestacker/retouch/brush_gradient.py +0 -20
- {shinestacker-0.3.3 → shinestacker-0.3.4}/.coverage +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/.coveragerc +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/.github/workflows/ci-multiplatform.yml +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/.github/workflows/pypi-publish.yml +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/.github/workflows/release.yml +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/.gitignore +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/.readthedocs.yaml +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/LICENSE +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/MANIFEST.in +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/alignment.md +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/api.md +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/balancing.md +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/conf.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/gui.md +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/multilayer.md +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/noise.md +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/requirements.txt +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/docs/vignetting.md +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/img/coins.gif +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/img/coins_stack.jpg +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/img/extreme-vignetting.jpg +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/img/flow-diagram.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/img/gui-finder.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/img/gui-project-new.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/img/gui-project-run.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/img/gui-retouch.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/pyproject.toml +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/scripts/build_release.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/scripts/validate-tomli.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/setup.cfg +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/app/__init__.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/config/__init__.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/config/config.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/config/constants.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/config/gui_constants.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/core/__init__.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/__init__.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/ico/focus_stack_bkg.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.icns +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.ico +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/ico/shinestacker.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/img/close-round-line-icon.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/img/forward-button-icon.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/img/play-button-round-icon.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/gui/img/plus-round-line-icon.png +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker/retouch/__init__.py +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/dependency_links.txt +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/entry_points.txt +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/requires.txt +0 -0
- {shinestacker-0.3.3 → shinestacker-0.3.4}/src/shinestacker.egg-info/top_level.txt +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Pylint Check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main, master ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main, master ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
pylint:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
contents: write
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- uses: Silleellie/pylint-github-action@v2.1
|
|
18
|
+
with:
|
|
19
|
+
lint-path: src
|
|
20
|
+
python-version: 3.9
|
|
21
|
+
requirements-path: requirements.txt
|
|
22
|
+
readme-path: README.md
|
|
23
|
+
pylintrc-path: .pylintrc
|
|
24
|
+
badge-text: PyLint
|
|
25
|
+
color-bad-score: red
|
|
26
|
+
color-ok-score: orange
|
|
27
|
+
color-good-score: yellow
|
|
28
|
+
color-perfect-score: brightgreen
|
|
@@ -4,6 +4,29 @@ This page reports the main releases only and the main changes therein.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [v0.3.4] - 2025-08-16
|
|
8
|
+
**Code consolidation and fixes**
|
|
9
|
+
|
|
10
|
+
### Changes
|
|
11
|
+
|
|
12
|
+
* code consolidation with support of pylint code checking
|
|
13
|
+
* some bug fixes
|
|
14
|
+
* new project dialog shows the number of bunches, if selected
|
|
15
|
+
* updated sample images, examples and documentation
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## [v0.3.3] - 2025-08-13
|
|
20
|
+
**Fixed PyPI distribution**
|
|
21
|
+
|
|
22
|
+
This release is equivalent to v0.3.2, but resolves a problem for PyPI distribution.
|
|
23
|
+
|
|
24
|
+
### Changes
|
|
25
|
+
|
|
26
|
+
* examples and tests removed from PyPI distribution in order to fix file size limit
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
7
30
|
## [v0.3.2] - 2025-08-13
|
|
8
31
|
**Fixes and code refactoring**
|
|
9
32
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: shinestacker
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: ShineStacker
|
|
5
5
|
Author-email: Luca Lista <luka.lista@gmail.com>
|
|
6
6
|
License-Expression: LGPL-3.0
|
|
@@ -36,11 +36,17 @@ Dynamic: license-file
|
|
|
36
36
|
[](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
|
|
37
37
|
[](https://pypi.org/project/shinestacker/)
|
|
38
38
|
[](https://pypi.org/project/shinestacker/)
|
|
39
|
+
[](https://www.qt.io/qt-for-python)
|
|
39
40
|
[](https://codecov.io/github/lucalista/shinestacker)
|
|
41
|
+
[](https://github.com/lucalista/shinestacker/blob/main/.github/workflows/pylint.yml)
|
|
40
42
|
[](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
|
|
41
43
|
|
|
44
|
+
|
|
45
|
+
|
|
42
46
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
43
47
|
|
|
48
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
49
|
+
|
|
44
50
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
45
51
|
> **Focus stacking** for microscopy, macro photography, and computational imaging
|
|
46
52
|
|
|
@@ -48,7 +54,7 @@ Dynamic: license-file
|
|
|
48
54
|
- 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
|
|
49
55
|
- 🎨 **Hybrid Workflows**: Combine Python scripting with GUI refinement
|
|
50
56
|
- 🧩 **Modular Architecture**: Mix-and-match processing modules
|
|
51
|
-
- 🖌️ **
|
|
57
|
+
- 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
|
|
52
58
|
- 📊 **Jupyter Integration**: Reproducible research notebooks
|
|
53
59
|
|
|
54
60
|
## Interactive GUI
|
|
@@ -63,9 +69,9 @@ The GUI has two main working areas:
|
|
|
63
69
|
|
|
64
70
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
|
|
65
71
|
|
|
66
|
-
#
|
|
72
|
+
# Resources
|
|
67
73
|
|
|
68
|
-
📖 [Main documentation](https://
|
|
74
|
+
🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
|
|
69
75
|
|
|
70
76
|
|
|
71
77
|
# Credits
|
|
@@ -5,11 +5,17 @@
|
|
|
5
5
|
[](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
|
|
6
6
|
[](https://pypi.org/project/shinestacker/)
|
|
7
7
|
[](https://pypi.org/project/shinestacker/)
|
|
8
|
+
[](https://www.qt.io/qt-for-python)
|
|
8
9
|
[](https://codecov.io/github/lucalista/shinestacker)
|
|
10
|
+
[](https://github.com/lucalista/shinestacker/blob/main/.github/workflows/pylint.yml)
|
|
9
11
|
[](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
|
|
10
12
|
|
|
13
|
+
|
|
14
|
+
|
|
11
15
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
12
16
|
|
|
17
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
18
|
+
|
|
13
19
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
14
20
|
> **Focus stacking** for microscopy, macro photography, and computational imaging
|
|
15
21
|
|
|
@@ -17,7 +23,7 @@
|
|
|
17
23
|
- 🚀 **Batch Processing**: Align, balance, and stack hundreds of images
|
|
18
24
|
- 🎨 **Hybrid Workflows**: Combine Python scripting with GUI refinement
|
|
19
25
|
- 🧩 **Modular Architecture**: Mix-and-match processing modules
|
|
20
|
-
- 🖌️ **
|
|
26
|
+
- 🖌️ **Retouch Editing**: Final interactive retouch of stacked image from individual frames
|
|
21
27
|
- 📊 **Jupyter Integration**: Reproducible research notebooks
|
|
22
28
|
|
|
23
29
|
## Interactive GUI
|
|
@@ -32,9 +38,9 @@ The GUI has two main working areas:
|
|
|
32
38
|
|
|
33
39
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/gui-retouch.png' width="600" referrerpolicy="no-referrer">
|
|
34
40
|
|
|
35
|
-
#
|
|
41
|
+
# Resources
|
|
36
42
|
|
|
37
|
-
📖 [Main documentation](https://
|
|
43
|
+
🌍 [Website on WordPress](https://shinestacker.wordpress.com) • 📖 [Main documentation](https://shinestacker.readthedocs.io) • 📝 [Changelog](https://github.com/lucalista/shinestacker/blob/main/CHANGELOG.md)
|
|
38
44
|
|
|
39
45
|
|
|
40
46
|
# Credits
|
|
@@ -10,7 +10,7 @@ Arguments for the constructor of ```FocusStack``` are:
|
|
|
10
10
|
* ```output_path``` (optional): the subdirectory within ```working_path``` where aligned images are written. If not specified, it is equal to ```name```.
|
|
11
11
|
* ```working_path```: the directory that contains input and output image subdirectories. If not specified, it is the same as ```job.working_path```.
|
|
12
12
|
* ```exif_path``` (optional): if specified, EXIF data are copied to the output file from file in the specified directory. If not specified, it is the source directory used as input for the first action. If set equal to ```''``` no EXIF data is saved.
|
|
13
|
-
* ```
|
|
13
|
+
* ```denoise_amount``` (optoinal): if specified, a denois algorithm is applied. A value of 0.75 to 1.00 does not reduce details in an appreciable way, and is suitable for modest noise reduction. denoise may be useful for 8-bit images, or for images taken at large ISO. 16-bits images at low ISO usually don't require denoise. See [Image Denoising](https://docs.opencv.org/3.4/d5/d69/tutorial_py_non_local_means.html) for more details.
|
|
14
14
|
* ```prefix``` (optional): if specified, the specified string is pre-pended to the file name. May be useful if more algorithms are ran, and different file names are used for the output of different algorithms.
|
|
15
15
|
* ```enabled``` (optional, default: ``True```): allows to switch on and off this module.
|
|
16
16
|
|
|
@@ -28,7 +28,7 @@ Arguments for the constructor of ```FocusStackBunch``` are:
|
|
|
28
28
|
* ```exif_path``` (optional): if specified, EXIF data are copied to the output file from file in the specified directory. If not specified, it is the source directory used as * ```frames``` (optional, default: 10): the number of frames in each bunch that are stacked together.
|
|
29
29
|
* ```frames``` (optional, default: 10): the number of frames that are fused together.
|
|
30
30
|
* ```overlap``` (optional, default: 0): the number of overlapping frames between a bunch and the following one.
|
|
31
|
-
* ```
|
|
31
|
+
* ```denoise_amount``` (optoinal): if specified, a denois algorithm is applied. A value of 0.75 to 1.00 does not reduce details in an appreciable way, and is suitable for modest noise reduction. denoise may be useful for 8-bit images, or for images taken at large ISO. 16-bits images at low ISO usually don't require denoise. See [Image Denoising](https://docs.opencv.org/3.4/d5/d69/tutorial_py_non_local_means.html) for more details.
|
|
32
32
|
* ```prefix``` (optional): if specified, the specified string is pre-pended to the file name. May be useful if more algorithms are ran, and different file names are used for the output of different algorithms.
|
|
33
33
|
* ```enabled``` (optional, default: ```True```): allows to switch on and off this module.
|
|
34
34
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Shine Stacker
|
|
2
|
+
|
|
3
|
+
## Focus Stacking Processing Framework and GUI
|
|
4
|
+
|
|
5
|
+
```{toctree}
|
|
6
|
+
:maxdepth: 2
|
|
7
|
+
:caption: Content
|
|
8
|
+
|
|
9
|
+
main.md
|
|
10
|
+
gui.md
|
|
11
|
+
job.md
|
|
12
|
+
alignment.md
|
|
13
|
+
balancing.md
|
|
14
|
+
focus_stacking.md
|
|
15
|
+
multilayer.md
|
|
16
|
+
noise.md
|
|
17
|
+
vignetting.md
|
|
@@ -5,20 +5,13 @@ Create a job, then schedule the desired actions in a job, then run the job.
|
|
|
5
5
|
Quick start example:
|
|
6
6
|
|
|
7
7
|
```python
|
|
8
|
-
from
|
|
8
|
+
from shinestacker import *
|
|
9
9
|
|
|
10
|
-
job = StackJob("job", "E:/
|
|
11
|
-
job.add_action(
|
|
12
|
-
job.
|
|
13
|
-
|
|
14
|
-
job
|
|
15
|
-
job.add_action(Actions("align", actions=[MaskNoise(),
|
|
16
|
-
AlignFrames(),
|
|
17
|
-
BalanceFrames(mask_size=0.9, i_min=150, i_max=65385)]))
|
|
18
|
-
job.add_action(FocusStackBunch("batches", PyramidStack(), frames=10, overlap=2, denoise=0.8))
|
|
19
|
-
job.add_action(FocusStack("stack", PyramidStack(), postfix='_py', denoise=0.8))
|
|
20
|
-
job.add_action(FocusStack("stack", DepthMapStack(), input_path='batches', postfix='_dm', denoise=0.8))
|
|
21
|
-
job.add_action(MultiLayer("multilayer", input_path=['batches', 'stack']))
|
|
10
|
+
job = StackJob("job", "E:/focus_stacking/project_directory/", input_path="tiff_images")
|
|
11
|
+
job.add_action(CombinedActions("align", actions=[AlignFrames(), BalanceFrames()]))
|
|
12
|
+
job.add_action(FocusStackBunch("batches", PyramidStack(), frames=12, overlap=2))
|
|
13
|
+
job.add_action(FocusStack("stack", PyramidStack(), prefix='pyram_'))
|
|
14
|
+
job.add_action(FocusStack("stack", DepthMapStack(), prefix='dmap_'))
|
|
22
15
|
job.run()
|
|
23
16
|
```
|
|
24
17
|
|
|
@@ -2,14 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
## Focus Stacking Processing Framework and GUI
|
|
4
4
|
|
|
5
|
-
[](https://github.com/lucalista/shinestacker/actions/workflows/ci-multiplatform.yml)
|
|
6
|
-
[](https://pypi.org/project/shinestacker/)
|
|
7
|
-
[](https://pypi.org/project/shinestacker/)
|
|
8
|
-
[](https://codecov.io/github/lucalista/shinestacker)
|
|
9
|
-
[](https://shinestacker.readthedocs.io/en/latest/?badge=latest)
|
|
10
|
-
|
|
11
5
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/flies_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
12
6
|
|
|
7
|
+
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coffee_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
8
|
+
|
|
13
9
|
<img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins.gif' width="400" referrerpolicy="no-referrer"> <img src='https://raw.githubusercontent.com/lucalista/shinestacker/main/img/coins_stack.jpg' width="400" referrerpolicy="no-referrer">
|
|
14
10
|
|
|
15
11
|
> **Focus stacking** for microscopy, macro photography, and computational imaging
|
|
@@ -38,8 +34,8 @@ job.run()
|
|
|
38
34
|
Clone the pagkage from GitHub:
|
|
39
35
|
|
|
40
36
|
```bash
|
|
41
|
-
git clone https://github.com/lucalista/
|
|
42
|
-
cd
|
|
37
|
+
git clone https://github.com/lucalista/shinestacker.git
|
|
38
|
+
cd shinestacker
|
|
43
39
|
pip install -e .
|
|
44
40
|
```
|
|
45
41
|
|
|
@@ -47,7 +43,7 @@ pip install -e .
|
|
|
47
43
|
Launch GUI
|
|
48
44
|
|
|
49
45
|
```bash
|
|
50
|
-
|
|
46
|
+
shinestacker
|
|
51
47
|
```
|
|
52
48
|
|
|
53
49
|
Follow [GUI guide](gui.md) for batch processing and retouching.
|
|
@@ -56,21 +52,13 @@ Follow [GUI guide](gui.md) for batch processing and retouching.
|
|
|
56
52
|
## Advanced Processing Pipeline
|
|
57
53
|
|
|
58
54
|
```python
|
|
59
|
-
from shinestacker
|
|
60
|
-
|
|
61
|
-
job = StackJob("job", "E:/Focus stacking/My image directory/", input_path="src")
|
|
62
|
-
job.add_action(NoiseDetection())
|
|
63
|
-
job.run()
|
|
55
|
+
from shinestacker import *
|
|
64
56
|
|
|
65
|
-
job = StackJob("job", "E:/
|
|
66
|
-
job.add_action(CombinedActions("align",
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
job.add_action(FocusStackBunch("bunches", PyramidStack(), frames=10, overlap=2, denoise=0.8))
|
|
71
|
-
job.add_action(FocusStack("stack", PyramidStack(), prefix='pyramid_', denoise=0.8))
|
|
72
|
-
job.add_action(FocusStack("stack", DepthMapStack(), input_path='batches', prefix='depthmap_', denoise=0.8))
|
|
73
|
-
job.add_action(MultiLayer("multilayer", input_path=['batches', 'stack']))
|
|
57
|
+
job = StackJob("job", "E:/focus_stacking/project_directory/", input_path="tiff_images")
|
|
58
|
+
job.add_action(CombinedActions("align", actions=[AlignFrames(), BalanceFrames()]))
|
|
59
|
+
job.add_action(FocusStackBunch("batches", PyramidStack(), frames=12, overlap=2))
|
|
60
|
+
job.add_action(FocusStack("stack", PyramidStack(), prefix='pyram_'))
|
|
61
|
+
job.add_action(FocusStack("stack", DepthMapStack(), prefix='dmap_'))
|
|
74
62
|
job.run()
|
|
75
63
|
```
|
|
76
64
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# flake8: noqa F401 F403
|
|
2
|
+
# pylint: disable=C0114, E0401
|
|
2
3
|
from ._version import __version__
|
|
3
4
|
from . import config
|
|
4
5
|
from . import core
|
|
@@ -13,4 +14,4 @@ from .algorithms import *
|
|
|
13
14
|
__all__ = ['__version__']
|
|
14
15
|
__all__ += config_all
|
|
15
16
|
__all__ += core_all
|
|
16
|
-
__all__ += algorithms_all
|
|
17
|
+
__all__ += algorithms_all
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '0.3.4'
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
# flake8: noqa F401
|
|
2
|
+
# pylint: disable=C0114
|
|
3
|
+
import logging
|
|
2
4
|
from .. config.constants import constants
|
|
3
5
|
from .stack_framework import StackJob, CombinedActions
|
|
4
6
|
from .align import AlignFrames
|
|
@@ -9,11 +11,10 @@ from .pyramid import PyramidStack
|
|
|
9
11
|
from .multilayer import MultiLayer
|
|
10
12
|
from .noise_detection import NoiseDetection, MaskNoise
|
|
11
13
|
from .vignetting import Vignetting
|
|
12
|
-
import logging
|
|
13
14
|
logger = logging.getLogger(__name__)
|
|
14
15
|
logger.addHandler(logging.NullHandler())
|
|
15
16
|
|
|
16
17
|
__all__ = [
|
|
17
18
|
'StackJob', 'CombinedActions', 'AlignFrames', 'BalanceFrames', 'FocusStackBunch', 'FocusStack',
|
|
18
19
|
'DepthMapStack', 'PyramidStack', 'MultiLayer', 'NoiseDetection', 'MaskNoise', 'Vignetting'
|
|
19
|
-
]
|
|
20
|
+
]
|