Skip to content

class_2dim_supClass2dimSupClass2dimSupclass_2dim_supclass_2dim_sup🔗

Short description🔗

class_2dim_supClass2dimSupClass2dimSupclass_2dim_supclass_2dim_sup — Segment an image using two-dimensional pixel classification.

Signature🔗

class_2dim_sup( image ImageCol, image ImageRow, region FeatureSpace, out region RegionClass2Dim )void Class2dimSup( const HObject& ImageCol, const HObject& ImageRow, const HObject& FeatureSpace, HObject* RegionClass2Dim )static void HOperatorSet.Class2dimSup( HObject imageCol, HObject imageRow, HObject featureSpace, out HObject regionClass2Dim )def class_2dim_sup( image_col: HObject, image_row: HObject, feature_space: HObject ) -> HObject

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 )

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

HRegion HImage.Class2dimSup( HImage imageRow, HRegion featureSpace )

Description🔗

class_2dim_supClass2dimSup 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:

A point from the input region of an image is accepted if the point \((g_{r},g_{c})\), which is determined by the respective gray values, is contained in the region FeatureSpacefeatureSpacefeature_space. \(g_{r}\) is here a gray value from the image ImageRowimageRowimage_row, while \(g_{c}\) is the corresponding gray value from ImageColimageColimage_col.

Let \(P\) be a point with the coordinates \(P=(R,C)\), \(g_{r}\) be the gray value at position \((R,C)\) in the image ImageRowimageRowimage_row, and \(g_{c}\) be the gray value at position \((R,C)\) in the image ImageColimageColimage_col. Then the point \(P\) is aggregated into the output region if

\[\begin{eqnarray*} (g_{r},g_{c}) \in \textrm{FeatureSpace} \end{eqnarray*}\]

\(g_{r}\) is interpreted as row coordinate and \(g_{c}\) as column coordinate.

For the generation of FeatureSpacefeatureSpacefeature_space, see histo_2dimHisto2dim. The feature space can be modified by applying region transformation operators, such as rank_regionRankRegion, dilation1Dilation1, shape_transShapeTrans, elliptic_axisEllipticAxis, etc., before calling class_2dim_supClass2dimSup.

The parameters ImageColimageColimage_col and ImageRowimageRowimage_row must contain an equal number of images with the same size. The image points are taken from the intersection of the domains of both images (see reduce_domainReduceDomain).

Execution information🔗

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

Parameters🔗

ImageColimageColimage_col (input_object) singlechannelimage(-array) → object (byte / direction / cyclic / int1)HObject (byte / direction / cyclic / int1)HImage (byte / direction / cyclic / int1)HObject (byte / direction / cyclic / int1)Hobject (byte / direction / cyclic / int1)

Input image (first channel).

ImageRowimageRowimage_row (input_object) singlechannelimage(-array) → object (byte / direction / cyclic / int1)HObject (byte / direction / cyclic / int1)HImage (byte / direction / cyclic / int1)HObject (byte / direction / cyclic / int1)Hobject (byte / direction / cyclic / int1)

Input image (second channel).

FeatureSpacefeatureSpacefeature_space (input_object) region(-array) → objectHObjectHRegionHObjectHobject

Region defining the feature space.

RegionClass2DimregionClass2Dimregion_class_2dim (output_object) region(-array) → objectHObjectHRegionHObjectHobject *

Classified regions.

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()\;
(C++)
#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_supClass2dimSup 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", 'empty_region_result'"empty_region_result", and 'store_empty_region'"store_empty_region" with set_systemSetSystem. If necessary, an exception is raised.

Combinations with other operators🔗

Combinations

Possible predecessors

histo_2dimHisto2dim, thresholdThreshold, draw_regionDrawRegion, dilation1Dilation1, openingOpening, shape_transShapeTrans

Possible successors

connectionConnection, select_shapeSelectShape, select_graySelectGray

Alternatives

class_ndim_normClassNdimNorm, thresholdThreshold

See also

histo_2dimHisto2dim

Module🔗

Foundation