From d386916869603572c32568dbf1fcd6fb5e9704c1 Mon Sep 17 00:00:00 2001
From: Andrei-EPFL <55141699+Andrei-EPFL@users.noreply.github.com>
Date: Tue, 22 Jul 2025 15:26:37 +0200
Subject: [PATCH 01/48] Create tutorial.md
I copied the tutorial from Voronoi segmentation and started modifiying
---
.../astronomy-source-extractor/tutorial.md | 363 ++++++++++++++++++
1 file changed, 363 insertions(+)
create mode 100644 topics/imaging/tutorials/astronomy-source-extractor/tutorial.md
diff --git a/topics/imaging/tutorials/astronomy-source-extractor/tutorial.md b/topics/imaging/tutorials/astronomy-source-extractor/tutorial.md
new file mode 100644
index 00000000000000..047120081a3a0f
--- /dev/null
+++ b/topics/imaging/tutorials/astronomy-source-extractor/tutorial.md
@@ -0,0 +1,363 @@
+---
+layout: tutorial_hands_on
+
+title: Astronomy Source extractor
+questions:
+ - How do I partition an image into regions based on which object they are nearest to (Voronoi segmentation)?
+ - How should images be preprocessed before applying Voronoi segmentation?
+ - How can I overlay two images?
+ - How can Voronoi segmentation be used to analyze spatial relationships?
+ - How can extracted image properties be used to categorize identified objects?
+objectives:
+ - How to perform Voronoi Segmentation in Galaxy.
+ - How to extract a single channel from an image.
+ - How to overlay two images.
+ - How to count objectives in a layer map.
+time_estimation: 1H
+key_points:
+- Voronoi segmentation is a simple algorithm, chosen to give a starting point for working with image segmentation.
+- This tutorial exemplifies how a Galaxy workflow can be applied to data from several different domains.
+requirements:
+ -
+ type: "internal"
+ topic_name: imaging
+ tutorials:
+ - imaging-introduction
+
+contributions:
+ authorship:
+ - Andrei-EPFL
+ funding:
+ - fiesta
+ - oscars
+tags:
+- imageanalysis
+- astronomy
+
+---
+
+In astronomy and large-scale sky surveys, a key objective is to identify individual celestial bodies—such as stars and galaxies—in sky images to enable further detailed scientific analysis. For example, DESI Legacy Survey have "photographed" a third of the sky, whereas DESI is measuring spectra of individual galaxies selected from all the photometrically detected targets.
+The Galaxy source-extractor tool is based on SEP which is a Python library built from the core routines of SExtractor (Source Extractor), which is widely used in astronomy for detecting and measuring sources in astronomical images.
+
+In order to detect sources, the background must be estimated and then all groups of pixels with a minimum area of
+```markdown
+minarea = 5 (default value of the number of pixels)
+```
+ with a flux larger than an absolute threshold at a pixel (j,i):
+```markdown
+thresh * err[j,i]
+```
+are selected as sources, where
+```markdown
+thresh = 1.5
+err_option = float_globalrms
+```
+i.e. by default the error is the global RMS of the background.
+
+In case
+```markdown
+err_option = none
+```
+the value of ```thresh``` is use directly as an absolute threshold.
+
+This tutorial will explain the data requirements for the tool, the main tool parameters and the output products of the tool. For more detailed instructions one can consult: https://sep.readthedocs.io/en/v1.0.x/index.html, https://ui.adsabs.harvard.edu/abs/1996A%26AS..117..393B/abstract and https://www.astromatic.net/software/sextractor/ .
+
+### Application to bioimage analysis
+
+
+### Application to Earth Observation
+
+
+### Application to Astronomy
+
+
+
+
+
+Thes original image is published by [Legacy Surveys / D. Lang (Perimeter Institute)](https://www.legacysurvey.org/acknowledgment/) and can be downloaded from the [official website](https://www.legacysurvey.org/viewer/jpeg-cutout?ra=53.16216667&dec=-27.79149167&layer=ls-dr10&pixscale=0.262&size=1200). The Legacy Surveys are described in {% cite legacy-survey-astronomy %}.
+
+>
+>
+> In this tutorial, we will cover:
+>
+> 1. TOC
+> {:toc}
+>
+{: .agenda}
+
+
+## Data requirements
+Source-extractor requires one single image. For astronomy, this is a sky-image with luminous sources. Nonetheless, two other files could provided as well: a mask and a filter. Masking is an important process in astronomy, since very bright stars strongly influence the estimation of the background. Therefore, astronomers create geometric masks to remove the pixels affected by bright stars.
+
+Lastly, the filter is used to smooth out the image to help improve the detection of faint, extended objects, but may not be helpful very crowded data. The ```Filter Case``` tool parameter sets whether the filter file is needed or not.
+
+
+**Image:**
+- Preferrably lighter objects on a darker background.
+- Format: single channel, 2D array, .tiff or .fits.
+
+**Mask:**
+- True values, or numeric values greater than ```maskthresh``` tool parameter, are considered masked.
+- Format: single channel, 2D array, .tiff or .fits.
+
+**Filter kernel:**
+- 2D array.
+- Format: .txt, readable by
+```python
+import numpy
+numpy.loadtxt(filter_file)
+```
+The default kernel is:
+```markdown
+1 2 1
+2 4 2
+1 2 1
+```
+and can be stored as shown in a text file.
+
+> Checking the metadata of an image
+> Tip: You can use the tool {% tool [Show image info](toolshed.g2.bx.psu.edu/repos/imgteam/image_info/ip_imageinfo/5.7.1+galaxy1) %} to extract metadata from your image. The image metadata should have "SizeC = 3". It should not say "SizeC = 3 (effectively 1)", because that means that your image is stored in interleaved, not planar format.
+{: .comment}
+
+
+## Getting data from Zenodo
+> Data Upload
+>
+> 1. Create a new history for this tutorial. When you log in for the first time, an empty, unnamed history is created by default. You can simply rename it.
+>
+> {% snippet faqs/galaxy/histories_create_new.md %}
+>
+> 2. Import {% icon galaxy-upload %} the following dataset from [Zenodo](https://zenodo.org/records/15172302).
+>
+> ```
+> https://zenodo.org/records/15281843/files/images_and_seeds.zip
+> https://zenodo.org/records/15424465/files/image_and_seed.zip
+> ```
+>
+> - **Important:** Choose the type of data as `zip`.
+>
+> The upload might take a few minutes.
+>
+> {% snippet faqs/galaxy/datasets_import_via_link.md %}
+>
+> 3. {% tool [Unzip](toolshed.g2.bx.psu.edu/repos/imgteam/unzip/unzip/6.0+galaxy0) %} the image with the following parameters:
+> - {% icon param-file %} *"input_file"*: `images_and_seeds.zip`
+> - *"Extract single file"*: `Single file`
+> - *"Filepath"*: Choose which data you want to use:
+> - Cells: `images_and_seeds/cell_image-B2--W00026--P00001--Z00000--T00000--dapi.tiff`
+> - Trees: `images_and_seeds/tree_image_2019_DELA_5_423000_3601000.tiff`
+> - Galaxies: `sky_image_IMAGE.png`
+>
+> 4. Rename {% icon galaxy-pencil %} the resulting file as `image`.
+>
+> 5. Check that the datatype is correct.
+>
+> {% snippet faqs/galaxy/datasets_change_datatype.md datatype="datatypes" %}
+>
+> 6. {% tool [Unzip](toolshed.g2.bx.psu.edu/repos/imgteam/unzip/unzip/6.0+galaxy0) %} the seed with the following parameters:
+> - {% icon param-file %} *"input_file"*: `images_and_seeds.zip`
+> - *"Extract single file"*: `Single file`
+> - *"Filepath"*: Choose the seed image corresponding to the image you chose in the last step.
+> - Cells: `images_and_seeds/cell_seeds-B2--W00026--P00001--Z00000--T00000--dapi.tiff`
+> - Trees: `images_and_seeds/tree_seeds_2019_DELA_5_423000_3601000.tiff`
+> - Galaxies: `sky_image_SEED.png`
+>
+> 7. Rename {% icon galaxy-pencil %} the resulting file as `seeds`.
+{: .hands_on}
+
+
+## Generate an object mask from pixel intensity
+In case there should be empty regions without cells in the image, we wish to constrain the single Voronoi regions to roughly the area where a cell is.
+Therefore, we first smooth the image to reduce the influence of noise, and then apply a threshold on the smoothed image to get a binary mask.
+> Mask vs seeds
+> The process used to create a mask can also be used to make seeds, as in the
+> [Imaging introduction tutorial]({% link topics/imaging/tutorials/imaging-introduction/tutorial.md %}).
+{: .comment}
+
+> Task description
+> The image has three channels (red, green, blue). To generate a mask, we have to select a channel, for instance channel `0`.
+> 1. {% tool [Convert image format](toolshed.g2.bx.psu.edu/repos/imgteam/bfconvert/ip_convertimage/6.7.0+galaxy3) %} with the following parameters:
+> - {% icon param-file %} *"Input Image"*: `image`
+> - *"Extract series"*: `All series`
+> - *"Extract timepoint"*: `All timepoints`
+> - *"Extract channel"*: `Extract channel`
+> - *"Channel id"* `0`
+> - *"Extract z-slice"*: `All z-slices`
+> - *"Extract range"*: `All images`
+> - *"Extract crop"*: `Full image`
+> - *"Tile image"*: `No tiling`
+> - *"Pyramid image"*: `No Pyramid`
+>
+> 2. Rename the output to `single channel image`
+>
+>
+> 3. {% tool [Filter 2-D image](toolshed.g2.bx.psu.edu/repos/imgteam/2d_simple_filter/ip_filter_standard/1.12.0+galaxy1) %} with the following parameters:
+> - {% icon param-file %} *"Input Image"*: `single channel image`
+> - *"Filter type"*: `Gaussian`
+> - *"Sigma"*: `3`
+>
+> 4. Rename the output to `smoothed image`.
+>
+>
+> 5. {% tool [Threshold image](toolshed.g2.bx.psu.edu/repos/imgteam/2d_auto_threshold/ip_threshold/0.18.1+galaxy3) %} with the following parameters:
+> - {% icon param-file %} *"Input Image"*: `smoothed image`
+> - *"Thresholding method"*: `Manual`
+> - *"Threshold value"*: `3.0`. Note: This threshold value works well for the cell image, where the background has a very low intensity. For images with a brighter background, the threshold value will need to be adjusted.
+>
+> 6. Rename the output to `mask`.
+>
+{: .hands_on}
+
+> How many channels does my image have?
+> Note: If providing your own image, you can check how many channels your image has with the {% tool [Show image info](toolshed.g2.bx.psu.edu/repos/imgteam/image_info/ip_imageinfo/5.7.1+galaxy1) %} tool.
+> The number of channels is listed as, e.g., `SizeC = 3` for the cell image or `SizeC = 3 (effectively 1)` for the tree image.
+{: .comment}
+
+> The value of "Sigma" and the "Threshold value"
+> Note: Generating a robust mask is harder for images with more noise.
+> Since the tree image has more noise than the cell image, you may have to adjust the value of *"Sigma"* to achieve better results.
+> You may also have to adjust the *"Threshold value"* in the last step.
+{: .comment}
+
+
+>
+>
+> What is the purpose of the smoothing step?
+>
+> >
+> >
+> > The purpose of smoothing is to reduce noise.
+> > For seed generation, noise might lead to false seeds where there is no object.
+> > Smoothing also promotes connectedness within an object, where noise might make an object appear as two separate objects.
+> > For mask generation, the same principles apply.
+> >
+> {: .solution}
+>
+{: .question}
+
+
+## Perform Voronoi segmentation based on the seeds
+> Task description
+> We need to assign a unique label to each object in the seed image:
+> 1. {% tool [Convert binary image to label map](toolshed.g2.bx.psu.edu/repos/imgteam/binary2labelimage/ip_binary_to_labelimage/0.5+galaxy0) %} with the following parameters:
+> - {% icon param-file %} *"Binary Image"*: `seeds`
+> - *"Mode"*: `Connected component analysis`
+>
+> 2. Rename the output to `label map`.
+>
+> 1. {% tool [Compute Voronoi tessellation](toolshed.g2.bx.psu.edu/repos/imgteam/voronoi_tesselation/voronoi_tessellation/0.22.0+galaxy3) %}. We use the label map to perform Voronoi segmentation.
+> - {% icon param-file %} *"Input Image"*: `label map`
+>
+> 2. Rename the output to `tessellation`.
+>
+{: .hands_on}
+
+>
+>
+> How does the size of the seeds influence the Voronoi segmentation?
+>
+> >
+> >
+> > A Voronoi segmentation partition a plane into regions based on [proximity to each member of a given set of objects](https://en.wikipedia.org/wiki/Voronoi_diagram). The algorithm is the same irregardless of whether the seeds are single points or objects with a spatial extent, but the size of the seeds will certainly alter the segmentation in some way.
+> >
+> {: .solution}
+>
+{: .question}
+
+## Apply the mask and visualize the segmentation
+A Voronoi tessellation segments an image into non-overlapping segments that cover the entire image.
+This makes sure that segments do not overlap, but empty spaces between objects will be counted as part of the segment belonging to the nearest item.
+A more accurate segmentation can be achieved by using the mask to reduce the size of the Voronoi segments.
+This can be achieved with the following operation.
+> Task description
+> Combine the tessellation with the seeds and the mask to generate a segmentation that limits the expanse of each segment:
+> 1. {% tool [Process images using arithmetic expressions](toolshed.g2.bx.psu.edu/repos/imgteam/image_math/image_math/1.26.4+galaxy2) %} with the following parameters:
+> - *"Expression"*: `tessellation * (mask / 255) * (1 - seeds / 255)`
+> - In *"Input images"*:
+> - {% icon param-repeat %} *"Insert Input images"*
+> - {% icon param-file %} *"Input Image"*: `tessellation`
+> - *"Variable for representation of the image within the expression"*: `tessellation`
+> - {% icon param-repeat %} *"Insert Input images"*
+> - {% icon param-file %} *"Input Image"*: `seeds`
+> - *"Variable for representation of the image within the expression"*: `seeds`
+> - {% icon param-repeat %} *"Insert Input images"*
+> - {% icon param-file %} *"Input Image"*: `mask`
+> - *"Variable for representation of the image within the expression"*: `mask`
+>
+> 2. Rename the output to `masked segmentation`.
+>
+> 3. {% tool [Colorize label map](toolshed.g2.bx.psu.edu/repos/imgteam/colorize_labels/colorize_labels/3.2.1+galaxy3) %}.
+> - {% icon param-file %} *"Input Image"*: `masked segmentation`
+> - *"Radius of the neighborhood"*: `10` (works well for the cell image; may need adjustment for the tree image)
+> - *"Background label"*: `0`
+>
+> 4. Rename the output to `colorized label map`
+>
+> 5. {% tool [Convert single-channel to multi-channel image](toolshed.g2.bx.psu.edu/repos/imgteam/repeat_channels/repeat_channels/1.26.4+galaxy0) %} with:
+> - {% icon param-file %} *"Input Image"*: `single channel image`
+> - *"Number of channels"*: `3`
+>
+> 6. Rename the output to `multi channel image`
+>
+> 7. {% tool [Overlay images](toolshed.g2.bx.psu.edu/repos/imgteam/overlay_images/ip_overlay_images/0.0.4+galaxy4) %} with the following parameters to overlay the Voronoi segmentation on the original image:
+> - *"Type of the overlay"*: `Linear blending`
+> - {% icon param-file %} *"Image 1"*: `multi channel image`
+> - {% icon param-file %} *"Image 2"*: `colorized label map`
+> - *"Weight for blending"*: `0.5`
+>
+{: .hands_on}
+
+
+## Count objects and extract image features
+> Task description
+> 1. {% tool [Count objects in label map](toolshed.g2.bx.psu.edu/repos/imgteam/count_objects/ip_count_objects/0.0.5-2) %}.
+> - {% icon param-file %} *"Input Image"*: `tessellation`
+>
+> 1. {% tool [Extract image features](toolshed.g2.bx.psu.edu/repos/imgteam/2d_feature_extraction/ip_2d_feature_extraction/0.18.1+galaxy0) %} with the following parameters:
+> - {% icon param-file %} *"Label map"*: `tessellation`
+> - *"Use the intensity image to compute additional features"*: `Use intensity image`
+> - {% icon param-file %} *"Intensity Image"*: `single channel image`
+> - *"Select features to compute"*: `Select features`
+> - *"Available features"*:
+> - {% icon param-check %} `Label from the label map`
+> - {% icon param-check %} `Max Intensity`
+> - {% icon param-check %} `Mean Intensity`
+> - {% icon param-check %} `Minimum Intensity`
+> - {% icon param-check %} `Area`
+> - {% icon param-check %} `Major axis length`
+> - {% icon param-check %} `Minor axis length`
+>
+{: .hands_on}
+
+
+In this last step, we compute the max, min and mean intensity for each image segment, as well as the area and the major and minor axis lengths.
+Depending on the use case, the distribution of these extracted features could reveal different subgroups in the data.
+In this way, the features could be used in to categorize different types of trees, cells, or other items.
+We will now use a scatter plot to explore the data.
+
+
+## Visualize segment features with a scatter plot
+> Plot feature extraction results
+> 1. Click on the **Visualize** {% icon galaxy-barchart %} icon of the {% icon tool %} **Extract image features** output.
+> 2. Run **Scatter plot (NVD3)** with the following parameters:
+> - *"Provide a title"*: `Segment features`
+> - *"X-Axis label"*: `Major axis length`
+> - *"Y-Axis label"*: `Minor axis length`
+> - *"Column of data point labels"*: `Column 1`
+> - *"Values for x-axis"*: `Column 6`
+> - *"Values for y-axis"*: `Column 7`
+>
+> >
+> >
+> > Plot the major axis lengths together with the minor axis lengths. What do you observe?
+> >
+> > >
+> > > The major and minor axis lengths appear to be positively correlated, which is not surprising. It means that segments with a major axis that is longer than others typically have a longer minor axis too.
+> > {: .solution }
+> {: .question}
+{: .hands_on}
+
+
+# Conclusion
+This pipeline performs Voronoi segmentation and can be applied to datasets from any field as long as the input data satisfies the input data criteria.
+The steps in this tutorial are also available on Galaxy as a published workflow called [Voronoi segmentation](https://usegalaxy.eu/published/workflow?id=23030421cd9fcfb2).
From 35ae11cd9a046ce8350d70fd6eb39692df5ee79a Mon Sep 17 00:00:00 2001
From: Andrei-EPFL <55141699+Andrei-EPFL@users.noreply.github.com>
Date: Tue, 22 Jul 2025 18:42:16 +0200
Subject: [PATCH 02/48] Update tutorial.md
added images
---
.../astronomy-source-extractor/tutorial.md | 238 ++----------------
1 file changed, 14 insertions(+), 224 deletions(-)
diff --git a/topics/imaging/tutorials/astronomy-source-extractor/tutorial.md b/topics/imaging/tutorials/astronomy-source-extractor/tutorial.md
index 047120081a3a0f..c730f9f63e0edc 100644
--- a/topics/imaging/tutorials/astronomy-source-extractor/tutorial.md
+++ b/topics/imaging/tutorials/astronomy-source-extractor/tutorial.md
@@ -116,248 +116,38 @@ The default kernel is:
and can be stored as shown in a text file.
> Checking the metadata of an image
-> Tip: You can use the tool {% tool [Show image info](toolshed.g2.bx.psu.edu/repos/imgteam/image_info/ip_imageinfo/5.7.1+galaxy1) %} to extract metadata from your image. The image metadata should have "SizeC = 3". It should not say "SizeC = 3 (effectively 1)", because that means that your image is stored in interleaved, not planar format.
+> Tip 1: You can use the tool {% tool [Show image info](toolshed.g2.bx.psu.edu/repos/imgteam/image_info/ip_imageinfo/5.7.1+galaxy1) %} to extract metadata from your ```.tiff``` image. The image metadata should have
+> ``` RGB = false (1) Interleaved = false SizeZ = 1 SizeT = 1 SizeC = 1 ```.
+>
+> Tip 2: You can use the tool {% tool [astropy fitsinfo](toolshed.g2.bx.psu.edu/repos/astroteam/astropy_fitsinfo/astropy_fitsinfo/0.2.0+galaxy2) %} to extract metadata from your ```.fits``` file. The image should have ```Dimensions (N, M) ```, where ```N``` and ```M``` are the number of pixels around the 2D axes.
{: .comment}
-## Getting data from Zenodo
-> Data Upload
+## Getting data from {% tool [DESI Legacy Survey](toolshed.g2.bx.psu.edu/repos/astroteam/desi_legacy_survey_astro_tool/desi_legacy_survey_astro_tool/0.0.2+galaxy0) %}
+> Data Acquisition
>
> 1. Create a new history for this tutorial. When you log in for the first time, an empty, unnamed history is created by default. You can simply rename it.
>
> {% snippet faqs/galaxy/histories_create_new.md %}
>
-> 2. Import {% icon galaxy-upload %} the following dataset from [Zenodo](https://zenodo.org/records/15172302).
+> 2. Run the {% tool [DESI Legacy Survey](toolshed.g2.bx.psu.edu/repos/astroteam/desi_legacy_survey_astro_tool/desi_legacy_survey_astro_tool/0.0.2+galaxy0) %} tool.
>
> ```
> https://zenodo.org/records/15281843/files/images_and_seeds.zip
> https://zenodo.org/records/15424465/files/image_and_seed.zip
> ```
>
-> - **Important:** Choose the type of data as `zip`.
->
-> The upload might take a few minutes.
+> - **Important:** Choose the Data Product **Image**.
>
-> {% snippet faqs/galaxy/datasets_import_via_link.md %}
->
-> 3. {% tool [Unzip](toolshed.g2.bx.psu.edu/repos/imgteam/unzip/unzip/6.0+galaxy0) %} the image with the following parameters:
-> - {% icon param-file %} *"input_file"*: `images_and_seeds.zip`
-> - *"Extract single file"*: `Single file`
-> - *"Filepath"*: Choose which data you want to use:
-> - Cells: `images_and_seeds/cell_image-B2--W00026--P00001--Z00000--T00000--dapi.tiff`
-> - Trees: `images_and_seeds/tree_image_2019_DELA_5_423000_3601000.tiff`
-> - Galaxies: `sky_image_IMAGE.png`
->
-> 4. Rename {% icon galaxy-pencil %} the resulting file as `image`.
->
-> 5. Check that the datatype is correct.
->
-> {% snippet faqs/galaxy/datasets_change_datatype.md datatype="datatypes" %}
->
-> 6. {% tool [Unzip](toolshed.g2.bx.psu.edu/repos/imgteam/unzip/unzip/6.0+galaxy0) %} the seed with the following parameters:
-> - {% icon param-file %} *"input_file"*: `images_and_seeds.zip`
-> - *"Extract single file"*: `Single file`
-> - *"Filepath"*: Choose the seed image corresponding to the image you chose in the last step.
-> - Cells: `images_and_seeds/cell_seeds-B2--W00026--P00001--Z00000--T00000--dapi.tiff`
-> - Trees: `images_and_seeds/tree_seeds_2019_DELA_5_423000_3601000.tiff`
-> - Galaxies: `sky_image_SEED.png`
->
-> 7. Rename {% icon galaxy-pencil %} the resulting file as `seeds`.
+> The default values are used for this tutorial.
+> The history now contains the ```.fits``` file that is used as input for the source-extractor tool.
{: .hands_on}
-## Generate an object mask from pixel intensity
-In case there should be empty regions without cells in the image, we wish to constrain the single Voronoi regions to roughly the area where a cell is.
-Therefore, we first smooth the image to reduce the influence of noise, and then apply a threshold on the smoothed image to get a binary mask.
-> Mask vs seeds
-> The process used to create a mask can also be used to make seeds, as in the
-> [Imaging introduction tutorial]({% link topics/imaging/tutorials/imaging-introduction/tutorial.md %}).
-{: .comment}
+## Run the source-extractor tool
-> Task description
-> The image has three channels (red, green, blue). To generate a mask, we have to select a channel, for instance channel `0`.
-> 1. {% tool [Convert image format](toolshed.g2.bx.psu.edu/repos/imgteam/bfconvert/ip_convertimage/6.7.0+galaxy3) %} with the following parameters:
-> - {% icon param-file %} *"Input Image"*: `image`
-> - *"Extract series"*: `All series`
-> - *"Extract timepoint"*: `All timepoints`
-> - *"Extract channel"*: `Extract channel`
-> - *"Channel id"* `0`
-> - *"Extract z-slice"*: `All z-slices`
-> - *"Extract range"*: `All images`
-> - *"Extract crop"*: `Full image`
-> - *"Tile image"*: `No tiling`
-> - *"Pyramid image"*: `No Pyramid`
->
-> 2. Rename the output to `single channel image`
->
->
-> 3. {% tool [Filter 2-D image](toolshed.g2.bx.psu.edu/repos/imgteam/2d_simple_filter/ip_filter_standard/1.12.0+galaxy1) %} with the following parameters:
-> - {% icon param-file %} *"Input Image"*: `single channel image`
-> - *"Filter type"*: `Gaussian`
-> - *"Sigma"*: `3`
->
-> 4. Rename the output to `smoothed image`.
->
->
-> 5. {% tool [Threshold image](toolshed.g2.bx.psu.edu/repos/imgteam/2d_auto_threshold/ip_threshold/0.18.1+galaxy3) %} with the following parameters:
-> - {% icon param-file %} *"Input Image"*: `smoothed image`
-> - *"Thresholding method"*: `Manual`
-> - *"Threshold value"*: `3.0`. Note: This threshold value works well for the cell image, where the background has a very low intensity. For images with a brighter background, the threshold value will need to be adjusted.
->
-> 6. Rename the output to `mask`.
->
-{: .hands_on}
-
-> How many channels does my image have?
-> Note: If providing your own image, you can check how many channels your image has with the {% tool [Show image info](toolshed.g2.bx.psu.edu/repos/imgteam/image_info/ip_imageinfo/5.7.1+galaxy1) %} tool.
-> The number of channels is listed as, e.g., `SizeC = 3` for the cell image or `SizeC = 3 (effectively 1)` for the tree image.
-{: .comment}
-
-> The value of "Sigma" and the "Threshold value"
-> Note: Generating a robust mask is harder for images with more noise.
-> Since the tree image has more noise than the cell image, you may have to adjust the value of *"Sigma"* to achieve better results.
-> You may also have to adjust the *"Threshold value"* in the last step.
-{: .comment}
-
-
->
->
-> What is the purpose of the smoothing step?
->
-> >
-> >
-> > The purpose of smoothing is to reduce noise.
-> > For seed generation, noise might lead to false seeds where there is no object.
-> > Smoothing also promotes connectedness within an object, where noise might make an object appear as two separate objects.
-> > For mask generation, the same principles apply.
-> >
-> {: .solution}
->
-{: .question}
-
-
-## Perform Voronoi segmentation based on the seeds
-> Task description
-> We need to assign a unique label to each object in the seed image:
-> 1. {% tool [Convert binary image to label map](toolshed.g2.bx.psu.edu/repos/imgteam/binary2labelimage/ip_binary_to_labelimage/0.5+galaxy0) %} with the following parameters:
-> - {% icon param-file %} *"Binary Image"*: `seeds`
-> - *"Mode"*: `Connected component analysis`
->
-> 2. Rename the output to `label map`.
->
-> 1. {% tool [Compute Voronoi tessellation](toolshed.g2.bx.psu.edu/repos/imgteam/voronoi_tesselation/voronoi_tessellation/0.22.0+galaxy3) %}. We use the label map to perform Voronoi segmentation.
-> - {% icon param-file %} *"Input Image"*: `label map`
->
-> 2. Rename the output to `tessellation`.
->
-{: .hands_on}
-
->
->
-> How does the size of the seeds influence the Voronoi segmentation?
->
-> >
-> >
-> > A Voronoi segmentation partition a plane into regions based on [proximity to each member of a given set of objects](https://en.wikipedia.org/wiki/Voronoi_diagram). The algorithm is the same irregardless of whether the seeds are single points or objects with a spatial extent, but the size of the seeds will certainly alter the segmentation in some way.
-> >
-> {: .solution}
->
-{: .question}
-
-## Apply the mask and visualize the segmentation
-A Voronoi tessellation segments an image into non-overlapping segments that cover the entire image.
-This makes sure that segments do not overlap, but empty spaces between objects will be counted as part of the segment belonging to the nearest item.
-A more accurate segmentation can be achieved by using the mask to reduce the size of the Voronoi segments.
-This can be achieved with the following operation.
-> Task description
-> Combine the tessellation with the seeds and the mask to generate a segmentation that limits the expanse of each segment:
-> 1. {% tool [Process images using arithmetic expressions](toolshed.g2.bx.psu.edu/repos/imgteam/image_math/image_math/1.26.4+galaxy2) %} with the following parameters:
-> - *"Expression"*: `tessellation * (mask / 255) * (1 - seeds / 255)`
-> - In *"Input images"*:
-> - {% icon param-repeat %} *"Insert Input images"*
-> - {% icon param-file %} *"Input Image"*: `tessellation`
-> - *"Variable for representation of the image within the expression"*: `tessellation`
-> - {% icon param-repeat %} *"Insert Input images"*
-> - {% icon param-file %} *"Input Image"*: `seeds`
-> - *"Variable for representation of the image within the expression"*: `seeds`
-> - {% icon param-repeat %} *"Insert Input images"*
-> - {% icon param-file %} *"Input Image"*: `mask`
-> - *"Variable for representation of the image within the expression"*: `mask`
->
-> 2. Rename the output to `masked segmentation`.
->
-> 3. {% tool [Colorize label map](toolshed.g2.bx.psu.edu/repos/imgteam/colorize_labels/colorize_labels/3.2.1+galaxy3) %}.
-> - {% icon param-file %} *"Input Image"*: `masked segmentation`
-> - *"Radius of the neighborhood"*: `10` (works well for the cell image; may need adjustment for the tree image)
-> - *"Background label"*: `0`
->
-> 4. Rename the output to `colorized label map`
->
-> 5. {% tool [Convert single-channel to multi-channel image](toolshed.g2.bx.psu.edu/repos/imgteam/repeat_channels/repeat_channels/1.26.4+galaxy0) %} with:
-> - {% icon param-file %} *"Input Image"*: `single channel image`
-> - *"Number of channels"*: `3`
->
-> 6. Rename the output to `multi channel image`
->
-> 7. {% tool [Overlay images](toolshed.g2.bx.psu.edu/repos/imgteam/overlay_images/ip_overlay_images/0.0.4+galaxy4) %} with the following parameters to overlay the Voronoi segmentation on the original image:
-> - *"Type of the overlay"*: `Linear blending`
-> - {% icon param-file %} *"Image 1"*: `multi channel image`
-> - {% icon param-file %} *"Image 2"*: `colorized label map`
-> - *"Weight for blending"*: `0.5`
->
-{: .hands_on}
-
-
-## Count objects and extract image features
-> Task description
-> 1. {% tool [Count objects in label map](toolshed.g2.bx.psu.edu/repos/imgteam/count_objects/ip_count_objects/0.0.5-2) %}.
-> - {% icon param-file %} *"Input Image"*: `tessellation`
->
-> 1. {% tool [Extract image features](toolshed.g2.bx.psu.edu/repos/imgteam/2d_feature_extraction/ip_2d_feature_extraction/0.18.1+galaxy0) %} with the following parameters:
-> - {% icon param-file %} *"Label map"*: `tessellation`
-> - *"Use the intensity image to compute additional features"*: `Use intensity image`
-> - {% icon param-file %} *"Intensity Image"*: `single channel image`
-> - *"Select features to compute"*: `Select features`
-> - *"Available features"*:
-> - {% icon param-check %} `Label from the label map`
-> - {% icon param-check %} `Max Intensity`
-> - {% icon param-check %} `Mean Intensity`
-> - {% icon param-check %} `Minimum Intensity`
-> - {% icon param-check %} `Area`
-> - {% icon param-check %} `Major axis length`
-> - {% icon param-check %} `Minor axis length`
->
-{: .hands_on}
-
-
-In this last step, we compute the max, min and mean intensity for each image segment, as well as the area and the major and minor axis lengths.
-Depending on the use case, the distribution of these extracted features could reveal different subgroups in the data.
-In this way, the features could be used in to categorize different types of trees, cells, or other items.
-We will now use a scatter plot to explore the data.
-
-
-## Visualize segment features with a scatter plot
-> Plot feature extraction results
-> 1. Click on the **Visualize** {% icon galaxy-barchart %} icon of the {% icon tool %} **Extract image features** output.
-> 2. Run **Scatter plot (NVD3)** with the following parameters:
-> - *"Provide a title"*: `Segment features`
-> - *"X-Axis label"*: `Major axis length`
-> - *"Y-Axis label"*: `Minor axis length`
-> - *"Column of data point labels"*: `Column 1`
-> - *"Values for x-axis"*: `Column 6`
-> - *"Values for y-axis"*: `Column 7`
->
-> >
-> >
-> > Plot the major axis lengths together with the minor axis lengths. What do you observe?
-> >
-> > >
-> > > The major and minor axis lengths appear to be positively correlated, which is not surprising. It means that segments with a major axis that is longer than others typically have a longer minor axis too.
-> > {: .solution }
-> {: .question}
-{: .hands_on}
+Once the source-extractor tool is selected, you should select the input file named ``` DESI Legacy Survey -> Image fits ```. After it finished running, you can examine the picture of the data, background, background RMS and data with the selected sources bordered by red elipses. Finally, the table with detected sources and some measured parameters is available as well.
+
-# Conclusion
-This pipeline performs Voronoi segmentation and can be applied to datasets from any field as long as the input data satisfies the input data criteria.
-The steps in this tutorial are also available on Galaxy as a published workflow called [Voronoi segmentation](https://usegalaxy.eu/published/workflow?id=23030421cd9fcfb2).
+
From 4e2e334cc0086735dc61c1b86090931e067a3730 Mon Sep 17 00:00:00 2001
From: Andrei-EPFL <55141699+Andrei-EPFL@users.noreply.github.com>
Date: Tue, 22 Jul 2025 18:51:32 +0200
Subject: [PATCH 03/48] Create s
---
topics/imaging/images/astronomy-source-extractor/s | 1 +
1 file changed, 1 insertion(+)
create mode 100644 topics/imaging/images/astronomy-source-extractor/s
diff --git a/topics/imaging/images/astronomy-source-extractor/s b/topics/imaging/images/astronomy-source-extractor/s
new file mode 100644
index 00000000000000..8b137891791fe9
--- /dev/null
+++ b/topics/imaging/images/astronomy-source-extractor/s
@@ -0,0 +1 @@
+
From 762ef3130ac74ab10a2ed7b344f037653142984e Mon Sep 17 00:00:00 2001
From: Andrei-EPFL <55141699+Andrei-EPFL@users.noreply.github.com>
Date: Tue, 22 Jul 2025 18:51:44 +0200
Subject: [PATCH 04/48] Add files via upload
---
.../source-extractor_background_no_mask.png | Bin 0 -> 51974 bytes
.../source-extractor_data_sources_no_mask.png | Bin 0 -> 104404 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 topics/imaging/images/astronomy-source-extractor/source-extractor_background_no_mask.png
create mode 100644 topics/imaging/images/astronomy-source-extractor/source-extractor_data_sources_no_mask.png
diff --git a/topics/imaging/images/astronomy-source-extractor/source-extractor_background_no_mask.png b/topics/imaging/images/astronomy-source-extractor/source-extractor_background_no_mask.png
new file mode 100644
index 0000000000000000000000000000000000000000..9e839f164e91cd76e00461108aa382c075016a0f
GIT binary patch
literal 51974
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
literal 0
HcmV?d00001
diff --git a/topics/imaging/images/astronomy-source-extractor/source-extractor_data_sources_no_mask.png b/topics/imaging/images/astronomy-source-extractor/source-extractor_data_sources_no_mask.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4a40f40fd39bcd11d04aa676b78cb8bc779c552
GIT binary patch
literal 104404
zcmaI8WmFtnv^ClUNC*<#EkJM@cMmSXf_rdxYn+7O7Tg`0BzWWQZo%ClKya5JuQ=!2
zcki!n40=#a7rUzVUVF)$b9I=qqBI&Z5i$q_LX(w|_y_{M$N^sQNH2lE^iDMP0>AiO
zCAC~t9n4)ljGWCt3P!GuwhpegR>p7L&757V9PBxm*;tu5nBH2tx;nb>v#{9x|7S2e
zI9sroQ`dw8qr7&M(RKlW(2bs7aNk9WtUz!ekgUXeHAu!mi$?}YPwLat-avYxzHAfY
zA;V7OI|MldYKb?(UGu`I!j9b6J-s5U^T`K)7k(eObY6XaxSU5Yf&a~_jfI5s?Hj@%
zW`au+cTw2GUlXV_SIzXax{#1n-AegvvpKY>a}s#3By_1(1Kn?Y6C{?aOoxLUL@8hI
z3=a73O`bNNT7cfB&D8is=y5{ykqTRz2ax&wu_^EVrLQ4o>}f6yQ8l+`<5c
ze-G(k;k2_a<|yzY)-U!Z=@=OUp;ire(*F*SH=DoDucNEW=C~$WujfN-@tz^4NGV&&
z*VnhK=f824l{0vqUbwlrEwLj02uMmygaZj*{!r@JIp<5OJvFAo9J0=BmIzN$o#gzn
zuXgdl^jL^6t4t&fN-f>g+n~jibj2ao%X7w%u%oB~saTNGpH;}l9dDF@4)IGD^&yYN
zy}#1_v`y_CjT=qN$VlR;N7I~&%06p9y%RP#M=Vp9i54UVdA!|;_ach~XLR{Y6BP*`
zV3SmCb`ilI(cUaoLVsn^%}rYupfT
zw>gX>$DR$$gjsGiRU}Rnk7oU=Hba{2+r3k
zcjs9rwnno2{H`9kW5U2Ff<@@uws@@oTv8gZZ0FxR#mF1$^T^isJrbt#qISH`lc)n_1(*)6LxruW>y+RR4Eh
zh&>M4bK&4m=FoU@CXdHzQiQ&I(GWc!c_A^WTLPwR4Y~Czcb0_ukX9v16t$3MlA$+#2j3mo=b9$bMlDZIE52>2!DcMO_6sp34AnZHNM%cC$kr%c
zi(1_#CB50vH25rl*X6J?)^}yph2ho!((l`?vN$coWjwi^E#mm<4tA2=+nxK9P@}!6A7ZzaM-;~f;fl*u6IfvUDla