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/array.hpp"
21
22namespace hmap
23{
24
35
56Array area_remove(const Array &array,
57 float threshold_size,
58 float background_value = 0.f,
59 float fill_value = 0.f);
60
74Array border(const Array &array, int ir);
75
89Array closing(const Array &array, int ir);
90
102Array closing_by_reconstruction(const Array &array,
103 int ir,
104 float k_smooth_max = 0.f);
105
123Array contour_smoothing(const Array &array,
124 int ir,
125 float transition_ratio = 0.1f);
126
141Array dilation(const Array &array, int ir);
142
161Array dilation_expand_border_only(const Array &array, int ir);
162
163Array dilation_expand_min_value_border_only(const Array &array);
164
189Array distance_transform(const Array &array,
190 bool return_squared_distance = false);
191
214Array distance_transform_approx(const Array &array,
215 bool return_squared_distance = false);
216
238Array distance_transform_manhattan(const Array &array,
239 bool return_squared_distance = false);
240
255Array distance_transform_with_closest(const Array &array,
256 Mat<glm::ivec2> &closest,
257 bool return_squared_distance = false);
258
275Array erosion(const Array &array, int ir);
276
292void flood_fill(Array &array,
293 int i,
294 int j,
295 float fill_value = 1.f,
296 float background_value = 0.f);
297
312Array morphological_black_hat(const Array &array, int ir);
313
328Array morphological_gradient(const Array &array, int ir);
329
349Array morphological_laplacian(const Array &array, int ir);
350
365Array morphological_top_hat(const Array &array, int ir);
366
381Array opening(const Array &array, int ir);
382
394Array opening_by_reconstruction(const Array &array,
395 int ir,
396 float k_smooth_min = 0.f);
397
417Array reconstruction_by_dilation(const Array &marker,
418 const Array &mask,
419 int ir,
420 float k_smooth_min = 0.f);
421
441Array reconstruction_by_erosion(const Array &marker,
442 const Array &mask,
443 int ir,
444 float k_smooth_max = 0.f);
445
482Array relative_distance_from_skeleton(const Array &array,
483 int ir_search,
484 bool zero_at_borders = true,
485 int ir_erosion = 1);
486
508Array signed_curvature_from_distance(const Array &array, int prefilter_ir = 0);
509
521Array signed_distance_transform(const Array &array, int prefilter_ir = 0);
522
548Array skeleton(const Array &array, bool zero_at_borders = true);
549
550} // namespace hmap
551
552namespace hmap::gpu
553{
554
556Array border(const Array &array, int ir);
557
559Array closing(const Array &array, int ir);
560
562Array closing_by_reconstruction(const Array &array,
563 int ir,
564 float k_smooth_max = 0.f);
565
567Array contour_smoothing(const Array &array,
568 int ir,
569 float transition_ratio = 0.1f);
570
572Array dilation(const Array &array, int ir);
573
575Array dilation_expand_border_only(const Array &array, int ir);
576
599Array distance_transform_jfa(const Array &array,
600 bool return_squared_distance = false);
601
603Array erosion(const Array &array, int ir);
604
606Array morphological_black_hat(const Array &array, int ir);
607
609Array morphological_gradient(const Array &array, int ir);
610
612Array morphological_laplacian(const Array &array, int ir);
613
615Array morphological_top_hat(const Array &array, int ir);
616
618Array opening(const Array &array, int ir);
619
621Array opening_by_reconstruction(const Array &array,
622 int ir,
623 float k_smooth_min = 0.f);
624
626Array reconstruction_by_dilation(const Array &marker,
627 const Array &mask,
628 int ir,
629 float k_smooth_min = 0.f);
630
632Array reconstruction_by_erosion(const Array &marker,
633 const Array &mask,
634 int ir,
635 float k_smooth_max = 0.f);
636
638Array relative_distance_from_skeleton(const Array &array,
639 int ir_search,
640 bool zero_at_borders = true,
641 int ir_erosion = 1);
642
644Array signed_curvature_from_distance(const Array &array, int prefilter_ir = 0);
645
647Array signed_distance_transform(const Array &array, int prefilter_ir = 0);
648
650Array skeleton(const Array &array, bool zero_at_borders = true);
651
652} // namespace hmap::gpu
653
654// ==========================================================================
655// Wrapper
656// ==========================================================================
657
658namespace hmap
659{
660
664// clang-format off
682// clang-format on
683
696Array morphological_operators(const Array &array,
697 int ir,
698 MorphologyOperation operation);
699
700} // namespace hmap
701
702namespace hmap::gpu
703{
704
706Array morphological_operators(const Array &array,
707 int ir,
708 MorphologyOperation operation);
709
710} // namespace hmap::gpu
Declaration of the Array class for 2D floating-point arrays with various mathematical operations and ...
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:97
Array distance_transform_jfa(const Array &array, bool return_squared_distance=false)
Return the Euclidean distance transform.
Definition distance_transform_jfa.cpp:13
Array border(const Array &array, int ir)
See hmap::border.
Definition morphology_gpu.cpp:15
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:103
Array closing_by_reconstruction(const Array &array, int ir, float k_smooth_max=0.f)
See hmap::closing_by_reconstruction.
Definition morphology_gpu.cpp:25
Array skeleton(const Array &array, bool zero_at_borders=true)
See hmap::skeleton.
Definition morphology_gpu.cpp:186
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:159
Array morphological_top_hat(const Array &array, int ir)
See hmap::morphological_top_hat.
Definition morphology_gpu.cpp:87
Array morphological_black_hat(const Array &array, int ir)
See hmap::morphological_black_hat.
Definition morphology_gpu.cpp:69
Array closing(const Array &array, int ir)
See hmap::closing.
Definition morphology_gpu.cpp:20
Array signed_distance_transform(const Array &array, int prefilter_ir=0)
See hmap::signed_distance_transform.
Definition signed_curvature_from_distance.cpp:44
Array contour_smoothing(const Array &array, int ir, float transition_ratio=0.1f)
See hmap::contour_smoothing.
Definition morphology_gpu.cpp:31
Array dilation_expand_border_only(const Array &array, int ir)
See hmap::dilation_expand_border_only.
Definition morphology_gpu.cpp:49
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:131
Array opening(const Array &array, int ir)
See hmap::opening.
Definition morphology_gpu.cpp:92
Array dilation(const Array &array, int ir)
See hmap::dilation.
Definition morphology_gpu.cpp:44
Array erosion(const Array &array, int ir)
See hmap::erosion.
Definition morphology_gpu.cpp:64
Array morphological_laplacian(const Array &array, int ir)
See hmap::morphological_laplacian.
Definition morphology_gpu.cpp:80
Array morphological_operators(const Array &array, int ir, MorphologyOperation operation)
See hmap::morphological_operators.
Definition wrapper.cpp:59
Array morphological_gradient(const Array &array, int ir)
See hmap::morphological_gradient.
Definition morphology_gpu.cpp:74
Array signed_curvature_from_distance(const Array &array, int prefilter_ir=0)
See hmap::signed_curvature_from_distance.
Definition signed_curvature_from_distance.cpp:38
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:185
Array skeleton(const Array &array, bool zero_at_borders=true)
Computes the skeleton of a binary image using the Zhang-Suen skeletonization algorithm.
Definition morphology.cpp:354
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:180
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:197
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:12
Array contour_smoothing(const Array &array, int ir, float transition_ratio=0.1f)
Smooth contour boundaries of segmented regions.
Definition morphology.cpp:65
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:83
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:241
MorphologyOperation
Types of base morphology operators.
Definition morphology.hpp:666
@ MO_EROSION
Shrink structures (local minimum).
Definition morphology.hpp:670
@ MO_LAPLACIAN
Second-order operator highlighting ridges and.
Definition morphology.hpp:677
@ MO_GRADIENT
Difference between dilation and erosion (edge.
Definition morphology.hpp:675
@ MO_OPENING
Erosion followed by dilation (removes small objects).
Definition morphology.hpp:671
@ MO_CLOSING
Dilation followed by erosion (fills small holes).
Definition morphology.hpp:668
@ MO_BORDER
Extract border of structures.
Definition morphology.hpp:667
@ MO_BLACK_HAT
Difference between closing and input (dark features).
Definition morphology.hpp:672
@ MO_OPENING_BY_RECONSTRUCTION
Definition morphology.hpp:680
@ MO_TOP_HAT
Difference between input and opening (bright.
Definition morphology.hpp:673
@ MO_DILATION
Expand structures (local maximum).
Definition morphology.hpp:669
@ MO_CLOSING_BY_RECONSTRUCTION
Definition morphology.hpp:679
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:207
Array distance_transform(const Array &array, bool return_squared_distance=false)
Return the Euclidean distance transform.
Definition distance_transform.cpp:23
Array dilation_expand_min_value_border_only(const Array &array)
Definition morphology.cpp:98
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:213
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:303
Array closing(const Array &array, int ir)
Apply a closing algorithm to the input array using a square structure.
Definition morphology.cpp:54
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:102
Array erosion(const Array &array, int ir)
Apply an erosion algorithm to the input array using a square structure.
Definition morphology.cpp:128
DistanceTransformType
Enumeration for different types of distance transforms.
Definition morphology.hpp:29
@ DT_EXACT
Exact distance transform.
Definition morphology.hpp:30
@ DT_APPROX
Approximate distance transform.
Definition morphology.hpp:31
@ DT_JFA
Approximate (JFA) distance transform.
Definition morphology.hpp:33
@ DT_MANHATTAN
Manhattan distance transform.
Definition morphology.hpp:32
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:59
Array opening(const Array &array, int ir)
Apply an opening algorithm to the input array using a square structure.
Definition morphology.cpp:202
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:14
Array dilation(const Array &array, int ir)
Apply a dilation algorithm to the input array using a square structure.
Definition morphology.cpp:78
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:20
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:17
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:11
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:54
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:133
Array morphological_laplacian(const Array &array, int ir)
Apply a morphological Laplacian operator to the input array using a square structure.
Definition morphology.cpp:191
Array border(const Array &array, int ir)
Apply a border algorithm to the input array using a square structure.
Definition morphology.cpp:49