HalconImageProcessingModels.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using PropertyGridLib.Attributes;
  2. using PropertyGridLib.Controls;
  3. using System;
  4. using System.ComponentModel;
  5. using TeamAAS.FlowEditor.Plugins;
  6. using TeamAAS.FlowEngine.FormulaData;
  7. namespace Plugins.Halcon.Models
  8. {
  9. // ─────────────────────────────────────────────────────────────────────
  10. // HALCON 图像处理分类算子模型(从主程序集迁入分类 DLL)。
  11. // 类型全名保持不变(Plugins.Halcon.Models.*),旧流程经 FlowSerializationBinder 兜底解析。
  12. // ─────────────────────────────────────────────────────────────────────
  13. /// <summary>阈值分割:灰度落在 [最小,最大] 区间的像素提取为区域。</summary>
  14. [Serializable]
  15. public class HalconThresholdModel : HalconOperatorModelBase
  16. {
  17. [Category("I.输入")]
  18. [DisplayName("1.输入图像")]
  19. [Description("上游图像(HObject/GenImage)。通常绑定容器输入 &{输入.图像}")]
  20. [FormulaEditor(typeof(PluginDataProvider))]
  21. public FormulaBound<object> ImageSource { get; set; } = new FormulaBound<object>();
  22. [Category("II.参数")]
  23. [DisplayName("1.最小灰度")]
  24. [Description("灰度下限(含)")]
  25. public double MinGray { get; set; } = 128;
  26. [Category("II.参数")]
  27. [DisplayName("2.最大灰度")]
  28. [Description("灰度上限(含)")]
  29. public double MaxGray { get; set; } = 255;
  30. }
  31. /// <summary>连通域:把一个区域拆成互不相连的多个独立区域,并给出数量。</summary>
  32. [Serializable]
  33. public class HalconConnectionModel : HalconOperatorModelBase
  34. {
  35. [Category("I.输入")]
  36. [DisplayName("1.输入区域")]
  37. [Description("上游区域(一般来自阈值分割的输出「区域」)")]
  38. [FormulaEditor(typeof(PluginDataProvider))]
  39. public FormulaBound<object> RegionSource { get; set; } = new FormulaBound<object>();
  40. }
  41. /// <summary>图像预处理:滤波 / 灰度线性变换 / 转灰度。</summary>
  42. [Serializable]
  43. public class HalconPreprocessModel : HalconOperatorModelBase
  44. {
  45. [Category("I.输入")]
  46. [DisplayName("1.输入图像")]
  47. [Description("上游图像")]
  48. [FormulaEditor(typeof(PluginDataProvider))]
  49. public FormulaBound<object> ImageSource { get; set; } = new FormulaBound<object>();
  50. [Category("II.参数")]
  51. [DisplayName("1.处理方式")]
  52. [Description("选择预处理算子")]
  53. public HalconPreprocessType ProcessType { get; set; } = HalconPreprocessType.均值滤波;
  54. [Category("II.参数")]
  55. [DisplayName("2.参数1")]
  56. [Description("均值/中值/高斯:掩膜尺寸(奇数);线性变换:倍率 mult;转灰度:忽略")]
  57. public double Param1 { get; set; } = 3;
  58. [Category("II.参数")]
  59. [DisplayName("3.参数2")]
  60. [Description("均值:掩膜高(0=与参数1相同);线性变换:偏置 add;其它忽略")]
  61. public double Param2 { get; set; } = 0;
  62. }
  63. [Serializable]
  64. public enum HalconPreprocessType
  65. {
  66. 均值滤波 = 0,
  67. 中值滤波 = 1,
  68. 高斯滤波 = 2,
  69. 灰度线性变换 = 3,
  70. 转灰度 = 4,
  71. }
  72. /// <summary>形态学:对区域做膨胀/腐蚀/开/闭运算。</summary>
  73. [Serializable]
  74. public class HalconMorphologyModel : HalconOperatorModelBase
  75. {
  76. [Category("I.输入")]
  77. [DisplayName("1.输入区域")]
  78. [Description("上游区域")]
  79. [FormulaEditor(typeof(PluginDataProvider))]
  80. public FormulaBound<object> RegionSource { get; set; } = new FormulaBound<object>();
  81. [Category("II.参数")]
  82. [DisplayName("1.操作")]
  83. [Description("膨胀/腐蚀/开运算/闭运算(圆形结构元)")]
  84. public HalconMorphOperation Operation { get; set; } = HalconMorphOperation.膨胀;
  85. [Category("II.参数")]
  86. [DisplayName("2.半径")]
  87. [Description("圆形结构元半径(像素)")]
  88. public double Radius { get; set; } = 3.0;
  89. }
  90. [Serializable]
  91. public enum HalconMorphOperation
  92. {
  93. 膨胀 = 0,
  94. 腐蚀 = 1,
  95. 开运算 = 2,
  96. 闭运算 = 3,
  97. }
  98. }