Skip to content

class_2dim_unsupClass2dimUnsupClass2dimUnsupclass_2dim_unsupclass_2dim_unsupπŸ”—

Short descriptionπŸ”—

class_2dim_unsupClass2dimUnsupClass2dimUnsupclass_2dim_unsupclass_2dim_unsup β€” Segment two images by clustering.

SignatureπŸ”—

class_2dim_unsup( image Image1, image Image2, out region Classes, integer Threshold, integer NumClasses )void Class2dimUnsup( const HObject& Image1, const HObject& Image2, HObject* Classes, const HTuple& Threshold, const HTuple& NumClasses )static void HOperatorSet.Class2dimUnsup( HObject image1, HObject image2, out HObject classes, HTuple threshold, HTuple numClasses )def class_2dim_unsup( image_1: HObject, image_2: HObject, threshold: int, num_classes: int ) -> HObject

Herror class_2dim_unsup( const Hobject Image1, const Hobject Image2, Hobject* Classes, const Hlong Threshold, const Hlong NumClasses )

Herror T_class_2dim_unsup( const Hobject Image1, const Hobject Image2, Hobject* Classes, const Htuple Threshold, const Htuple NumClasses )

HRegion HImage::Class2dimUnsup( const HImage& Image2, Hlong Threshold, Hlong NumClasses ) const

HRegion HImage.Class2dimUnsup( HImage image2, int threshold, int numClasses )

DescriptionπŸ”—

class_2dim_unsupClass2dimUnsup performs a classification with two single-channel images. First, a two-dimensional histogram of the two images is computed (histo_2dimHisto2dim). In this histogram, the first maximum is extracted; it serves as the first cluster center. The histogram is computed with the intersection of the domains of both images (see reduce_domainReduceDomain). After this, all pixels in the images that are at most Thresholdthresholdthreshold pixels from the cluster center in the maximum norm, are determined. These pixels form one output region. Next, the pixels thus classified are deleted from the histogram so that they are not taken into account for the next class. In this modified histogram, again the maximum is extracted; it again serves as a cluster center. The above steps are repeated NumClassesnumClassesnum_classes times; thus, NumClassesnumClassesnum_classes output regions result. Only pixels defined in both images are returned.

AttentionπŸ”—

Both input images must have the same size.

Execution informationπŸ”—

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

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

  • Processed without parallelization.

ParametersπŸ”—

Image1image1image_1 (input_object) singlechannelimage β†’ object (byte)HObject (byte)HImage (byte)HObject (byte)Hobject (byte)

First input image.

Image2image2image_2 (input_object) singlechannelimage β†’ object (byte)HObject (byte)HImage (byte)HObject (byte)Hobject (byte)

Second input image.

Classesclassesclasses (output_object) region-array β†’ objectHObjectHRegionHObjectHobject *

Classification result.

Thresholdthresholdthreshold (input_control) integer β†’ (integer)HTuple (Hlong)HTuple (int / long)intHtuple (Hlong)

Threshold (maximum distance to the cluster’s center).

Default: 1515
Suggested values: 0, 2, 5, 8, 12, 17, 20, 30, 50, 700, 2, 5, 8, 12, 17, 20, 30, 50, 70

NumClassesnumClassesnum_classes (input_control) integer β†’ (integer)HTuple (Hlong)HTuple (int / long)intHtuple (Hlong)

Number of classes (cluster centers).

Default: 55
Suggested values: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30, 40, 501, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30, 40, 50

ExampleπŸ”—

(C)

read_image(&ColorImage,"patras")\;
decompose3(ColorImage,&Red,&Green,&Blue)\;
class_2dim_unsup(Red,Green,&Seg,15,5)\;
set_colored(WindowHandle,12)\;
disp_region(Seg,WindowHandle)\;
(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)\;
  }
 HImage   colimg (argv[1]),
           green, blue\;
 HWindow  w\;
  Hlong     nc\;
 if ((nc = colimg.CountChannels ()) != 3)
  {
    cout << argv[1] << " is not a rgb-image " << endl\;
    return (-2)\;
  }
 colimg.Display (w)\;
 HImage        red = colimg.Decompose3 (&green, &blue)\;
  HRegionArray  seg = red.Class2dimUnsup (green, 15, 5)\;
 w.SetDraw ("margin")\;
  w.SetColored (12)\;
  seg.Display (w)\;
  w.Click ()\;
 return (0)\;
}

ResultπŸ”—

class_2dim_unsupClass2dimUnsup 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

decompose2Decompose2, decompose3Decompose3, median_imageMedianImage, anisotropic_diffusionAnisotropicDiffusion, reduce_domainReduceDomain

Possible successors

select_shapeSelectShape, select_graySelectGray, connectionConnection

Alternatives

thresholdThreshold, histo_2dimHisto2dim, class_2dim_supClass2dimSup, class_ndim_normClassNdimNorm

ModuleπŸ”—

Foundation