r2_smallest_rectangle2 — 2D region op

• Data kinds: region → region

• Call: fullseye.apply(img, "r2_smallest_rectangle2", a=0.5, b=0.5) (the 2-D model is one image plus two scalar knobs a,b∈[0,1])

• HALCON equivalent: smallest_rectangle2 (the HALCON reference is a useful guide to its meaning and parameters)

r2_smallest_rectangle2: input → output

*The figure is the actual output on a synthetic 128×128 input. Left: input, right: output. Point clouds are drawn as a top-down scatter (brightness = z), 1-D series as a line plot, volumes as the maximum-intensity projection along z, videos as the middle frame, complex images as magnitude; return values that are not pictures are shown as the values themselves.*

*Knob a does not change the output (measured: identical at 0.1 / 0.5 / 0.9).*

*Knob b does not change the output (measured: identical at 0.1 / 0.5 / 0.9).*

Stages (the ops that come before → this op, left to right):

▸ r2_smallest_rectangle2: stages (docs site)

On other images (synthetic scene / photo / coins. Top row: inputs, bottom row: their outputs. Knobs at default):

▸ r2_smallest_rectangle2: other inputs (docs site)

Usage

Minimum-area ORIENTED bounding rectangle as a mask (rotating calipers).

Draws, as a mask, the rotated rectangle of minimum area containing all foreground pixels of the region. It takes the convex hull of the foreground coordinates, builds a circumscribed rectangle oriented parallel to each edge of the hull, and picks the one with the smallest area (rotating calipers; uses the property that a minimum-area rectangle touches one of the hull's edges). The internal representation is the centre (cy, cx), the long side long_len, the short side short_len, and the orientation of the long side angle (radians measured in image coordinates x=col, y=row).

a stretches only the long side by a factor of 1 + 0.3*a (a=0 gives the minimum rectangle itself, a=1 a long side 1.3 times as long; the short side is unchanged). b is unused. Drawing uses the projections from the centre |pu| <= long/2 + 0.5, |pv| <= short/2 + 0.5, adding a margin of 0.5 pixel for the extent of a pixel, so the output always contains the input region.

The return value is a float64 0/1 mask of the same shape as the input; all zeros if there is no foreground. The numerical values of angle and side lengths are not returned. If there are several connected components, there is 1 rectangle for the whole. If the foreground is 1 pixel or lies on a straight line, the rectangle degenerates (point or line segment) and the drawing becomes a thin band about 1 pixel wide. If axis-parallel suffices, r2_smallest_rectangle1 is lighter. Used as preprocessing for checking the orientation of elongated parts, or for judging rectangularity by the area ratio with r2_inner_rectangle1.

Border handling: treat everything outside the image as background (0) (measured; tools/impl2/border_probe.py).

Detailed usage guide

• gallery2d_region family guide

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Try it in Studio

The program below has been verified to run (same input as the figure). In Studio's help this block becomes buttons that load and run it on the spot.

threshold 0.50 0.50
r2_smallest_rectangle2 0.50 0.50

▸ Load this pipeline  ·  Load & run

Runnable examples (verified samples that actually call this op)

• gallery2d_region — py -3.11 examples/gallery2d_region.py

Ops the type connects to (they accept region as input)

identity · reg_erode · reg_dilate · reg_open · reg_close · fill_holes · select_largest · remove_small

Same category (region)

reg_erode · reg_dilate · reg_open · reg_close · fill_holes · select_largest · remove_small · invert_region


*Provenance: ops.py — 2D operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.