Herror ::class_2dim_sup (
    Hobject ImageCol,
    Hobject ImageRow,
    Hobject FeatureSpace,
    Hobject *RegionClass2Dim
)
HRegion HImage::Class2dimSup (
    const HImageArray &ImageRow,
    const HRegionArray &FeatureSpace
) const
HRegionArray HImageArray::Class2dimSup (
    const HImageArray &ImageRow,
    const HRegionArray &FeatureSpace
) const

Segment an image using two-dimensional pixel classification.

::class_2dim_sup 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_{c},g_{l}), which is determined by the respective gray values, is contained in the region FeatureSpace. g_{l} is here a gray value from the image ImageRow, while g_{c} is the corresponding gray value from ImageCol.

Let P be a point with the coordinates P=(L,C), g_{l} be the gray value at position (L,C) in the image ImageRow, and g_{c} be the gray value at position (L,C) in the image ImageCol. Then the point P is aggregated into the output region if

      (g_c,g_l)  is an element of FeatureSpace
g_{l} is interpreted as row coordinate and g_{c} as colum coordinate.

For the generation of FeatureSpace, see ::histo_2dim. The feature space can be modified by applying region transformation operators, such as ::rank_region, ::dilation1, ::shape_trans, ::elliptic_axis, etc., before calling ::class_2dim_sup.

The parameters ImageCol and ImageRow must contain an equal number of images with the same respective size. The image points are taken from the intersection of the domains of both images (see ::reduce_domain).


Parameters

ImageCol (input_object)
image(-array) -> Hobject: HImage(Array) ( byte / int1 / cyclic / direction )
Input image (first channel).

ImageRow (input_object)
image(-array) -> Hobject: HImage(Array) ( byte )
Input image (second channel).

FeatureSpace (input_object)
region(-array) -> Hobject: HRegion(Array)
Region defining the feature space.

RegionClass2Dim (output_object)
region(-array) -> Hobject * : HRegion(Array)
Classified regions.


Example
#include  "HalconCpp.h"
#include  <iostream.h>

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;
  long      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 F be the area of the input region. Then the runtime complexity is O(256^2 + F).


Result

::class_2dim_sup always returns H_MSG_TRUE. The behavior with respect to the input images and output regions can be determined by setting the values of the flags 'no_object_result', 'empty_region_result', and 'store_empty_region' with ::set_system. If necessary, an exception is raised.


Possible Predecessors

::histo_2dim, ::threshold, ::draw_region, ::dilation1, ::opening, ::shape_trans


Possible Successors

::connection, ::select_shape, ::select_gray


Alternatives

::class_ndim_norm, ::class_ndim_box, ::threshold, ::histo_2dim


Module

Region processing



Copyright © 1996-2002 MVTec Software GmbH