Als erstes suchst du die Kanten, nicht die Ecken.
Delphi-Quellcode:
type
TVertEdge = record
Top: TPoint;
Bottom: TPoint;
end;
THorzEdge = record
Left: TPoint;
Right: TPoint;
end;
Implementiere zuerst den trivialen Fall (Kantendicke = 1 Pixel). Wenn du die Kanten hast, dann kannst du Rechtecke zusammenstellen. Es wird genau vier Kanten geben, zwei vertikale und zwei horizontale, welche gemeinsame Punkte (die Ecken) aufweisen.
Dickere Kanten sind eine relativ einfache Erweiterung. Es läuft darauf hinaus, dass Kanten länger als breit sein müssen und dass du Rechtecke findest, welche ineinander verschachtelt sind. Es werden nur die jeweils äußeren Rechtecke weiter betrachtet, die inneren sind Artefakte des Algorithmus.