CGAL 6.2 - Shape Detection

Loading...
Searching...
No Matches
List of all members
CGAL::Shape_detection::Segment_set::Least_squares_line_fit_region< GeomTraits, Item_, SegmentMap > Class Template Reference
Reference Manual » Region Growing » Segment Set

`#include <CGAL/Shape_detection/Region_growing/Segment_set/Least_squares_line_fit_region.h>`

## Definition

template<typename GeomTraits, typename Item_, typename SegmentMap>
class CGAL::Shape_detection::Segment_set::Least_squares_line_fit_region< GeomTraits, Item_, SegmentMap >

Region type based on the quality of the least squares line fit applied to a segment set.

This class fits a line, using PCA, to chunks of 2D or 3D segments and controls the quality of this fit. If all quality conditions are satisfied, the chunk is accepted as a valid region, otherwise rejected.

Template Parameters

  GeomTraits | a model of `Kernel`
  Item_ | a descriptor representing a given segment. Must be a model of `Hashable`.
  SegmentMap | a model of `ReadablePropertyMap` whose key type is `Item` and value type is `GeomTraits::Segment_2` or `GeomTraits::Segment_3`

Is model of
  `RegionType`

Examples
  Shape_detection/region_growing_lines_on_segment_set.cpp.

## Types
using | FT = typename GeomTraits::FT
| Number type.
using | Item = Item_
| Item type.
using | Region = std::vector< Item >
using | Primitive = typename GeomTraits::Line_2 or typename GeomTraits::Line_3
| Primitive type depends on the dimension of the input data.
using | Region_unordered_map = std::unordered_map< Item, std::size_t, internal::hash_item< Item > >
| Region map.
using | Region_index_map = boost::associative_property_map< Region_unordered_map >

## Initialization
template<typename NamedParameters = parameters::Default_named_parameters>
| Least_squares_line_fit_region (const NamedParameters &np=parameters::default_values())
| initializes all internal data structures.

## Access
Region_index_map | region_index_map ()
| implements `RegionType::region_index_map()`.
Primitive | primitive () const
| implements `RegionType::primitive()`.
bool | is_part_of_region (const Item query, const Region &) const
| implements `RegionType::is_part_of_region()`.
bool | is_valid_region (const Region &region) const
| implements `RegionType::is_valid_region()`.
bool | update (const Region &region)
| implements `RegionType::update()`.

## Constructor & Destructor Documentation

## ◆ Least_squares_line_fit_region()

template<typename GeomTraits , typename Item_ , typename SegmentMap >
template<typename NamedParameters = parameters::Default_named_parameters>

CGAL::Shape_detection::Segment_set::Least_squares_line_fit_region< GeomTraits, Item_, SegmentMap >::Least_squares_line_fit_region | ( | const NamedParameters & | np = `parameters::default_values()` | ) |

initializes all internal data structures.

Template Parameters

  NamedParameters | a sequence of Named Parameters

Parameters

  np | a sequence of Named Parameters among the ones listed below

Template Parameters

  InputRange | a model of `ConstRange` whose iterator type is `RandomAccessIterator`

Optional Named Parameters

  the maximum distance from the furthest vertex of a segment to a line Type: `GeomTraits::FT` Default: 1 |
  the maximum angle in degrees between the direction of a segment and the direction of a line Type: `GeomTraits::FT` Default: 25 degrees |
  the cosine value `cos(maximum_angle * PI / 180)`, to be used instead of the parameter `maximum_angle()` Type: `GeomTraits::FT` Default: `cos(25 * PI / 180)` |
  the minimum number of segments a region must have Type: `std::size_t` Default: 1 |
  an instance of `SegmentMap` that maps an item from `input_range` to `GeomTraits::Segment_2` or `GeomTraits::Segment_3` Default: `SegmentMap()` |
  an instance of `GeomTraits` Default: `GeomTraits()` |

Precondition
  `maximum_distance >= 0`
  `maximum_angle >= 0 && maximum_angle <= 90`
  `cosine_of_maximum_angle >= 0 && cosine_of_maximum_angle <= 1`
  `minimum_region_size > 0`

## Member Function Documentation

## ◆ is_part_of_region()

template<typename GeomTraits , typename Item_ , typename SegmentMap >

bool CGAL::Shape_detection::Segment_set::Least_squares_line_fit_region< GeomTraits, Item_, SegmentMap >::is_part_of_region | ( | const Item | query,
|  | const Region & |
| ) |  | const

implements `RegionType::is_part_of_region()`.

This function controls if a segment with the index `query` is within the `maximum_distance` from the corresponding line and if the angle between the direction of this segment and the line's direction is within the `maximum_angle`. If both conditions are satisfied, it returns `true`, otherwise `false`.

Parameters

  query | item of the query segment

The last parameter is not used in this implementation.

Returns
  Boolean `true` or `false`

## ◆ is_valid_region()

template<typename GeomTraits , typename Item_ , typename SegmentMap >

bool CGAL::Shape_detection::Segment_set::Least_squares_line_fit_region< GeomTraits, Item_, SegmentMap >::is_valid_region | ( | const Region & | region | ) | const

implements `RegionType::is_valid_region()`.

This function controls if the `region` contains at least `minimum_region_size` segments.

Parameters

  region | Segments of the region represented as `Items`.

Returns
  Boolean `true` or `false`

## ◆ primitive()

template<typename GeomTraits , typename Item_ , typename SegmentMap >

Primitive CGAL::Shape_detection::Segment_set::Least_squares_line_fit_region< GeomTraits, Item_, SegmentMap >::primitive | ( |  | ) | const

implements `RegionType::primitive()`.

This function provides the last primitive that has been fitted with the region.

Returns
  Primitive parameters that fits the region

Precondition
  `successful fitted primitive via successful call of update(region) with a sufficient large region`

## ◆ region_index_map()

template<typename GeomTraits , typename Item_ , typename SegmentMap >

Region_index_map CGAL::Shape_detection::Segment_set::Least_squares_line_fit_region< GeomTraits, Item_, SegmentMap >::region_index_map | ( |  | ) |

implements `RegionType::region_index_map()`.

This function creates an empty property map that maps iterators on the input range `Item` to `std::size_t`.

## ◆ update()

template<typename GeomTraits , typename Item_ , typename SegmentMap >

bool CGAL::Shape_detection::Segment_set::Least_squares_line_fit_region< GeomTraits, Item_, SegmentMap >::update | ( | const Region & | region | ) |

implements `RegionType::update()`.

This function fits the least squares line to all segments from the `region`.

Parameters

  region | Segments of the region represented as `Items`.

Returns
  Boolean `true` if the line fitting succeeded and `false` otherwise

Precondition
  `region.size() > 0`