A General Ambiguity Model for Binary Edge Images with Edge Tracing and its Implementation
Markus Hennig, Marc Leineke, Bärbel Mertsching
TL;DR
The paper addresses ambiguity in binary edge images at intersections and junctions by introducing an ambiguity framework coupled with edge tracing. It defines SPAs and MPAs, and maintains three data structures (ambiguityMap, edgeIdMap, edgeList) to form an augmented edge map, implemented via a two-pass pipeline that first labels ambiguities and then traces edges while linking them to ambiguities. Key contributions include a compact pseudocode description (under 50 lines), a C++ implementation, explicit handling of SPAs/MPAs, and modular postprocessing for contour extraction and figure-ground tasks. Empirical evaluation on BSDS500-derived data demonstrates precise, non-redundant edge decomposition with real-time performance (<2 ms) across multiple edge detectors, highlighting practical impact for segmentation, recognition, and topology analysis.
Abstract
We present a general and intuitive ambiguity model for intersections, junctions and other structures in binary edge images. The model is combined with edge tracing, where edges are ordered sequences of connected pixels. The objective is to provide a versatile preprocessing method for tasks such as figure-ground segmentation, object recognition, topological analysis, etc. By using only a small set of straightforward principles, the results are intuitive to describe. This helps to implement subsequent processing steps, such as resolving ambiguous edge connections at junctions. By using an augmented edge map, neighboring edges can be directly accessed using quick local search operations. The edge tracing uses recursion, which leads to compact programming code. We explain our algorithm using pseudocode, compare it with related methods, and show how simple modular postprocessing steps can be used to optimize the results. The complete algorithm, including all data structures, requires less than 50 lines of pseudocode. We also provide a C++ implementation of our method.
