class_2dim_supclass_2dim_supClass2dimSupClass2dimSup (Operator)

Name

class_2dim_supclass_2dim_supClass2dimSupClass2dimSup — Segmentieren durch 2-dimensionale Pixelklassifikation.

Signatur

class_2dim_sup(ImageCol, ImageRow, FeatureSpace : RegionClass2Dim : : )

Herror class_2dim_sup(const Hobject ImageCol, const Hobject ImageRow, const Hobject FeatureSpace, Hobject* RegionClass2Dim)

Herror T_class_2dim_sup(const Hobject ImageCol, const Hobject ImageRow, const Hobject FeatureSpace, Hobject* RegionClass2Dim)

void Class2dimSup(const HObject& ImageCol, const HObject& ImageRow, const HObject& FeatureSpace, HObject* RegionClass2Dim)

HRegion HImage::Class2dimSup(const HImage& ImageRow, const HRegion& FeatureSpace) const

static void HOperatorSet.Class2dimSup(HObject imageCol, HObject imageRow, HObject featureSpace, out HObject regionClass2Dim)

HRegion HImage.Class2dimSup(HImage imageRow, HRegion featureSpace)

Beschreibung

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

Ausführungsinformationen

Parameter

ImageColImageColImageColImageColimageCol (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / direction / cyclic / int1)

Bild mit Grauwerten für ersten Kanal.

ImageRowImageRowImageRowImageRowimageRow (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / direction / cyclic / int1)

Bild mit Grauwerten für zweiten Kanal.

FeatureSpaceFeatureSpaceFeatureSpaceFeatureSpacefeatureSpace (input_object)  region(-array) objectHRegionHRegionHobject

Region, die den Merkmalsraum festlegt.

RegionClass2DimRegionClass2DimRegionClass2DimRegionClass2DimregionClass2Dim (output_object)  region(-array) objectHRegionHRegionHobject *

Regionen, die das Klassifikationskriterium erfüllen.

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);
  }

  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);
}

Beispiel (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();

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);
  }

  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);
}

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);
  }

  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);
}

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);
  }

  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);
}

Komplexität

Sei A die Fläche der Eingaberegion dann ist die Laufzeitkomplexität O(256^2 + A).

Ergebnis

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.

Vorgänger

histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dim, thresholdthresholdThresholdThresholdThreshold, draw_regiondraw_regionDrawRegionDrawRegionDrawRegion, dilation1dilation1Dilation1Dilation1Dilation1, openingopeningOpeningOpeningOpening, shape_transshape_transShapeTransShapeTransShapeTrans

Nachfolger

connectionconnectionConnectionConnectionConnection, select_shapeselect_shapeSelectShapeSelectShapeSelectShape, select_grayselect_graySelectGraySelectGraySelectGray

Alternativen

class_ndim_normclass_ndim_normClassNdimNormClassNdimNormClassNdimNorm, thresholdthresholdThresholdThresholdThreshold

Siehe auch

histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dim

Modul

Foundation