class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsupclass_2dim_unsup类二维分割不使用像素(算子)
名称
class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsupclass_2dim_unsup — 通过聚类对两幅图像进行分割。
签名
描述
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
模块
基础