using PropertyGridLib.Attributes; using PropertyGridLib.Controls; using System; using System.ComponentModel; using TeamAAS.FlowEditor.Plugins; using TeamAAS.FlowEngine.FormulaData; namespace Plugins.Halcon.Models { // ───────────────────────────────────────────────────────────────────── // HALCON 图像处理分类算子模型(从主程序集迁入分类 DLL)。 // 类型全名保持不变(Plugins.Halcon.Models.*),旧流程经 FlowSerializationBinder 兜底解析。 // ───────────────────────────────────────────────────────────────────── /// 阈值分割:灰度落在 [最小,最大] 区间的像素提取为区域。 [Serializable] public class HalconThresholdModel : HalconOperatorModelBase { [Category("I.输入")] [DisplayName("1.输入图像")] [Description("上游图像(HObject/GenImage)。通常绑定容器输入 &{输入.图像}")] [FormulaEditor(typeof(PluginDataProvider))] public FormulaBound ImageSource { get; set; } = new FormulaBound(); [Category("II.参数")] [DisplayName("1.最小灰度")] [Description("灰度下限(含)")] public double MinGray { get; set; } = 128; [Category("II.参数")] [DisplayName("2.最大灰度")] [Description("灰度上限(含)")] public double MaxGray { get; set; } = 255; } /// 连通域:把一个区域拆成互不相连的多个独立区域,并给出数量。 [Serializable] public class HalconConnectionModel : HalconOperatorModelBase { [Category("I.输入")] [DisplayName("1.输入区域")] [Description("上游区域(一般来自阈值分割的输出「区域」)")] [FormulaEditor(typeof(PluginDataProvider))] public FormulaBound RegionSource { get; set; } = new FormulaBound(); } /// 图像预处理:滤波 / 灰度线性变换 / 转灰度。 [Serializable] public class HalconPreprocessModel : HalconOperatorModelBase { [Category("I.输入")] [DisplayName("1.输入图像")] [Description("上游图像")] [FormulaEditor(typeof(PluginDataProvider))] public FormulaBound ImageSource { get; set; } = new FormulaBound(); [Category("II.参数")] [DisplayName("1.处理方式")] [Description("选择预处理算子")] public HalconPreprocessType ProcessType { get; set; } = HalconPreprocessType.均值滤波; [Category("II.参数")] [DisplayName("2.参数1")] [Description("均值/中值/高斯:掩膜尺寸(奇数);线性变换:倍率 mult;转灰度:忽略")] public double Param1 { get; set; } = 3; [Category("II.参数")] [DisplayName("3.参数2")] [Description("均值:掩膜高(0=与参数1相同);线性变换:偏置 add;其它忽略")] public double Param2 { get; set; } = 0; } [Serializable] public enum HalconPreprocessType { 均值滤波 = 0, 中值滤波 = 1, 高斯滤波 = 2, 灰度线性变换 = 3, 转灰度 = 4, } /// 形态学:对区域做膨胀/腐蚀/开/闭运算。 [Serializable] public class HalconMorphologyModel : HalconOperatorModelBase { [Category("I.输入")] [DisplayName("1.输入区域")] [Description("上游区域")] [FormulaEditor(typeof(PluginDataProvider))] public FormulaBound RegionSource { get; set; } = new FormulaBound(); [Category("II.参数")] [DisplayName("1.操作")] [Description("膨胀/腐蚀/开运算/闭运算(圆形结构元)")] public HalconMorphOperation Operation { get; set; } = HalconMorphOperation.膨胀; [Category("II.参数")] [DisplayName("2.半径")] [Description("圆形结构元半径(像素)")] public double Radius { get; set; } = 3.0; } [Serializable] public enum HalconMorphOperation { 膨胀 = 0, 腐蚀 = 1, 开运算 = 2, 闭运算 = 3, } }