class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsupclass_2dim_unsup类二维分割不使用像素(算子)

名称

class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsupclass_2dim_unsup — 通过聚类对两幅图像进行分割。

签名

class_2dim_unsup(Image1, Image2 : Classes : Threshold, NumClasses : )

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)

void Class2dimUnsup(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

static void HOperatorSet.Class2dimUnsup(HObject image1, HObject image2, out HObject classes, HTuple threshold, HTuple numClasses)

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

def class_2dim_unsup(image_1: HObject, image_2: HObject, threshold: int, num_classes: int) -> HObject

描述

class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsupClass2dimUnsupclass_2dim_unsup 对两幅单通道图像执行分类。首先计算两幅图像的二维直方图(histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dimhisto_2dim)。从直方图中提取首个最大值,作为首个聚类中心。该直方图基于两图像的交集区域计算(参见 reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain)。随后确定图像中所有距聚类中心最大范数距离不超过 ThresholdThresholdThresholdThresholdthresholdthreshold 像素的像素点,这些像素构成一个输出区域。接着从直方图中删除已分类像素,使其不影响后续分类。在修改后的直方图中再次提取最大值作为聚类中心。上述步骤重复执行 NumClassesNumClassesNumClassesNumClassesnumClassesnum_classes 次,最终生成 NumClassesNumClassesNumClassesNumClassesnumClassesnum_classes 个输出区域。仅返回两幅图像中均存在的像素。

注意

两张输入图像必须具有相同的尺寸。

执行信息

参数

Image1Image1Image1Image1image1image_1 (输入对象)  singlechannelimage objectHImageHObjectHImageHobject (byte)

第一张输入图像。

Image2Image2Image2Image2image2image_2 (输入对象)  singlechannelimage objectHImageHObjectHImageHobject (byte)

第二张输入图像。

ClassesClassesClassesClassesclassesclasses (输出对象)  region-array objectHRegionHObjectHRegionHobject *

分类结果。

ThresholdThresholdThresholdThresholdthresholdthreshold (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

阈值(到聚类中心的最大距离)。

默认值: 15

建议值: 0, 2, 5, 8, 12, 17, 20, 30, 50, 70

NumClassesNumClassesNumClassesNumClassesnumClassesnum_classes (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

类数(聚类中心)。

默认值: 5

建议值: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30, 40, 50

示例 (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);
  }

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

示例(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++ (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);
  }

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

示例 (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);
  }

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

示例 (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);
  }

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

结果

class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsupClass2dimUnsupclass_2dim_unsup 在所有参数正确时返回 2 (H_MSG_TRUE)。通过 set_systemset_systemSetSystemSetSystemSetSystemset_system 算子设置标志 'no_object_result'"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""empty_region_result"'store_empty_region'"store_empty_region""store_empty_region""store_empty_region""store_empty_region""store_empty_region" 的值,可确定系统对输入图像和输出区域的行为方式。如有必要,则抛出异常。

可能的前趋

decompose2decompose2Decompose2Decompose2Decompose2decompose2, decompose3decompose3Decompose3Decompose3Decompose3decompose3, median_imagemedian_imageMedianImageMedianImageMedianImagemedian_image, anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionAnisotropicDiffusionanisotropic_diffusion, reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain

可能的后继

select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape, select_grayselect_graySelectGraySelectGraySelectGrayselect_gray, connectionconnectionConnectionConnectionConnectionconnection

替代

thresholdthresholdThresholdThresholdThresholdthreshold, histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dimhisto_2dim, class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSupclass_2dim_sup, class_ndim_normclass_ndim_normClassNdimNormClassNdimNormClassNdimNormclass_ndim_norm

模块

基础