class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsup (Operator)
Name
class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsup
— Segmentieren zweier Bilder mittels Clustering.
Signatur
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
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
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