class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsup (Operator)

Name

class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsup — Segmentieren zweier Bilder mittels Clustering.

Signatur

class_2dim_unsup(Image1, Image2 : Classes : Threshold, NumClasses : )

Herror class_2dim_unsup(const Hobject Image1, const Hobject Image2, Hobject* Classes, const Hlong Threshold, const Hlong NumClasses)

Herror T_class_2dim_unsup(const Hobject Image1, const Hobject Image2, Hobject* Classes, const Htuple Threshold, const Htuple NumClasses)

void Class2dimUnsup(const HObject& Image1, const HObject& Image2, HObject* Classes, const HTuple& Threshold, const HTuple& NumClasses)

HRegion HImage::Class2dimUnsup(const HImage& Image2, Hlong Threshold, Hlong NumClasses) const

static void HOperatorSet.Class2dimUnsup(HObject image1, HObject image2, out HObject classes, HTuple threshold, HTuple numClasses)

HRegion HImage.Class2dimUnsup(HImage image2, int threshold, int numClasses)

Beschreibung

class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsupClass2dimUnsup führt eine Klassifikation mit zwei einkanaligen Bildern durch. Als erstes wird ein zweidimensionales Histogramm über die zwei gegebenen Bilder aufgestellt (histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dim). In diesem zweidimensionalen Histogramm wird das erste Maximum gesucht. Es stellt das erste Clusterzentrum dar. Das Histogramm wird mit den Bildpunkten berechnet, die in beiden Bildern definiert sind (siehe reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain). Danach werden im Bild alle Pixel gesucht, die sich höchstens um ThresholdThresholdThresholdThresholdthreshold von den Grauwerten der des Clusterzentrums unterscheiden (Maximumsabstand vom Zentrum). Die gefundenen Pixel bilden eine Region. Anschließend werden die zu den gefundenen Pixel gehörenden Punkte im Histogramm gelöscht, damit sie bei der nächsten Klassenbildung nicht mehr berücksichtigt werden müssen. In diesem modifizierten Histogramm wird wiederum das Maximum gesucht; es bildet das neue Clusterzentrum. Die obigen genannten Schritte werden wiederholt. Insgesamt werden die Schritte NumClassesNumClassesNumClassesNumClassesnumClasses-mal, wiederholt; es ergeben sich also NumClassesNumClassesNumClassesNumClassesnumClasses-Ausgaberegionen. Es werden nur Punkte ausgegeben, die in beiden Bildern definiert sind.

Achtung

Die beiden Eingabebilder müssen die gleiche Größe haben.

Ausführungsinformationen

Parameter

Image1Image1Image1Image1image1 (input_object)  singlechannelimage objectHImageHImageHobject (byte)

Erstes Eingabebild.

Image2Image2Image2Image2image2 (input_object)  singlechannelimage objectHImageHImageHobject (byte)

Zweites Eingabebild.

ClassesClassesClassesClassesclasses (output_object)  region-array objectHRegionHRegionHobject *

Ergebnis der Klassifikation.

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

Schwellenwert (maximaler Abstand vom Clusterzentrum).

Defaultwert: 15

Wertevorschläge: 0, 2, 5, 8, 12, 17, 20, 30, 50, 70

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

Anzahl der Klassen (Clusterzentren).

Defaultwert: 5

Wertevorschläge: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30, 40, 50

Beispiel (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  if (argc != 2)
  {
    cout << "Usage : " << argv[0] << " 'image' " << endl;
    return (-1);
  }

  HImage   colimg (argv[1]),
           green, blue;

  HWindow  w;
  Hlong     nc;

  if ((nc = colimg.CountChannels ()) != 3)
  {
    cout << argv[1] << " is not a rgb-image " << endl;
    return (-2);
  }

  colimg.Display (w);

  HImage        red = colimg.Decompose3 (&green, &blue);
  HRegionArray  seg = red.Class2dimUnsup (green, 15, 5);

  w.SetDraw ("margin");
  w.SetColored (12);
  seg.Display (w);
  w.Click ();

  return (0);
}

Beispiel (C)

read_image(&ColorImage,"patras");
decompose3(ColorImage,&Red,&Green,&Blue);
class_2dim_unsup(Red,Green,&Seg,15,5);
set_colored(WindowHandle,12);
disp_region(Seg,WindowHandle);

Beispiel (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  if (argc != 2)
  {
    cout << "Usage : " << argv[0] << " 'image' " << endl;
    return (-1);
  }

  HImage   colimg (argv[1]),
           green, blue;

  HWindow  w;
  Hlong     nc;

  if ((nc = colimg.CountChannels ()) != 3)
  {
    cout << argv[1] << " is not a rgb-image " << endl;
    return (-2);
  }

  colimg.Display (w);

  HImage        red = colimg.Decompose3 (&green, &blue);
  HRegionArray  seg = red.Class2dimUnsup (green, 15, 5);

  w.SetDraw ("margin");
  w.SetColored (12);
  seg.Display (w);
  w.Click ();

  return (0);
}

Beispiel (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  if (argc != 2)
  {
    cout << "Usage : " << argv[0] << " 'image' " << endl;
    return (-1);
  }

  HImage   colimg (argv[1]),
           green, blue;

  HWindow  w;
  Hlong     nc;

  if ((nc = colimg.CountChannels ()) != 3)
  {
    cout << argv[1] << " is not a rgb-image " << endl;
    return (-2);
  }

  colimg.Display (w);

  HImage        red = colimg.Decompose3 (&green, &blue);
  HRegionArray  seg = red.Class2dimUnsup (green, 15, 5);

  w.SetDraw ("margin");
  w.SetColored (12);
  seg.Display (w);
  w.Click ();

  return (0);
}

Beispiel (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  if (argc != 2)
  {
    cout << "Usage : " << argv[0] << " 'image' " << endl;
    return (-1);
  }

  HImage   colimg (argv[1]),
           green, blue;

  HWindow  w;
  Hlong     nc;

  if ((nc = colimg.CountChannels ()) != 3)
  {
    cout << argv[1] << " is not a rgb-image " << endl;
    return (-2);
  }

  colimg.Display (w);

  HImage        red = colimg.Decompose3 (&green, &blue);
  HRegionArray  seg = red.Class2dimUnsup (green, 15, 5);

  w.SetDraw ("margin");
  w.SetColored (12);
  seg.Display (w);
  w.Click ();

  return (0);
}

Ergebnis

class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsupClass2dimUnsup liefert den Wert 2 (H_MSG_TRUE), falls die Parameter korrekt sind. Für das Verhalten bzgl. der Eingabebilder und Ausgaberegionen sind die Flags 'no_object_result'"no_object_result""no_object_result""no_object_result""no_object_result", 'empty_region_result'"empty_region_result""empty_region_result""empty_region_result""empty_region_result" und 'store_empty_region'"store_empty_region""store_empty_region""store_empty_region""store_empty_region" einstellbar (siehe set_systemset_systemSetSystemSetSystemSetSystem). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

decompose2decompose2Decompose2Decompose2Decompose2, decompose3decompose3Decompose3Decompose3Decompose3, median_imagemedian_imageMedianImageMedianImageMedianImage, anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionAnisotropicDiffusion, reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain

Nachfolger

select_shapeselect_shapeSelectShapeSelectShapeSelectShape, select_grayselect_graySelectGraySelectGraySelectGray, connectionconnectionConnectionConnectionConnection

Alternativen

thresholdthresholdThresholdThresholdThreshold, histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dim, class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSup, class_ndim_normclass_ndim_normClassNdimNormClassNdimNormClassNdimNorm

Modul

Foundation