class_ndim_normclass_ndim_normClassNdimNormClassNdimNormclass_ndim_norm类N维范数(算子)
名称
class_ndim_normclass_ndim_normClassNdimNormClassNdimNormclass_ndim_norm — 使用超球体或超立方体对像素进行分类。
签名
Herror class_ndim_norm(const Hobject MultiChannelImage, Hobject* Regions, const char* Metric, const char* SingleMultiple, double Radius, double Center)
Herror T_class_ndim_norm(const Hobject MultiChannelImage, Hobject* Regions, const Htuple Metric, const Htuple SingleMultiple, const Htuple Radius, const Htuple Center)
void ClassNdimNorm(const HObject& MultiChannelImage, HObject* Regions, const HTuple& Metric, const HTuple& SingleMultiple, const HTuple& Radius, const HTuple& Center)
HRegion HImage::ClassNdimNorm(const HString& Metric, const HString& SingleMultiple, const HTuple& Radius, const HTuple& Center) const
HRegion HImage::ClassNdimNorm(const HString& Metric, const HString& SingleMultiple, double Radius, double Center) const
HRegion HImage::ClassNdimNorm(const char* Metric, const char* SingleMultiple, double Radius, double Center) const
HRegion HImage::ClassNdimNorm(const wchar_t* Metric, const wchar_t* SingleMultiple, double Radius, double Center) const
(
Windows only)
static void HOperatorSet.ClassNdimNorm(HObject multiChannelImage, out HObject regions, HTuple metric, HTuple singleMultiple, HTuple radius, HTuple center)
HRegion HImage.ClassNdimNorm(string metric, string singleMultiple, HTuple radius, HTuple center)
HRegion HImage.ClassNdimNorm(string metric, string singleMultiple, double radius, double center)
描述
class_ndim_normclass_ndim_normClassNdimNormClassNdimNormClassNdimNormclass_ndim_norm 对 MultiChannelImageMultiChannelImageMultiChannelImageMultiChannelImagemultiChannelImagemulti_channel_image 中给定的多通道图像像素进行分类。结果以 RegionsRegionsRegionsRegionsregionsregions 形式返回,每个分类对象对应一个区域。所用度量标准('euclid'"euclid""euclid""euclid""euclid""euclid" 或 'maximum'"maximum""maximum""maximum""maximum""maximum")由
MetricMetricMetricMetricmetricmetric 参数决定。该参数值必须与 learn_ndim_normlearn_ndim_normLearnNdimNormLearnNdimNormLearnNdimNormlearn_ndim_norm 中使用的值一致。SingleMultipleSingleMultipleSingleMultipleSingleMultiplesingleMultiplesingle_multiple
参数决定每个聚类生成单个区域(‘single’)或多个区域(‘multiple’)。RadiusRadiusRadiusRadiusradiusradius 参数分别决定聚类的半径或边长的一半。CenterCenterCenterCentercentercenter 参数决定其中心位置。
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 在元组级别上自动并行化。
参数
MultiChannelImageMultiChannelImageMultiChannelImageMultiChannelImagemultiChannelImagemulti_channel_image (输入对象) (multichannel-)image(-array) → objectHImageHObjectHImageHobject (byte)
多通道输入图像。
RegionsRegionsRegionsRegionsregionsregions (输出对象) region-array → objectHRegionHObjectHRegionHobject *
分类结果。
MetricMetricMetricMetricmetricmetric (输入控制) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
应使用的度量。
默认值:
'euclid'
"euclid"
"euclid"
"euclid"
"euclid"
"euclid"
值列表:
'euclid'"euclid""euclid""euclid""euclid""euclid", 'maximum'"maximum""maximum""maximum""maximum""maximum"
SingleMultipleSingleMultipleSingleMultipleSingleMultiplesingleMultiplesingle_multiple (输入控制) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
返回一个区域,或为每个聚类返回一个区域。
默认值:
'single'
"single"
"single"
"single"
"single"
"single"
值列表:
'multiple'"multiple""multiple""multiple""multiple""multiple", 'single'"single""single""single""single""single"
示例 (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 ()
{
HImage image ("meer"),
t1, t2, t3,
m1, m2, m3, m;
HWindow w;
w.SetColor ("green");
image.Display (w);
cout << "Draw your region of interest " << endl;
HRegion testreg = w.DrawRegion ();
t1 = image.TextureLaws ("el", 2, 5); m1 = t1.MeanImage (21, 21);
t2 = image.TextureLaws ("es", 2, 5); m2 = t2.MeanImage (21, 21);
t3 = image.TextureLaws ("le", 2, 5); m3 = t3.MeanImage (21, 21);
m = m1.Compose3 (m2, m3);
Tuple Metric = "euclid";
Tuple Radius = 20.0;
Tuple MinNum = 5;
Tuple NbrCha = 3;
HRegion empty;
Tuple cen, t;
Radius = testreg.LearnNdimNorm (empty, m, Metric, Radius,
MinNum, NbrCha, &cen, &t);
Tuple RegMod = "multiple";
HRegionArray reg = m.ClassNdimNorm (Metric, RegMod, Radius, cen, NbrCha);
w.SetColored (12);
reg.Display (w);
cout << "Result of classification" << endl;
return (0);
}
示例(C)
read_image(&Image,"meer:);
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 3-dimensional charachteristic */
texture_laws(Image,&T1,"el",2,5);
mean_image(T1,&M1,21,21);
texture_laws(Image,&T2,"es",2,5);
mean_image(T2,&M2,21,21);
texture_laws(Image,&T3,"le",2,5);
mean_image(T3,&M3,21,21);
compose3(M1,M2,M3,&M);
/* Cluster for 3-dimensional characteristic area determine training area */
create_tuple(&Metric,1);
set_s(Metric,"euclid",0);
create_tuple(&Radius,1);
set_d(Radius,20.0,0);
create_tuple(&MinNumber,1);
set_i(MinNumber,5,0);
T_learn_ndim_norm(Testobj,EMPTY_REGION,&M,"euclid",Radius,MinNumber,
&Radius,&Center,NULL);
/* Segmentation */
create_tuple(&RegionMode,1);
set_s(RegionMode,"multiple",0);
class_ndim_norm(M,&Regions,Metric,RegionMode,Radius,Center);
set_colored(WindowHandle,12);
disp_region(Regions,WindowHandle);
fwrite_string("Result of classification;");
fwrite_string("Each cluster in another color.");
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 ()
{
HImage image ("meer"),
t1, t2, t3,
m1, m2, m3, m;
HWindow w;
w.SetColor ("green");
image.Display (w);
cout << "Draw your region of interest " << endl;
HRegion testreg = w.DrawRegion ();
t1 = image.TextureLaws ("el", 2, 5); m1 = t1.MeanImage (21, 21);
t2 = image.TextureLaws ("es", 2, 5); m2 = t2.MeanImage (21, 21);
t3 = image.TextureLaws ("le", 2, 5); m3 = t3.MeanImage (21, 21);
m = m1.Compose3 (m2, m3);
Tuple Metric = "euclid";
Tuple Radius = 20.0;
Tuple MinNum = 5;
Tuple NbrCha = 3;
HRegion empty;
Tuple cen, t;
Radius = testreg.LearnNdimNorm (empty, m, Metric, Radius,
MinNum, NbrCha, &cen, &t);
Tuple RegMod = "multiple";
HRegionArray reg = m.ClassNdimNorm (Metric, RegMod, Radius, cen, NbrCha);
w.SetColored (12);
reg.Display (w);
cout << "Result of classification" << endl;
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 ()
{
HImage image ("meer"),
t1, t2, t3,
m1, m2, m3, m;
HWindow w;
w.SetColor ("green");
image.Display (w);
cout << "Draw your region of interest " << endl;
HRegion testreg = w.DrawRegion ();
t1 = image.TextureLaws ("el", 2, 5); m1 = t1.MeanImage (21, 21);
t2 = image.TextureLaws ("es", 2, 5); m2 = t2.MeanImage (21, 21);
t3 = image.TextureLaws ("le", 2, 5); m3 = t3.MeanImage (21, 21);
m = m1.Compose3 (m2, m3);
Tuple Metric = "euclid";
Tuple Radius = 20.0;
Tuple MinNum = 5;
Tuple NbrCha = 3;
HRegion empty;
Tuple cen, t;
Radius = testreg.LearnNdimNorm (empty, m, Metric, Radius,
MinNum, NbrCha, &cen, &t);
Tuple RegMod = "multiple";
HRegionArray reg = m.ClassNdimNorm (Metric, RegMod, Radius, cen, NbrCha);
w.SetColored (12);
reg.Display (w);
cout << "Result of classification" << endl;
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 ()
{
HImage image ("meer"),
t1, t2, t3,
m1, m2, m3, m;
HWindow w;
w.SetColor ("green");
image.Display (w);
cout << "Draw your region of interest " << endl;
HRegion testreg = w.DrawRegion ();
t1 = image.TextureLaws ("el", 2, 5); m1 = t1.MeanImage (21, 21);
t2 = image.TextureLaws ("es", 2, 5); m2 = t2.MeanImage (21, 21);
t3 = image.TextureLaws ("le", 2, 5); m3 = t3.MeanImage (21, 21);
m = m1.Compose3 (m2, m3);
Tuple Metric = "euclid";
Tuple Radius = 20.0;
Tuple MinNum = 5;
Tuple NbrCha = 3;
HRegion empty;
Tuple cen, t;
Radius = testreg.LearnNdimNorm (empty, m, Metric, Radius,
MinNum, NbrCha, &cen, &t);
Tuple RegMod = "multiple";
HRegionArray reg = m.ClassNdimNorm (Metric, RegMod, Radius, cen, NbrCha);
w.SetColored (12);
reg.Display (w);
cout << "Result of classification" << endl;
return (0);
}
复杂度
设 N 为聚类的数量,A 为输入区域的面积。则运行时间复杂度为 O(N,A)。
结果
class_ndim_normclass_ndim_normClassNdimNormClassNdimNormClassNdimNormclass_ndim_norm 在所有参数正确时返回 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" 的值,可确定系统对输入图像和输出区域的行为方式。如有必要,则抛出异常。
可能的前趋
learn_ndim_normlearn_ndim_normLearnNdimNormLearnNdimNormLearnNdimNormlearn_ndim_norm,
compose2compose2Compose2Compose2Compose2compose2,
compose3compose3Compose3Compose3Compose3compose3,
compose4compose4Compose4Compose4Compose4compose4,
compose5compose5Compose5Compose5Compose5compose5,
compose6compose6Compose6Compose6Compose6compose6,
compose7compose7Compose7Compose7Compose7compose7
可能的后继
connectionconnectionConnectionConnectionConnectionconnection,
select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape,
reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain,
select_grayselect_graySelectGraySelectGraySelectGrayselect_gray
替代
class_2dim_supclass_2dim_supClass2dimSupClass2dimSupClass2dimSupclass_2dim_sup,
class_2dim_unsupclass_2dim_unsupClass2dimUnsupClass2dimUnsupClass2dimUnsupclass_2dim_unsup
模块
基础