points_sojkaT_points_sojkaPointsSojkaPointsSojka (Operator)

Name

points_sojkaT_points_sojkaPointsSojkaPointsSojka — Findet Ecken mit dem Sojka-Operator.

Signatur

points_sojka(Image : : MaskSize, SigmaW, SigmaD, MinGrad, MinApparentness, MinAngle, Subpix : Row, Column)

Herror T_points_sojka(const Hobject Image, const Htuple MaskSize, const Htuple SigmaW, const Htuple SigmaD, const Htuple MinGrad, const Htuple MinApparentness, const Htuple MinAngle, const Htuple Subpix, Htuple* Row, Htuple* Column)

void PointsSojka(const HObject& Image, const HTuple& MaskSize, const HTuple& SigmaW, const HTuple& SigmaD, const HTuple& MinGrad, const HTuple& MinApparentness, const HTuple& MinAngle, const HTuple& Subpix, HTuple* Row, HTuple* Column)

void HImage::PointsSojka(Hlong MaskSize, const HTuple& SigmaW, const HTuple& SigmaD, const HTuple& MinGrad, const HTuple& MinApparentness, double MinAngle, const HString& Subpix, HTuple* Row, HTuple* Column) const

void HImage::PointsSojka(Hlong MaskSize, double SigmaW, double SigmaD, double MinGrad, double MinApparentness, double MinAngle, const HString& Subpix, HTuple* Row, HTuple* Column) const

void HImage::PointsSojka(Hlong MaskSize, double SigmaW, double SigmaD, double MinGrad, double MinApparentness, double MinAngle, const char* Subpix, HTuple* Row, HTuple* Column) const

void HImage::PointsSojka(Hlong MaskSize, double SigmaW, double SigmaD, double MinGrad, double MinApparentness, double MinAngle, const wchar_t* Subpix, HTuple* Row, HTuple* Column) const   (Nur Windows)

static void HOperatorSet.PointsSojka(HObject image, HTuple maskSize, HTuple sigmaW, HTuple sigmaD, HTuple minGrad, HTuple minApparentness, HTuple minAngle, HTuple subpix, out HTuple row, out HTuple column)

void HImage.PointsSojka(int maskSize, HTuple sigmaW, HTuple sigmaD, HTuple minGrad, HTuple minApparentness, double minAngle, string subpix, out HTuple row, out HTuple column)

void HImage.PointsSojka(int maskSize, double sigmaW, double sigmaD, double minGrad, double minApparentness, double minAngle, string subpix, out HTuple row, out HTuple column)

Beschreibung

points_sojkapoints_sojkaPointsSojkaPointsSojkaPointsSojka definiert eine Ecke als den Schnittpunkt zweier gerader, nicht kollinearer Grauwertkanten. Es wird für jeden Bildpunkt im Eingabebild ImageImageImageImageimage eine Nachbarschaft von MaskSizeMaskSizeMaskSizeMaskSizemaskSize x MaskSizeMaskSizeMaskSizeMaskSizemaskSize Punkten betrachtet, um zu entscheiden, ob es sich dabei um einen Eckpunkt handeln kann. Innerhalb dieser Umgebung werden wiederum nur diejenigen Bildbereiche berücksichtigt, die für diese Entscheidung relevant sind. Pixel, in denen der Gradient nicht mindestens MinGradMinGradMinGradMinGradminGrad beträgt, werden von vornherein verworfen.

Weiterhin werden von den verbliebenen Punkten nur diejenigen verwendet, die zu einer der beiden Grauwertkanten gehören, die die Ecke bilden. Dazu wird die sogenannte Apparentness berechnet, die ein Maß für die Wahrscheinlichkeit ist, dass der untersuchte Punkt tatsächlich ein Eckpunkt ist. Sie wird im Wesentlichen durch die Anzahl der relevanten Punkte und die Stärke der Grauwertgradienten in ihnen bestimmt. Ein Punkt wird nur dann als Ecke akzeptiert, wenn seine Apparentness mindestens MinApparentnessMinApparentnessMinApparentnessMinApparentnessminApparentness ist. Typische Werte für MinApparentnessMinApparentnessMinApparentnessMinApparentnessminApparentness liegen in der Größenordnung von wenigen Vielfachen von MinGradMinGradMinGradMinGradminGrad.

Um die Apparentness zu berechnen, wird jeder Punkt noch nach zwei Kriterien gewichtet: Zum Einen wird der Abstand des Punktes zur (vermuteten) idealen Grauwertkante abgeschätzt und der Punkt mit einer Gaußfunktion der Größe SigmaDSigmaDSigmaDSigmaDsigmaD entsprechend diesem Abstand gewichtet. D.h. Pixel, die auf Grund der Diskretisierung des Eingabebildes von der idealen Grauwertkante weiter entfernt sind, haben einen geringeren Einfluss auf das Ergebnis, als solche mit einem geringeren Abstand. Im allgemeinen ist es nicht notwendig, den Defaultwert 0.75 von SigmaDSigmaDSigmaDSigmaDsigmaD zu ändern. Zum Anderen wird der Einfluss eines Maskenpunkts mit einer Gaußfunktion der Größe SigmaWSigmaWSigmaWSigmaWsigmaW entsprechend seiner Entfernung zum möglichen Eckpunkt gewichtet. Um ein vernünftiges Verhältnis der Größe der Gewichtungsfunktion zur Maskengröße MaskSizeMaskSizeMaskSizeMaskSizemaskSize zu erhalten, sollte SigmaWSigmaWSigmaWSigmaWsigmaW in etwa ein Viertel bis die Hälfte von MaskSizeMaskSizeMaskSizeMaskSizemaskSize betragen.

Als weiteres Entscheidungskriterium wird noch der Winkel, um den sich die Richtung der Grauwertkanten im Eckpunkt verändert, berechnet. Ein Punkt kann nur als Ecke akzeptiert werden, wenn dieser Winkel größer als MinAngleMinAngleMinAngleMinAngleminAngle ist.

Die Positionen der gefundenen Eckpunkte werden in (RowRowRowRowrow, ColumnColumnColumnColumncolumn) zurückgegeben. Je nach dem ob SubpixSubpixSubpixSubpixsubpix 'true'"true""true""true""true" oder 'false'"false""false""false""false" ist, werden RowRowRowRowrow und ColumnColumnColumnColumncolumn subpixelgenau berechnet oder nicht.

Achtung

Beachten Sie, dass Filteroperatoren eventuell unerwartete Resultate ausgeben, wenn ein Bild mit einer reduzierten Domäne als Input übergeben wird. Weitere Informationen können im Kapitel Filter gefunden werden.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHobject (byte / int1 / int2 / uint2 / int4 / real)

Eingabebild.

MaskSizeMaskSizeMaskSizeMaskSizemaskSize (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Gewünschte Filtergröße.

Defaultwert: 9

Werteliste: 5, 7, 9, 11, 13

SigmaWSigmaWSigmaWSigmaWsigmaW (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Sigma der Gewichtungsfunktion entsprechend der Entfernung zum möglichen Eckpunkt.

Defaultwert: 2.5

Wertevorschläge: 2.0, 2.2, 2.4, 2.5, 2.6, 2.8, 3.0

SigmaDSigmaDSigmaDSigmaDsigmaD (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Sigma der Gewichtungsfunktion für den Abstand zur idealen Grauwertkante.

Defaultwert: 0.75

Wertevorschläge: 0.6, 0.7, 0.75, 0.8, 0.9, 1.0

Restriktion: 0.6 <= SigmaD && SigmaD <= 1.0

MinGradMinGradMinGradMinGradminGrad (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Schwelle für die Stärke das Gradienten.

Defaultwert: 30.0

Wertevorschläge: 20.0, 15.0, 30.0, 35.0, 40.0

MinApparentnessMinApparentnessMinApparentnessMinApparentnessminApparentness (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Schwelle für Apparentness.

Defaultwert: 90.0

Wertevorschläge: 30.0, 60.0, 90.0, 150.0, 300.0, 600.0, 1500.0

MinAngleMinAngleMinAngleMinAngleminAngle (input_control)  angle.rad HTupleHTupleHtuple (real) (double) (double) (double)

Schwelle für die Richtungsänderung in einem Eckpunkt (Bogenmaß).

Defaultwert: 0.5

Restriktion: 0.0 <= MinAngle && MinAngle <= pi

SubpixSubpixSubpixSubpixsubpix (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Subpixelgenaue Berechnung der Eckpunkte.

Defaultwert: 'false' "false" "false" "false" "false"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

RowRowRowRowrow (output_control)  point.y-array HTupleHTupleHtuple (real) (double) (double) (double)

Zeilenkoordinaten der gefundenen Eckpunkte.

ColumnColumnColumnColumncolumn (output_control)  point.x-array HTupleHTupleHtuple (real) (double) (double) (double)

Spaltenkoordinaten der gefundenen Eckpunkte.

Ergebnis

Sind die Parameterwerte korrekt und tritt kein Fehler während der Berechnung auf, liefert points_sojkapoints_sojkaPointsSojkaPointsSojkaPointsSojka den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Literatur

Eduard Sojka: „A New and Efficient Algorithm for Detecting the Corners in Digital Images“. Pattern Recognition, Luc Van Gool (Editor), LNCS 2449, pp. 125-132, Springer Verlag, 2002.

Modul

Foundation