Skip to content

inner_circleInnerCircleInnerCircleinner_circleinner_circleπŸ”—

Short descriptionπŸ”—

inner_circleInnerCircleInnerCircleinner_circleinner_circle β€” Largest inner circle of a region.

SignatureπŸ”—

inner_circle( region Regions, out circle.center.y Row, out circle.center.x Column, out circle.radius Radius )void InnerCircle( const HObject& Regions, HTuple* Row, HTuple* Column, HTuple* Radius )static void HOperatorSet.InnerCircle( HObject regions, out HTuple row, out HTuple column, out HTuple radius )def inner_circle( regions: HObject ) -> Tuple[Sequence[float], Sequence[float], Sequence[float]]

def inner_circle_s( regions: HObject ) -> Tuple[float, float, float]Herror inner_circle( const Hobject Regions, double* Row, double* Column, double* Radius )

Herror T_inner_circle( const Hobject Regions, Htuple* Row, Htuple* Column, Htuple* Radius )

void HRegion::InnerCircle( HTuple* Row, HTuple* Column, HTuple* Radius ) const

void HRegion::InnerCircle( double* Row, double* Column, double* Radius ) const

void HRegion.InnerCircle( out HTuple row, out HTuple column, out HTuple radius )

void HRegion.InnerCircle( out double row, out double column, out double radius )

DescriptionπŸ”—

The operator inner_circleInnerCircle determines the largest inner circle of a region. This is the biggest discrete circle region that completely fits into the region. For this circle the center (Rowrowrow, Columncolumncolumn) and the radius (Radiusradiusradius) are calculated. If the position of the circle is ambiguous, the β€œfirst possible” position (as far upper left as possible) is returned.

In the documentation of this chapter (Regions / Features), you can find an image illustrating regions with varying inner circles.

The output of the operator is chosen in such a way that it can be used as an input for the operators disp_circleDispCircle, gen_circleGenCircle, and gen_ellipse_contour_xldGenEllipseContourXld.

If several regions are passed in Regionsregionsregions corresponding tuples are returned as output parameters. In case of an empty input region all parameters have the value 0.00.0 if no other behavior was set with set_systemSetSystem.

AttentionπŸ”—

If several inner circles are present at a region only the most upper left solution is returned.

Execution informationπŸ”—

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Automatically parallelized on tuple level.

ParametersπŸ”—

Regionsregionsregions (input_object) region(-array) β†’ objectHObjectHRegionHObjectHobject

Regions to be examined.

Rowrowrow (output_control) circle.center.y(-array) β†’ (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Line index of the center.

Columncolumncolumn (output_control) circle.center.x(-array) β†’ (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Column index of the center.

Radiusradiusradius (output_control) circle.radius(-array) β†’ (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Radius of the inner circle.

Assertion: Radius >= 0

ExampleπŸ”—

(HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
select_shape(Seg,H,'area','and',100,2000)
inner_circle(H,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_set_draw('margin')
dev_display(Circles)
(C)
read_image(&Image,"fabrik")\;
regiongrowing(Image,&Seg,5,5,6.0,100)\;
select_shape(Seg,&H,"area","and",100.0,2000.0)\;
T_inner_circle(H,&Row,&Column,&Radius)\;
T_gen_circle(&Circles,Row,Column,Radius)\;
(C++)
#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std\;
#endif
#include "HalconCpp.h"
using namespace Halcon\;

int main (int argc, char *argv[])
{
  Tuple    row, col, rad\;
 HImage   img (argv[1])\;
  HWindow  w\;
 img.Display (w)\;
 HRegionArray  reg  = img.Regiongrowing (5, 5, 6.0, 100)\;
  HRegionArray  seg  = reg.SelectShape ("area", "and", 100.0, 1000.0)\;
 row = seg.InnerCircle (&col, &rad)\;
 HRegionArray  circ = HRegionArray::GenCircle (row, col, rad)\;
 w.SetDraw   ("margin")\;
 w.SetColor  ("green")\;   reg.Display (w)\;
  w.SetColor  ("blue")\;    seg.Display (w)\;
  w.SetColor  ("red")\;     circ.Display (w)\;
  w.Click ()\;
 return(0)\;
}

ComplexityπŸ”—

If \(F\) is the area of the region and \(R\) is the radius of the inner circle the runtime complexity is \(O(\sqrt{F} * R)\).

ResultπŸ”—

The operator inner_circleInnerCircle returns the value 2 (H_MSG_TRUE) if the input is not empty. The behavior in case of empty input (no input regions available) is set via the operator set_system('no_object_result',<Result>), the behavior in case of empty region is set via set_system('empty_region_result',<Result>). If necessary an exception is raised.

Combinations with other operatorsπŸ”—

Combinations

Possible predecessors

thresholdThreshold, regiongrowingRegiongrowing, connectionConnection, runlength_featuresRunlengthFeatures

Possible successors

gen_circleGenCircle, disp_circleDispCircle

Alternatives

erosion_circleErosionCircle, inner_rectangle1InnerRectangle1

See also

set_shapeSetShape, select_shapeSelectShape, smallest_circleSmallestCircle

ModuleπŸ”—

Foundation