Skip to content

Streamlined pipeline for cal-val#967

Open
danielmwatkins wants to merge 124 commits into
mainfrom
feat_new_pipeline
Open

Streamlined pipeline for cal-val#967
danielmwatkins wants to merge 124 commits into
mainfrom
feat_new_pipeline

Conversation

@danielmwatkins

@danielmwatkins danielmwatkins commented May 11, 2026

Copy link
Copy Markdown
Member

The FSPipeline is a new pipeline using both semantic and object-based segmentation approaches. It includes two main methods for producing binary sea ice floe masks: the $k$-means method, used in the prior versions, and an adaptive threshold method, similar to what is used in the ebseg method.

The pipeline produces a cloud mask using the Watkins2026 method, an ice/water mask based on the IceDetectionBrightnessMidpoint method, and uses an explicit Preprocess functor to perform the sharpening and equalization steps.

After the binarization, the images are lightly cleaned and smoothed using morphological operations and conditional hole filling. Holes in the binary mask that either contain sea ice or cloud are filled up to a set size.

Next, we use a new floe splitting procedure, dist_morph_split, which applies a series of thresholds to the distance function up to a maximum depth, then labels distinct objects and re-grows them.

We include a dedicated floe filter function which clears objects which are (a) outside the specified size range, (b) intersect the coastal buffer mask, (c) are not circular enough, or (d) are too dark in Band 2 of the falsecolor image. The settings for floe size, color, and circularity are specified separately based on the object-average cloud fraction, so cloud-covered objects can be filtered more strictly than clear-sky if desired.

Finally, we use a merge_floes function to compare the results of the two segmentation methods. This step resolves collisions between the two candidate floe labels. For each floe, we identify a "relevant set" based on the location of object centroids and the degree of overlap. Then, if the objects agree within a distance and area based threshold, the more circular object is taken. For all other objects, collisions are resolved based on the object prominence, calculated as the difference between the object mean brightness and the brightness of the surroundings. This calculation is accelerated by using the expand labels function -- hence, if floes are tightly packed, the expanded boundary area may be truncated compared to an object that is well-separated from neighboring floes.

@cpaniaguam

Copy link
Copy Markdown
Member

@danielmwatkins Sorry, I didn't mean to check the approve box. I meant to "request changes."

@cpaniaguam
cpaniaguam dismissed their stale review July 16, 2026 20:28

Accidental approval

danielmwatkins and others added 27 commits July 17, 2026 09:21
Co-authored-by: Carlos Paniagua <cpaniaguam@gmail.com>
Co-authored-by: Carlos Paniagua <cpaniaguam@gmail.com>
Co-authored-by: Carlos Paniagua <cpaniaguam@gmail.com>
Co-authored-by: Carlos Paniagua <cpaniaguam@gmail.com>
Co-authored-by: Carlos Paniagua <cpaniaguam@gmail.com>
Co-authored-by: Carlos Paniagua <cpaniaguam@gmail.com>
Co-authored-by: Carlos Paniagua <cpaniaguam@gmail.com>
…ilter

Refactor default filter setup in FilterFunction
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants