规范类名及命名空间名称

This commit is contained in:
李伟
2026-04-13 14:35:37 +08:00
parent c430ec229b
commit ace1c70ddf
217 changed files with 1271 additions and 1384 deletions
@@ -0,0 +1,102 @@
// ============================================================================
// Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved.
// 文件å? MorphologyProcessor.cs
// æè¿°: å½¢æ€å­¦å¤„ç†ç®—å­ï¼Œç”¨äºŽäºŒå€¼å›¾åƒçš„å½¢æ€å­¦æ“作
// 功能:
// - è…蚀(Erode):收缩目标区域
// - 膨胀(Dilate):扩张目标区域
// - å¼€è¿ç®—(Open):先è…蚀åŽè†¨èƒ€ï¼Œå޻除å°ç›®æ ‡
// - é—­è¿ç®—(Close):先膨胀åŽè…蚀,填充å°å­”æ´ž
// 算法: 数学形æ€å­¦è¿ç®—
// 作è€? æŽä¼Ÿ wei.lw.li@hexagon.com
// ============================================================================
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
using Serilog;
using System.Drawing;
using XP.ImageProcessing.Core;
namespace XP.ImageProcessing.Processors;
/// <summary>
/// å½¢æ€å­¦å¤„ç†ç®—å­
/// </summary>
public class MorphologyProcessor : ImageProcessorBase
{
private static readonly ILogger _logger = Log.ForContext<MorphologyProcessor>();
public MorphologyProcessor()
{
Name = LocalizationHelper.GetString("MorphologyProcessor_Name");
Description = LocalizationHelper.GetString("MorphologyProcessor_Description");
}
protected override void InitializeParameters()
{
Parameters.Add("Operation", new ProcessorParameter(
"Operation",
LocalizationHelper.GetString("MorphologyProcessor_Operation"),
typeof(string),
"Erode",
null,
null,
LocalizationHelper.GetString("MorphologyProcessor_Operation_Desc"),
new string[] { "Erode", "Dilate", "Open", "Close" }));
Parameters.Add("KernelSize", new ProcessorParameter(
"KernelSize",
LocalizationHelper.GetString("MorphologyProcessor_KernelSize"),
typeof(int),
3,
1,
21,
LocalizationHelper.GetString("MorphologyProcessor_KernelSize_Desc")));
Parameters.Add("Iterations", new ProcessorParameter(
"Iterations",
LocalizationHelper.GetString("MorphologyProcessor_Iterations"),
typeof(int),
1,
1,
10,
LocalizationHelper.GetString("MorphologyProcessor_Iterations_Desc")));
_logger.Debug("InitializeParameters");
}
public override Image<Gray, byte> Process(Image<Gray, byte> inputImage)
{
string operation = GetParameter<string>("Operation");
int kernelSize = GetParameter<int>("KernelSize");
int iterations = GetParameter<int>("Iterations");
var kernel = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(kernelSize, kernelSize), new Point(-1, -1));
var result = inputImage.Clone();
switch (operation)
{
case "Erode":
CvInvoke.Erode(inputImage, result, kernel, new Point(-1, -1),
iterations, BorderType.Default, default);
break;
case "Dilate":
CvInvoke.Dilate(inputImage, result, kernel, new Point(-1, -1),
iterations, BorderType.Default, default);
break;
case "Open":
CvInvoke.MorphologyEx(inputImage, result, MorphOp.Open, kernel,
new Point(-1, -1), iterations, BorderType.Default, default);
break;
case "Close":
CvInvoke.MorphologyEx(inputImage, result, MorphOp.Close, kernel,
new Point(-1, -1), iterations, BorderType.Default, default);
break;
}
_logger.Debug("Process:Operation = {operation},KernelSize = {kernelSize},Iterations = {iterations}", operation, kernelSize, iterations);
return result;
}
}