HighMap library (C++)
Loading...
Searching...
No Matches
morphology.hpp
Go to the documentation of this file.
1/* Copyright (c) 2023 Otto Link. Distributed under the terms of the GNU General
2 Public License. The full license is in the file LICENSE, distributed with
3 this software. */
4
18#pragma once
19
20#include "highmap/algebra.hpp"
21#include "highmap/array.hpp"
22
23namespace hmap
24{
25
36
57Array area_remove(const Array &array,
58 float threshold_size,
59 float background_value = 0.f,
60 float fill_value = 0.f);
61
75Array border(const Array &array, int ir);
76
90Array closing(const Array &array, int ir);
91
103Array closing_by_reconstruction(const Array &array,
104 int ir,
105 float k_smooth_max = 0.f);
106
124Array contour_smoothing(const Array &array,
125 int ir,
126 float transition_ratio = 0.1f);
127
142Array dilation(const Array &array, int ir);
143
162Array dilation_expand_border_only(const Array &array, int ir);
163
164Array dilation_expand_min_value_border_only(const Array &array);
165
190Array distance_transform(const Array &array,
191 bool return_squared_distance = false);
192
215Array distance_transform_approx(const Array &array,
216 bool return_squared_distance = false);
217
239Array distance_transform_manhattan(const Array &array,
240 bool return_squared_distance = false);
241
256Array distance_transform_with_closest(const Array &array,
257 Mat<glm::ivec2> &closest,
258 bool return_squared_distance = false);
259
276Array erosion(const Array &array, int ir);
277
293void flood_fill(Array &array,
294 int i,
295 int j,
296 float fill_value = 1.f,
297 float background_value = 0.f);
298
313Array morphological_black_hat(const Array &array, int ir);
314
329Array morphological_gradient(const Array &array, int ir);
330
350Array morphological_laplacian(const Array &array, int ir);
351
366Array morphological_top_hat(const Array &array, int ir);
367
382Array opening(const Array &array, int ir);
383
395Array opening_by_reconstruction(const Array &array,
396 int ir,
397 float k_smooth_min = 0.f);
398
418Array reconstruction_by_dilation(const Array &marker,
419 const Array &mask,
420 int ir,
421 float k_smooth_min = 0.f);
422
442Array reconstruction_by_erosion(const Array &marker,
443 const Array &mask,
444 int ir,
445 float k_smooth_max = 0.f);
446
483Array relative_distance_from_skeleton(const Array &array,
484 int ir_search,
485 bool zero_at_borders = true,
486 int ir_erosion = 1);
487
488Array relative_distance_from_skeleton(const Array &array,
489 const Array &skeleton,
490 int ir_search,
491 int ir_erosion = 1);
492
511Array skeleton(const Array &array,
512 const Array &skeleton,
513 bool zero_at_borders = true);
514
533Array remove_endpoints(const Array &array,
534 int iterations = 1,
535 float background_value = 0.f);
536
558Array signed_curvature_from_distance(const Array &array, int prefilter_ir = 0);
559
571Array signed_distance_transform(const Array &array, int prefilter_ir = 0);
572
598Array skeleton(const Array &array, bool zero_at_borders = true);
599
600} // namespace hmap
601
602namespace hmap::gpu
603{
604
606Array border(const Array &array, int ir);
607
609Array closing(const Array &array, int ir);
610
612Array closing_by_reconstruction(const Array &array,
613 int ir,
614 float k_smooth_max = 0.f);
615
617Array contour_smoothing(const Array &array,
618 int ir,
619 float transition_ratio = 0.1f);
620
622Array dilation(const Array &array, int ir);
623
625Array dilation_expand_border_only(const Array &array, int ir);
626
649Array distance_transform_jfa(const Array &array,
650 bool return_squared_distance = false);
651
653Array erosion(const Array &array, int ir);
654
656Array morphological_black_hat(const Array &array, int ir);
657
659Array morphological_gradient(const Array &array, int ir);
660
662Array morphological_laplacian(const Array &array, int ir);
663
665Array morphological_top_hat(const Array &array, int ir);
666
668Array opening(const Array &array, int ir);
669
671Array opening_by_reconstruction(const Array &array,
672 int ir,
673 float k_smooth_min = 0.f);
674
676Array reconstruction_by_dilation(const Array &marker,
677 const Array &mask,
678 int ir,
679 float k_smooth_min = 0.f);
680
682Array reconstruction_by_erosion(const Array &marker,
683 const Array &mask,
684 int ir,
685 float k_smooth_max = 0.f);
686
688Array relative_distance_from_skeleton(const Array &array,
689 int ir_search,
690 bool zero_at_borders = true,
691 int ir_erosion = 1);
692
694Array relative_distance_from_skeleton(const Array &array,
695 const Array &skeleton,
696 int ir_search,
697 int ir_erosion = 1);
698
700Array signed_curvature_from_distance(const Array &array, int prefilter_ir = 0);
701
703Array signed_distance_transform(const Array &array, int prefilter_ir = 0);
704
706Array skeleton(const Array &array, bool zero_at_borders = true);
707
708} // namespace hmap::gpu
709
710// ==========================================================================
711// Wrapper
712// ==========================================================================
713
714namespace hmap
715{
716
720// clang-format off
738// clang-format on
739
752Array morphological_operators(const Array &array,
753 int ir,
754 MorphologyOperation operation);
755
756} // namespace hmap
757
758namespace hmap::gpu
759{
760
762Array morphological_operators(const Array &array,
763 int ir,
764 MorphologyOperation operation);
765
766} // namespace hmap::gpu
Header file defining basic vector and matrix manipulation classes.
Declaration of the Array class for 2D floating-point arrays with various mathematical operations and ...
Array class, helper to manipulate 2D float array with "(i, j)" indexing.
Definition array.hpp:32
Definition blending.hpp:186
Array opening_by_reconstruction(const Array &array, int ir, float k_smooth_min=0.f)
See hmap::opening_by_reconstruction.
Definition morphology_gpu.cpp:105
Array distance_transform_jfa(const Array &array, bool return_squared_distance=false)
Return the Euclidean distance transform.
Definition distance_transform_jfa.cpp:16
Array border(const Array &array, int ir)
See hmap::border.
Definition morphology_gpu.cpp:22
Array reconstruction_by_dilation(const Array &marker, const Array &mask, int ir, float k_smooth_min=0.f)
See hmap::reconstruction_by_dilation.
Definition morphology_gpu.cpp:111
Array closing_by_reconstruction(const Array &array, int ir, float k_smooth_max=0.f)
See hmap::closing_by_reconstruction.
Definition morphology_gpu.cpp:32
Array skeleton(const Array &array, bool zero_at_borders=true)
See hmap::skeleton.
Definition morphology_gpu.cpp:195
Array relative_distance_from_skeleton(const Array &array, int ir_search, bool zero_at_borders=true, int ir_erosion=1)
See hmap::relative_distance_from_skeleton.
Definition morphology_gpu.cpp:186
Array morphological_top_hat(const Array &array, int ir)
See hmap::morphological_top_hat.
Definition morphology_gpu.cpp:95
Array morphological_black_hat(const Array &array, int ir)
See hmap::morphological_black_hat.
Definition morphology_gpu.cpp:77
Array closing(const Array &array, int ir)
See hmap::closing.
Definition morphology_gpu.cpp:27
Array signed_distance_transform(const Array &array, int prefilter_ir=0)
See hmap::signed_distance_transform.
Definition signed_curvature_from_distance.cpp:43
Array contour_smoothing(const Array &array, int ir, float transition_ratio=0.1f)
See hmap::contour_smoothing.
Definition morphology_gpu.cpp:38
Array dilation_expand_border_only(const Array &array, int ir)
See hmap::dilation_expand_border_only.
Definition morphology_gpu.cpp:56
Array reconstruction_by_erosion(const Array &marker, const Array &mask, int ir, float k_smooth_max=0.f)
See hmap::reconstruction_by_erosion.
Definition morphology_gpu.cpp:136
Array opening(const Array &array, int ir)
See hmap::opening.
Definition morphology_gpu.cpp:100
Array dilation(const Array &array, int ir)
See hmap::dilation.
Definition morphology_gpu.cpp:51
Array erosion(const Array &array, int ir)
See hmap::erosion.
Definition morphology_gpu.cpp:72
Array morphological_laplacian(const Array &array, int ir)
See hmap::morphological_laplacian.
Definition morphology_gpu.cpp:88
Array morphological_operators(const Array &array, int ir, MorphologyOperation operation)
See hmap::morphological_operators.
Definition wrapper.cpp:58
Array morphological_gradient(const Array &array, int ir)
See hmap::morphological_gradient.
Definition morphology_gpu.cpp:82
Array signed_curvature_from_distance(const Array &array, int prefilter_ir=0)
See hmap::signed_curvature_from_distance.
Definition signed_curvature_from_distance.cpp:37
Definition algebra.hpp:23
Array morphological_gradient(const Array &array, int ir)
Apply a morphological gradient algorithm to the input array using a square structure.
Definition morphology.cpp:196
Array morphological_black_hat(const Array &array, int ir)
Apply a morphological black hat algorithm to the input array using a square structure.
Definition morphology.cpp:191
Array morphological_top_hat(const Array &array, int ir)
Apply a morphological top hat algorithm to the input array using a square structure.
Definition morphology.cpp:208
Array distance_transform_approx(const Array &array, bool return_squared_distance=false)
Calculates an approximate distance transform of the input array.
Definition distance_transform_approx.cpp:13
Array contour_smoothing(const Array &array, int ir, float transition_ratio=0.1f)
Smooth contour boundaries of segmented regions.
Definition morphology.cpp:72
Array dilation_expand_border_only(const Array &array, int ir)
Expand non-zero regions of an array by morphological dilation, while preserving the original non-zero...
Definition morphology.cpp:90
Array reconstruction_by_erosion(const Array &marker, const Array &mask, int ir, float k_smooth_max=0.f)
Perform morphological reconstruction by erosion.
Definition morphology.cpp:278
MorphologyOperation
Types of base morphology operators.
Definition morphology.hpp:722
@ MO_EROSION
Shrink structures (local minimum).
Definition morphology.hpp:726
@ MO_LAPLACIAN
Second-order operator highlighting ridges and.
Definition morphology.hpp:733
@ MO_GRADIENT
Difference between dilation and erosion (edge.
Definition morphology.hpp:731
@ MO_OPENING
Erosion followed by dilation (removes small objects).
Definition morphology.hpp:727
@ MO_CLOSING
Dilation followed by erosion (fills small holes).
Definition morphology.hpp:724
@ MO_BORDER
Extract border of structures.
Definition morphology.hpp:723
@ MO_BLACK_HAT
Difference between closing and input (dark features).
Definition morphology.hpp:728
@ MO_OPENING_BY_RECONSTRUCTION
Definition morphology.hpp:736
@ MO_TOP_HAT
Difference between input and opening (bright.
Definition morphology.hpp:729
@ MO_DILATION
Expand structures (local maximum).
Definition morphology.hpp:725
@ MO_CLOSING_BY_RECONSTRUCTION
Definition morphology.hpp:735
Array opening_by_reconstruction(const Array &array, int ir, float k_smooth_min=0.f)
Apply opening by reconstruction to the input array.
Definition morphology.cpp:218
Array distance_transform(const Array &array, bool return_squared_distance=false)
Return the Euclidean distance transform.
Definition distance_transform.cpp:24
Array skeleton(const Array &array, const Array &skeleton, bool zero_at_borders=true)
Computes a skeletonized version of an array.
Array dilation_expand_min_value_border_only(const Array &array)
Definition morphology.cpp:106
Array reconstruction_by_dilation(const Array &marker, const Array &mask, int ir, float k_smooth_min=0.f)
Perform morphological reconstruction by dilation.
Definition morphology.cpp:253
Array relative_distance_from_skeleton(const Array &array, int ir_search, bool zero_at_borders=true, int ir_erosion=1)
Computes the relative distance of each non-zero cell in a binary array from the skeleton and border.
Definition morphology.cpp:413
Array remove_endpoints(const Array &array, int iterations=1, float background_value=0.f)
Removes endpoint-like pixels from a binary/weighted array.
Definition morphology.cpp:422
Array closing(const Array &array, int ir)
Apply a closing algorithm to the input array using a square structure.
Definition morphology.cpp:61
Array distance_transform_with_closest(const Array &array, Mat< glm::ivec2 > &closest, bool return_squared_distance=false)
Return the Euclidean distance transform.
Definition distance_transform.cpp:103
Array erosion(const Array &array, int ir)
Apply an erosion algorithm to the input array using a square structure.
Definition morphology.cpp:145
DistanceTransformType
Enumeration for different types of distance transforms.
Definition morphology.hpp:30
@ DT_EXACT
Exact distance transform.
Definition morphology.hpp:31
@ DT_APPROX
Approximate distance transform.
Definition morphology.hpp:32
@ DT_JFA
Approximate (JFA) distance transform.
Definition morphology.hpp:34
@ DT_MANHATTAN
Manhattan distance transform.
Definition morphology.hpp:33
Array closing_by_reconstruction(const Array &array, int ir, float k_smooth_max=0.f)
Apply closing by reconstruction to the input array.
Definition morphology.cpp:66
Array opening(const Array &array, int ir)
Apply an opening algorithm to the input array using a square structure.
Definition morphology.cpp:213
Array signed_curvature_from_distance(const Array &array, int prefilter_ir=0)
Computes the signed curvature of the distance transform.
Definition signed_curvature_from_distance.cpp:13
Array dilation(const Array &array, int ir)
Apply a dilation algorithm to the input array using a square structure.
Definition morphology.cpp:85
Array signed_distance_transform(const Array &array, int prefilter_ir=0)
Computes a signed distance transform using curvature sign.
Definition signed_curvature_from_distance.cpp:19
Array area_remove(const Array &array, float threshold_size, float background_value=0.f, float fill_value=0.f)
Remove connected components smaller than a given size threshold.
Definition morphology.cpp:24
Array morphological_operators(const Array &array, int ir, MorphologyOperation operation)
Apply a morphological operation to the input array using a square kernel.
Definition wrapper.cpp:10
Array distance_transform_manhattan(const Array &array, bool return_squared_distance=false)
Calculates the Manhattan distance transform of an array.
Definition distance_transform_approx.cpp:55
void flood_fill(Array &array, int i, int j, float fill_value=1.f, float background_value=0.f)
Apply a flood fill algorithm to the input array.
Definition morphology.cpp:150
Array morphological_laplacian(const Array &array, int ir)
Apply a morphological Laplacian operator to the input array using a square structure.
Definition morphology.cpp:202
Array border(const Array &array, int ir)
Apply a border algorithm to the input array using a square structure.
Definition morphology.cpp:56