class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSup classifies the points in two-channel images
using a two-dimensional feature space. For each point, two gray
values (one from each image) are used as features. The feature
space is represented by the input region. The classification is
done as follows:
Let P be a point with the coordinates P=(R,C), g_{r} be the
gray value at position (R,C) in the image ImageRowImageRowImageRowImageRowimageRow, and
g_{c} be the gray value at position (R,C) in the image
ImageColImageColImageColImageColimageCol. Then the point P is aggregated into the
output region if
g_{r} is interpreted as row coordinate and g_{c} as column
coordinate.
#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);
}
Example (C)
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);
texture_laws(M1,&T2,"es,",2,5);
mean_image(T2,&M2,21,21);
/* 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();
Example (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);
}
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);
}
Example (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);
}
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);
}
Example (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);
}
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);
}
Complexity
Let A be the area of the input region. Then the runtime
complexity is O(256^2 + A).
Result
class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSup returns 2 (H_MSG_TRUE). If all parameters are correct, the
behavior with respect to the input images and output regions can be
determined by setting the values of the 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", and 'store_empty_region'"store_empty_region""store_empty_region""store_empty_region""store_empty_region"
with set_systemset_systemSetSystemSetSystemSetSystem. If necessary, an exception is raised.