Name
class_2dim_supclass_2dim_supClass2dimSupClass2dimSup — Segmentieren durch 2-dimensionale Pixelklassifikation.
class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSup klassifiziert Bildpunkte mit Hilfe von
zweikanaligen Bildern und einem zweidimensionalen Merkmalsraum.
Für jeden Bildpunkt werden zwei Grauwerte (aus jedem Bild einer)
als Merkmale verwendet. Der Merkmalsraum wird durch eine Region
repräsentiert. Die Klassifikation wird wie folgt durchgeführt:
Ein Bildpunkt aus der Eingaberegion wird genau dann übernommen,
wenn der Punkt (g_{r},g_{c}), der durch die Grauwerte festgelegt
wird, in der Region FeatureSpaceFeatureSpaceFeatureSpaceFeatureSpacefeatureSpace enthalten ist. Dabei
ist g_{r} ein Grauwert aus dem Bild ImageRowImageRowImageRowImageRowimageRow und
g_{c} ein Grauwert aus dem Bild ImageColImageColImageColImageColimageCol.
Sei P ein Bildpunkt mit den Koordinaten P=(R,C), g_{r} der
Grauwert an der Position (R,C) in dem Bild ImageRowImageRowImageRowImageRowimageRow und
g_{c} der Grauwert an der Position (R,C) in dem Bild
ImageColImageColImageColImageColimageCol. Dann wird er in die Ergebnisregion
(RegionClass2DimRegionClass2DimRegionClass2DimRegionClass2DimregionClass2Dim) übernommen, falls:
g_{r} wird also als Zeilen- und g_{c} als Spaltenkoordinate
interpretiert.
Für die Erzeugung von FeatureSpaceFeatureSpaceFeatureSpaceFeatureSpacefeatureSpace siehe
histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dim. Der Merkmalsraum kann vor der Anwendung
von class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSup noch mit Regionentransformationen wie
rank_regionrank_regionRankRegionRankRegionRankRegion, dilation1dilation1Dilation1Dilation1Dilation1, shape_transshape_transShapeTransShapeTransShapeTrans,
elliptic_axiselliptic_axisEllipticAxisEllipticAxisEllipticAxis, etc. bearbeitet werden.
Die Parameter ImageColImageColImageColImageColimageCol und ImageRowImageRowImageRowImageRowimageRow müssen
gleich viele Bilder mit jeweils gleicher Größe enthalten. Die
Bildpunkte werden aus dem Durchschnitt der beiden
Definitionsbereiche entnommen (siehe reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain).
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Bild mit Grauwerten für ersten Kanal.
Bild mit Grauwerten für zweiten Kanal.
Region, die den Merkmalsraum festlegt.
Regionen, die das Klassifikationskriterium erfüllen.
#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);
}
HRegion feats, cd2reg;
HImage image (argv[1]),
text1, text2,
mean1, mean2,
histo;
HWindow win;
Hlong nc;
if ((nc = image.CountChannels ()) != 3)
{
cout << argv[1] << " is not a rgb-image " << endl;
return (-2);
}
image.Display (win);
win.SetColor ("green");
cout << "Draw the region of interrest " << endl;
HRegion region = win.DrawRegion ();
text1 = image.TextureLaws ("el", 2, 5);
mean1 = text1.MeanImage (21, 21);
text2 = mean1.TextureLaws ("es", 2, 5);
mean2 = text2.MeanImage (21, 21);
histo = region.Histo2dim (mean1, mean2);
feats = histo.Threshold (1.0, 1000000.0);
win.SetDraw ("fill");
win.SetColor ("red");
feats.Display (win);
cout << "Charakteristics area in red" << endl;
cd2reg = mean1.Class2dimSup (mean2, feats);
win.SetColor ("blue");
cd2reg.Display (win);
cout << "Result of classification in blue " << endl;
win.Click ();
return (0);
}
read_image(&Image,"combine");
open_window(0,0,-1,-1,0,"visible","",&WindowHandle);
disp_image(Image,WindowHandle);
fwrite_string("draw region of interest with the mouse");
fnew_line();
set_color(WindowHandle,"green");
draw_region(&Testreg,draw_region);
/* Texture transformation for 2-dimensional charachteristic */
texture_laws(Image,&T1,"el",2,5);
mean_image(T1,&M1,21,21);
clear_obj(T1);
texture_laws(M1,&T2,"es,",2,5);
mean_image(T2,&M2,21,21);
clear_obj(T2);
/* 2-dimensinal histogram of the test region */
histo_2dim(Testreg,M1,M2,&Histo);
/* All points occuring at least once */
threshold(Histo,&FeatureSpace,1.0,100000.0);
set_draw(WindowHandle,"fill");
set_color(WindowHandle,"red");
disp_region(FeatureSpace,WindowHandle);
fwrite_string("Characteristics area in red");
fnew_line();
/* Segmentation */
class_2dim_sup(M1,M2,FeatureSpace,&RegionClass2Dim);
set_color(WindowHandle,"blue");
disp_region(RegionClass2Dim,WindowHandle);
fwrite_string("Result of classification in blue");
fnew_line();
#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);
}
HRegion feats, cd2reg;
HImage image (argv[1]),
text1, text2,
mean1, mean2,
histo;
HWindow win;
Hlong nc;
if ((nc = image.CountChannels ()) != 3)
{
cout << argv[1] << " is not a rgb-image " << endl;
return (-2);
}
image.Display (win);
win.SetColor ("green");
cout << "Draw the region of interrest " << endl;
HRegion region = win.DrawRegion ();
text1 = image.TextureLaws ("el", 2, 5);
mean1 = text1.MeanImage (21, 21);
text2 = mean1.TextureLaws ("es", 2, 5);
mean2 = text2.MeanImage (21, 21);
histo = region.Histo2dim (mean1, mean2);
feats = histo.Threshold (1.0, 1000000.0);
win.SetDraw ("fill");
win.SetColor ("red");
feats.Display (win);
cout << "Charakteristics area in red" << endl;
cd2reg = mean1.Class2dimSup (mean2, feats);
win.SetColor ("blue");
cd2reg.Display (win);
cout << "Result of classification in blue " << endl;
win.Click ();
return (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);
}
HRegion feats, cd2reg;
HImage image (argv[1]),
text1, text2,
mean1, mean2,
histo;
HWindow win;
Hlong nc;
if ((nc = image.CountChannels ()) != 3)
{
cout << argv[1] << " is not a rgb-image " << endl;
return (-2);
}
image.Display (win);
win.SetColor ("green");
cout << "Draw the region of interrest " << endl;
HRegion region = win.DrawRegion ();
text1 = image.TextureLaws ("el", 2, 5);
mean1 = text1.MeanImage (21, 21);
text2 = mean1.TextureLaws ("es", 2, 5);
mean2 = text2.MeanImage (21, 21);
histo = region.Histo2dim (mean1, mean2);
feats = histo.Threshold (1.0, 1000000.0);
win.SetDraw ("fill");
win.SetColor ("red");
feats.Display (win);
cout << "Charakteristics area in red" << endl;
cd2reg = mean1.Class2dimSup (mean2, feats);
win.SetColor ("blue");
cd2reg.Display (win);
cout << "Result of classification in blue " << endl;
win.Click ();
return (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);
}
HRegion feats, cd2reg;
HImage image (argv[1]),
text1, text2,
mean1, mean2,
histo;
HWindow win;
Hlong nc;
if ((nc = image.CountChannels ()) != 3)
{
cout << argv[1] << " is not a rgb-image " << endl;
return (-2);
}
image.Display (win);
win.SetColor ("green");
cout << "Draw the region of interrest " << endl;
HRegion region = win.DrawRegion ();
text1 = image.TextureLaws ("el", 2, 5);
mean1 = text1.MeanImage (21, 21);
text2 = mean1.TextureLaws ("es", 2, 5);
mean2 = text2.MeanImage (21, 21);
histo = region.Histo2dim (mean1, mean2);
feats = histo.Threshold (1.0, 1000000.0);
win.SetDraw ("fill");
win.SetColor ("red");
feats.Display (win);
cout << "Charakteristics area in red" << endl;
cd2reg = mean1.Class2dimSup (mean2, feats);
win.SetColor ("blue");
cd2reg.Display (win);
cout << "Result of classification in blue " << endl;
win.Click ();
return (0);
}
Sei A die Fläche der Eingaberegion dann ist die
Laufzeitkomplexität O(256^2 + A).
class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSup liefert den Wert 2 (H_MSG_TRUE). Falls alle 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.
histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dim,
thresholdthresholdThresholdThresholdThreshold,
draw_regiondraw_regionDrawRegionDrawRegionDrawRegion,
dilation1dilation1Dilation1Dilation1Dilation1,
openingopeningOpeningOpeningOpening,
shape_transshape_transShapeTransShapeTransShapeTrans
connectionconnectionConnectionConnectionConnection,
select_shapeselect_shapeSelectShapeSelectShapeSelectShape,
select_grayselect_graySelectGraySelectGraySelectGray
class_ndim_normclass_ndim_normClassNdimNormClassNdimNormClassNdimNorm,
thresholdthresholdThresholdThresholdThreshold
histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dim
Foundation