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

名称

class_2dim_supclass_2dim_supClass2dimSupClass2dimSupclass_2dim_sup — 使用二维像素分类对图像进行分割。

签名

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)

def class_2dim_sup(image_col: HObject, image_row: HObject, feature_space: HObject) -> HObject

描述

class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSupclass_2dim_sup 通过二维特征空间对双通道图像中的点进行分类。每个点使用两个灰度值(分别来自两幅图像)作为特征。特征空间由输入区域表示。分类过程如下:

若图像输入区域中的某一点由对应灰度值确定的坐标 位于特征空间 FeatureSpaceFeatureSpaceFeatureSpaceFeatureSpacefeatureSpacefeature_space,则该点被接受。其中 取自图像 ImageRowImageRowImageRowImageRowimageRowimage_row 的灰度值,而 则取自图像 ImageColImageColImageColImageColimageColimage_col 的对应灰度值。

设点 的坐标为 为图像 ImageRowImageRowImageRowImageRowimageRowimage_row 中位置 处的灰度值, 为图像 ImageColImageColImageColImageColimageColimage_col 中位置 处的灰度值。点 将被聚合到输出区域中,如果 其中 被解释为行坐标, 被解释为列坐标。

有关 FeatureSpaceFeatureSpaceFeatureSpaceFeatureSpacefeatureSpacefeature_space 的生成,请参阅 histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dimhisto_2dim。在调用 class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSupclass_2dim_sup 之前,可通过应用区域变换算子,如 rank_regionrank_regionRankRegionRankRegionRankRegionrank_regiondilation1dilation1Dilation1Dilation1Dilation1dilation1shape_transshape_transShapeTransShapeTransShapeTransshape_transelliptic_axiselliptic_axisEllipticAxisEllipticAxisEllipticAxiselliptic_axis 等,对特征空间进行修改。

参数 ImageColImageColImageColImageColimageColimage_colImageRowImageRowImageRowImageRowimageRowimage_row 必须包含数量相等且尺寸相同的图像。图像点取自两幅图像域的交集(参见 reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain)。

执行信息

参数

ImageColImageColImageColImageColimageColimage_col (输入对象)  singlechannelimage(-array) objectHImageHObjectHImageHobject (byte / direction / cyclic / int1)

输入图像(第一通道)。

ImageRowImageRowImageRowImageRowimageRowimage_row (输入对象)  singlechannelimage(-array) objectHImageHObjectHImageHobject (byte / direction / cyclic / int1)

输入图像(第二通道)。

FeatureSpaceFeatureSpaceFeatureSpaceFeatureSpacefeatureSpacefeature_space (输入对象)  region(-array) objectHRegionHObjectHRegionHobject

定义特征空间的区域。

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

分类区域。

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

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

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

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

复杂度

设 A 为输入区域的面积。则运行时间复杂度为 O(256^2 + A)。

结果

class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSupclass_2dim_sup 返回 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" 的值,可确定系统对输入图像和输出区域的行为方式。如有必要,则抛出异常。

可能的前趋

histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dimhisto_2dim, thresholdthresholdThresholdThresholdThresholdthreshold, draw_regiondraw_regionDrawRegionDrawRegionDrawRegiondraw_region, dilation1dilation1Dilation1Dilation1Dilation1dilation1, openingopeningOpeningOpeningOpeningopening, shape_transshape_transShapeTransShapeTransShapeTransshape_trans

可能的后继

connectionconnectionConnectionConnectionConnectionconnection, select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape, select_grayselect_graySelectGraySelectGraySelectGrayselect_gray

替代

class_ndim_normclass_ndim_normClassNdimNormClassNdimNormClassNdimNormclass_ndim_norm, thresholdthresholdThresholdThresholdThresholdthreshold

另见

histo_2dimhisto_2dimHisto2dimHisto2dimHisto2dimhisto_2dim

模块

基础