KlassenKlassenKlassenKlassen | | | | Operatoren

points_sojkaT_points_sojkaPointsSojkapoints_sojkaPointsSojkaPointsSojka (Operator)

Name

points_sojkaT_points_sojkaPointsSojkapoints_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)

Herror points_sojka(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)

HTuple HImage::PointsSojka(const HTuple& MaskSize, const HTuple& SigmaW, const HTuple& SigmaD, const HTuple& MinGrad, const HTuple& MinApparentness, const HTuple& MinAngle, const HTuple& Subpix, HTuple* Column) const

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 HOperatorSetX.PointsSojka(
[in] IHUntypedObjectX* Image, [in] VARIANT MaskSize, [in] VARIANT SigmaW, [in] VARIANT SigmaD, [in] VARIANT MinGrad, [in] VARIANT MinApparentness, [in] VARIANT MinAngle, [in] VARIANT Subpix, [out] VARIANT* Row, [out] VARIANT* Column)

VARIANT HImageX.PointsSojka(
[in] Hlong MaskSize, [in] VARIANT SigmaW, [in] VARIANT SigmaD, [in] VARIANT MinGrad, [in] VARIANT MinApparentness, [in] double MinAngle, [in] BSTR Subpix, [out] VARIANT* Column)

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_sojkaPointsSojkapoints_sojkaPointsSojkaPointsSojka definiert eine Ecke als den Schnittpunkt zweier gerader, nicht kollinearer Grauwertkanten. Es wird für jeden Bildpunkt im Eingabebild ImageImageImageImageImageimage eine Nachbarschaft von MaskSizeMaskSizeMaskSizeMaskSizeMaskSizemaskSize x MaskSizeMaskSizeMaskSizeMaskSizeMaskSizemaskSize 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 MinGradMinGradMinGradMinGradMinGradminGrad 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 MinApparentnessMinApparentnessMinApparentnessMinApparentnessMinApparentnessminApparentness ist. Typische Werte für MinApparentnessMinApparentnessMinApparentnessMinApparentnessMinApparentnessminApparentness liegen in der Größenordnung von wenigen Vielfachen von MinGradMinGradMinGradMinGradMinGradminGrad.

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 SigmaDSigmaDSigmaDSigmaDSigmaDsigmaD 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 SigmaDSigmaDSigmaDSigmaDSigmaDsigmaD zu ändern. Zum Anderen wird der Einfluss eines Maskenpunkts mit einer Gaußfunktion der Größe SigmaWSigmaWSigmaWSigmaWSigmaWsigmaW entsprechend seiner Entfernung zum möglichen Eckpunkt gewichtet. Um ein vernünftiges Verhältnis der Größe der Gewichtungsfunktion zur Maskengröße MaskSizeMaskSizeMaskSizeMaskSizeMaskSizemaskSize zu erhalten, sollte SigmaWSigmaWSigmaWSigmaWSigmaWsigmaW in etwa ein Viertel bis die Hälfte von MaskSizeMaskSizeMaskSizeMaskSizeMaskSizemaskSize 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 MinAngleMinAngleMinAngleMinAngleMinAngleminAngle ist.

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

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  singlechannelimage objectHImageHImageHImageHImageXHobject (byte / int1 / int2 / uint2 / int4 / real)

Eingabebild.

MaskSizeMaskSizeMaskSizeMaskSizeMaskSizemaskSize (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Gewünschte Filtergröße.

Defaultwert: 9

Werteliste: 5, 7, 9, 11, 13

SigmaWSigmaWSigmaWSigmaWSigmaWsigmaW (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (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

SigmaDSigmaDSigmaDSigmaDSigmaDsigmaD (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (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

MinGradMinGradMinGradMinGradMinGradminGrad (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (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

MinApparentnessMinApparentnessMinApparentnessMinApparentnessMinApparentnessminApparentness (input_control)  number HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (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

MinAngleMinAngleMinAngleMinAngleMinAngleminAngle (input_control)  angle.rad HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

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

Defaultwert: 0.5

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

SubpixSubpixSubpixSubpixSubpixsubpix (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Subpixelgenaue Berechnung der Eckpunkte.

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

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

RowRowRowRowRowrow (output_control)  point.y-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Zeilenkoordinaten der gefundenen Eckpunkte.

ColumnColumnColumnColumnColumncolumn (output_control)  point.x-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Spaltenkoordinaten der gefundenen Eckpunkte.

Ergebnis

Sind die Parameterwerte korrekt und tritt kein Fehler während der Berechnung auf, liefert points_sojkapoints_sojkaPointsSojkapoints_sojkaPointsSojkaPointsSojka 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>)set_system("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


KlassenKlassenKlassenKlassen | | | | Operatoren