diff --git a/XP.Camera/BaslerCameraController.cs b/XP.Camera/BaslerCameraController.cs index 1155a2e..e6acaca 100644 --- a/XP.Camera/BaslerCameraController.cs +++ b/XP.Camera/BaslerCameraController.cs @@ -1,8 +1,7 @@ using Basler.Pylon; using Serilog; - -using CameraImageGrabbedEventArgs = XP.Camera.ImageGrabbedEventArgs; using CameraGrabErrorEventArgs = XP.Camera.GrabErrorEventArgs; +using CameraImageGrabbedEventArgs = XP.Camera.ImageGrabbedEventArgs; namespace XP.Camera; @@ -177,7 +176,6 @@ public class BaslerCameraController : ICameraController } } - /// public void ExecuteSoftwareTrigger() { @@ -460,7 +458,6 @@ public class BaslerCameraController : ICameraController } } - /// /// ConnectionLost 事件处理。在 pylon SDK 事件线程上调用。 /// @@ -514,4 +511,4 @@ public class BaslerCameraController : ICameraController throw new InvalidOperationException("Camera is not connected. Call Open() first."); } } -} +} \ No newline at end of file diff --git a/XP.Camera/CameraExceptions.cs b/XP.Camera/CameraExceptions.cs index 0b29fcb..37b2fb7 100644 --- a/XP.Camera/CameraExceptions.cs +++ b/XP.Camera/CameraExceptions.cs @@ -3,23 +3,44 @@ namespace XP.Camera; /// 所有相机相关错误的基类异常。 public class CameraException : Exception { - public CameraException() { } - public CameraException(string message) : base(message) { } - public CameraException(string message, Exception innerException) : base(message, innerException) { } + public CameraException() + { } + + public CameraException(string message) : base(message) + { + } + + public CameraException(string message, Exception innerException) : base(message, innerException) + { + } } /// 当相机连接意外断开时抛出的异常。 public class ConnectionLostException : CameraException { - public ConnectionLostException() { } - public ConnectionLostException(string message) : base(message) { } - public ConnectionLostException(string message, Exception innerException) : base(message, innerException) { } + public ConnectionLostException() + { } + + public ConnectionLostException(string message) : base(message) + { + } + + public ConnectionLostException(string message, Exception innerException) : base(message, innerException) + { + } } /// 当系统中无可用相机设备时抛出的异常。 public class DeviceNotFoundException : CameraException { - public DeviceNotFoundException() { } - public DeviceNotFoundException(string message) : base(message) { } - public DeviceNotFoundException(string message, Exception innerException) : base(message, innerException) { } -} + public DeviceNotFoundException() + { } + + public DeviceNotFoundException(string message) : base(message) + { + } + + public DeviceNotFoundException(string message, Exception innerException) : base(message, innerException) + { + } +} \ No newline at end of file diff --git a/XP.Camera/CameraFactory.cs b/XP.Camera/CameraFactory.cs index e470d15..de85f89 100644 --- a/XP.Camera/CameraFactory.cs +++ b/XP.Camera/CameraFactory.cs @@ -15,4 +15,4 @@ public class CameraFactory : ICameraFactory _ => throw new NotSupportedException($"不支持的相机品牌: {cameraType}") }; } -} +} \ No newline at end of file diff --git a/XP.Camera/CameraModels.cs b/XP.Camera/CameraModels.cs index 534ac46..713d25f 100644 --- a/XP.Camera/CameraModels.cs +++ b/XP.Camera/CameraModels.cs @@ -36,4 +36,4 @@ public class GrabErrorEventArgs : EventArgs ErrorCode = errorCode; ErrorDescription = errorDescription; } -} +} \ No newline at end of file diff --git a/XP.Camera/ICameraController.cs b/XP.Camera/ICameraController.cs index 6c47a51..1d25a7a 100644 --- a/XP.Camera/ICameraController.cs +++ b/XP.Camera/ICameraController.cs @@ -28,18 +28,29 @@ public interface ICameraController : IDisposable void StopGrabbing(); double GetExposureTime(); + void SetExposureTime(double microseconds); + double GetGain(); + void SetGain(double value); + int GetWidth(); + void SetWidth(int value); + int GetHeight(); + void SetHeight(int value); + string GetPixelFormat(); + void SetPixelFormat(string format); event EventHandler ImageGrabbed; + event EventHandler GrabError; + event EventHandler ConnectionLost; } @@ -50,4 +61,4 @@ public interface ICameraFactory { /// 根据相机品牌创建控制器实例。 ICameraController CreateController(string cameraType); -} +} \ No newline at end of file diff --git a/XP.Camera/PixelConverter.cs b/XP.Camera/PixelConverter.cs index e134f91..2c965b5 100644 --- a/XP.Camera/PixelConverter.cs +++ b/XP.Camera/PixelConverter.cs @@ -31,4 +31,4 @@ public static class PixelConverter bitmap.Freeze(); return bitmap; } -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/LocalizationHelper.cs b/XP.ImageProcessing.CfgControl/LocalizationHelper.cs similarity index 82% rename from ImageProcessing.Processors/LocalizationHelper.cs rename to XP.ImageProcessing.CfgControl/LocalizationHelper.cs index 67d6158..cf654c0 100644 --- a/ImageProcessing.Processors/LocalizationHelper.cs +++ b/XP.ImageProcessing.CfgControl/LocalizationHelper.cs @@ -1,18 +1,18 @@ using System.Globalization; using System.Resources; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.CfgControl; /// /// 本地化辅助类,用于管理多语言资源 -/// 与 ImageProcessing 主项目的语言设置同步 +/// �?ImageProcessing 主项目的语言设置同步 /// public static class LocalizationHelper { private static ResourceManager? _resourceManager; /// - /// 资源管理器 + /// 资源管理�? /// private static ResourceManager ResourceManager { @@ -21,7 +21,7 @@ public static class LocalizationHelper if (_resourceManager == null) { _resourceManager = new ResourceManager( - "ImageProcessing.Processors.Resources.Resources", + "XP.ImageProcessing.CfgControl.Resources.Resources", typeof(LocalizationHelper).Assembly); } return _resourceManager; @@ -32,7 +32,7 @@ public static class LocalizationHelper /// 获取本地化字符串 /// 使用当前 UI 文化(与主项目同步) /// - /// 资源键 + /// 资源�?/param> /// 本地化字符串 public static string GetString(string key) { diff --git a/ImageProcessing.Controls/ProcessorParameterControl.xaml b/XP.ImageProcessing.CfgControl/ProcessorParameterControl.xaml similarity index 94% rename from ImageProcessing.Controls/ProcessorParameterControl.xaml rename to XP.ImageProcessing.CfgControl/ProcessorParameterControl.xaml index bfaa227..aedfcc7 100644 --- a/ImageProcessing.Controls/ProcessorParameterControl.xaml +++ b/XP.ImageProcessing.CfgControl/ProcessorParameterControl.xaml @@ -1,4 +1,4 @@ - /// 通用参数配置 UserControl @@ -24,7 +24,7 @@ public partial class ProcessorParameterControl : UserControl } /// - /// 更新"未选择算子"的文本 + /// 更新"未选择算子"的文�? /// private void UpdateNoProcessorText() { @@ -41,7 +41,7 @@ public partial class ProcessorParameterControl : UserControl } /// - /// 加载算子参数并生成 UI + /// 加载算子参数并生�?UI /// public void LoadProcessor(ImageProcessorBase? processor) { @@ -68,7 +68,7 @@ public partial class ProcessorParameterControl : UserControl } /// - /// 根据参数类型创建对应的控件 + /// 根据参数类型创建对应的控�? /// private void CreateParameterControl(ProcessorParameter param) { @@ -88,7 +88,7 @@ public partial class ProcessorParameterControl : UserControl }; pnlParameters.Children.Add(label); - // 根据参数类型创建不同的控件 + // 根据参数类型创建不同的控�? UIElement? control = null; if (param.ValueType == typeof(int)) @@ -133,8 +133,8 @@ public partial class ProcessorParameterControl : UserControl } /// - /// 创建整数类型控件(Slider + TextBox 或仅 TextBox) - /// 当 MinValue 和 MaxValue 都为 null 时,只显示文本框,不显示滑块 + /// 创建整数类型控件(Slider + TextBox 或仅 TextBox�? + /// �?MinValue �?MaxValue 都为 null 时,只显示文本框,不显示滑块 /// private UIElement CreateIntegerControl(ProcessorParameter param) { @@ -201,8 +201,8 @@ public partial class ProcessorParameterControl : UserControl } /// - /// 创建浮点数类型控件(Slider + TextBox 或仅 TextBox) - /// 当 MinValue 和 MaxValue 都为 null 时,只显示文本框,不显示滑块 + /// 创建浮点数类型控件(Slider + TextBox 或仅 TextBox�? + /// �?MinValue �?MaxValue 都为 null 时,只显示文本框,不显示滑块 /// private UIElement CreateDoubleControl(ProcessorParameter param) { @@ -268,7 +268,7 @@ public partial class ProcessorParameterControl : UserControl } /// - /// 创建布尔类型控件(CheckBox) + /// 创建布尔类型控件(CheckBox�? /// private UIElement CreateBooleanControl(ProcessorParameter param) { @@ -295,7 +295,7 @@ public partial class ProcessorParameterControl : UserControl } /// - /// 创建下拉框控件(ComboBox) + /// 创建下拉框控件(ComboBox�? /// private UIElement CreateComboBoxControl(ProcessorParameter param) { @@ -322,7 +322,7 @@ public partial class ProcessorParameterControl : UserControl { _currentProcessor?.SetParameter(param.Name, comboBox.SelectedItem.ToString()!); - // 如果是 FilterType 参数,重新加载界面以更新参数可见性 + // 如果�?FilterType 参数,重新加载界面以更新参数可见�? if (param.Name == "FilterType") { LoadProcessor(_currentProcessor); @@ -336,7 +336,7 @@ public partial class ProcessorParameterControl : UserControl } /// - /// 创建文本框控件(TextBox) + /// 创建文本框控件(TextBox�? /// private UIElement CreateTextBoxControl(ProcessorParameter param) { @@ -358,7 +358,7 @@ public partial class ProcessorParameterControl : UserControl } /// - /// 获取当前配置的算子 + /// 获取当前配置的算�? /// public ImageProcessorBase? GetProcessor() { diff --git a/ImageProcessing.Controls/Resources/Resources.resx b/XP.ImageProcessing.CfgControl/Resources/Resources.resx similarity index 100% rename from ImageProcessing.Controls/Resources/Resources.resx rename to XP.ImageProcessing.CfgControl/Resources/Resources.resx diff --git a/ImageProcessing.Controls/Resources/Resources.zh-CN.resx b/XP.ImageProcessing.CfgControl/Resources/Resources.zh-CN.resx similarity index 100% rename from ImageProcessing.Controls/Resources/Resources.zh-CN.resx rename to XP.ImageProcessing.CfgControl/Resources/Resources.zh-CN.resx diff --git a/ImageProcessing.Controls/ImageProcessing.Controls.csproj b/XP.ImageProcessing.CfgControl/XP.ImageProcessing.CfgControl.csproj similarity index 78% rename from ImageProcessing.Controls/ImageProcessing.Controls.csproj rename to XP.ImageProcessing.CfgControl/XP.ImageProcessing.CfgControl.csproj index e65e58e..3f5417f 100644 --- a/ImageProcessing.Controls/ImageProcessing.Controls.csproj +++ b/XP.ImageProcessing.CfgControl/XP.ImageProcessing.CfgControl.csproj @@ -5,6 +5,8 @@ enable enable true + XP.ImageProcessing.CfgControl + XP.ImageProcessing.CfgControl @@ -23,7 +25,7 @@ - + diff --git a/ImageProcessing.Core/ImageProcessorBase.cs b/XP.ImageProcessing.Core/ImageProcessorBase.cs similarity index 86% rename from ImageProcessing.Core/ImageProcessorBase.cs rename to XP.ImageProcessing.Core/ImageProcessorBase.cs index 2644079..e4293ad 100644 --- a/ImageProcessing.Core/ImageProcessorBase.cs +++ b/XP.ImageProcessing.Core/ImageProcessorBase.cs @@ -1,22 +1,22 @@ -// ============================================================================ +// ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: ImageProcessorBase.cs -// 描述: 8位图像处理算子基类,定义图像处理算子的通用接口和行为 +// 文件�? ImageProcessorBase.cs +// 描述: 8位图像处理算子基类,定义图像处理算子的通用接口和行�? // 功能: // - 定义算子的基本属性(名称、描述) // - 参数管理(设置、获取、验证) -// - ROI(感兴趣区域)处理支持 +// - ROI(感兴趣区域)处理支�? // - 输出数据管理(用于传递额外信息如轮廓等) -// - 为所有8位图像处理算子提供统一的基础框架 +// - 为所�?位图像处理算子提供统一的基础框架 // 设计模式: 模板方法模式 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作�? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; using Emgu.CV.Util; -namespace ImageProcessing.Core; +namespace XP.ImageProcessing.Core; /// /// 图像处理算子基类 @@ -49,7 +49,7 @@ public abstract class ImageProcessorBase } /// - /// 初始化算子参数(子类实现) + /// 初始化算子参数(子类实现�? /// protected abstract void InitializeParameters(); @@ -59,7 +59,7 @@ public abstract class ImageProcessorBase public abstract Image Process(Image inputImage); /// - /// 执行图像处理(带矩形ROI支持) + /// 执行图像处理(带矩形ROI支持�? /// public Image ProcessWithROI(Image inputImage) { @@ -71,7 +71,7 @@ public abstract class ImageProcessorBase var processedROI = Process(roiImage); - // 将 ROI 偏移量保存到输出数据中,供轮廓绘制等使用 + // �?ROI 偏移量保存到输出数据中,供轮廓绘制等使用 OutputData["ROIOffset"] = new System.Drawing.Point(ROI.Value.X, ROI.Value.Y); var result = inputImage.Clone(); @@ -87,7 +87,7 @@ public abstract class ImageProcessorBase } /// - /// 执行图像处理(带多边形ROI掩码支持) + /// 执行图像处理(带多边形ROI掩码支持�? /// public Image ProcessWithPolygonROI(Image inputImage) { @@ -100,7 +100,7 @@ public abstract class ImageProcessorBase var mask = new Image(inputImage.Width, inputImage.Height); mask.SetValue(new Gray(0)); - // 绘制多边形掩码(白色表示ROI区域) + // 绘制多边形掩码(白色表示ROI区域�? using (var vop = new VectorOfPoint(PolygonROIPoints)) { using (var vvop = new VectorOfVectorOfPoint(vop)) @@ -115,12 +115,12 @@ public abstract class ImageProcessorBase // 创建结果图像 var result = inputImage.Clone(); - // 使用掩码:ROI内使用处理后的像素,ROI外保持原始像素 + // 使用掩码:ROI内使用处理后的像素,ROI外保持原始像�? for (int y = 0; y < inputImage.Height; y++) { for (int x = 0; x < inputImage.Width; x++) { - if (mask.Data[y, x, 0] > 0) // 在ROI内 + if (mask.Data[y, x, 0] > 0) // 在ROI�? { result.Data[y, x, 0] = processedImage.Data[y, x, 0]; } @@ -137,7 +137,7 @@ public abstract class ImageProcessorBase } /// - /// 获取所有参数列表 + /// 获取所有参数列�? /// public List GetParameters() { @@ -145,7 +145,7 @@ public abstract class ImageProcessorBase } /// - /// 设置参数值 + /// 设置参数�? /// public void SetParameter(string name, object value) { diff --git a/ImageProcessing.Core/ProcessorParameter.cs b/XP.ImageProcessing.Core/ProcessorParameter.cs similarity index 86% rename from ImageProcessing.Core/ProcessorParameter.cs rename to XP.ImageProcessing.Core/ProcessorParameter.cs index 670281d..28f172c 100644 --- a/ImageProcessing.Core/ProcessorParameter.cs +++ b/XP.ImageProcessing.Core/ProcessorParameter.cs @@ -1,24 +1,24 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: ProcessorParameter.cs +// 文件? ProcessorParameter.cs // 描述: 图像处理算子参数定义类,用于描述算子的可配置参数 // 功能: // - 定义参数的基本属性(名称、类型、默认值) // - 支持参数范围约束(最小值、最大值) -// - 支持枚举类型参数(下拉选项) +// - 支持枚举类型参数(下拉选项? // - 提供参数描述信息用于UI显示 -// - 统一的参数管理机制 -// 作者: 李伟 wei.lw.li@hexagon.com +// - 统一的参数管理机? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ -namespace ImageProcessing.Core; +namespace XP.ImageProcessing.Core; /// /// 图像处理算子参数定义 /// public class ProcessorParameter { - /// 参数名称(代码中使用) + /// 参数名称(代码中使用?/summary> public string Name { get; set; } /// 显示名称(UI中显示) @@ -27,7 +27,7 @@ public class ProcessorParameter /// 参数类型 public Type ValueType { get; set; } - /// 当前值 + /// 当前?/summary> public object Value { get; set; } /// 最小值(可选) diff --git a/ImageProcessing.Core/ImageProcessing.Core.csproj b/XP.ImageProcessing.Core/XP.ImageProcessing.Core.csproj similarity index 77% rename from ImageProcessing.Core/ImageProcessing.Core.csproj rename to XP.ImageProcessing.Core/XP.ImageProcessing.Core.csproj index 1ffa374..4f794e9 100644 --- a/ImageProcessing.Core/ImageProcessing.Core.csproj +++ b/XP.ImageProcessing.Core/XP.ImageProcessing.Core.csproj @@ -4,6 +4,8 @@ net8.0-windows enable enable + XP.ImageProcessing.Core + XP.ImageProcessing.Core diff --git a/ImageProcessing.Controls/LocalizationHelper.cs b/XP.ImageProcessing.Processors/LocalizationHelper.cs similarity index 82% rename from ImageProcessing.Controls/LocalizationHelper.cs rename to XP.ImageProcessing.Processors/LocalizationHelper.cs index af59030..b1b781c 100644 --- a/ImageProcessing.Controls/LocalizationHelper.cs +++ b/XP.ImageProcessing.Processors/LocalizationHelper.cs @@ -1,18 +1,18 @@ using System.Globalization; using System.Resources; -namespace ImageProcessing.Controls; +namespace XP.ImageProcessing.Processors; /// /// 本地化辅助类,用于管理多语言资源 -/// 与 ImageProcessing 主项目的语言设置同步 +/// ?ImageProcessing 主项目的语言设置同步 /// public static class LocalizationHelper { private static ResourceManager? _resourceManager; /// - /// 资源管理器 + /// 资源管理? /// private static ResourceManager ResourceManager { @@ -21,7 +21,7 @@ public static class LocalizationHelper if (_resourceManager == null) { _resourceManager = new ResourceManager( - "ImageProcessing.Controls.Resources.Resources", + "XP.ImageProcessing.Processors.Resources.Resources", typeof(LocalizationHelper).Assembly); } return _resourceManager; @@ -32,7 +32,7 @@ public static class LocalizationHelper /// 获取本地化字符串 /// 使用当前 UI 文化(与主项目同步) /// - /// 资源键 + /// 资源?/param> /// 本地化字符串 public static string GetString(string key) { diff --git a/ImageProcessing.Processors/Resources/Resources.Designer.cs b/XP.ImageProcessing.Processors/Resources/Resources.Designer.cs similarity index 75% rename from ImageProcessing.Processors/Resources/Resources.Designer.cs rename to XP.ImageProcessing.Processors/Resources/Resources.Designer.cs index 79d8d5a..d105dda 100644 --- a/ImageProcessing.Processors/Resources/Resources.Designer.cs +++ b/XP.ImageProcessing.Processors/Resources/Resources.Designer.cs @@ -1,24 +1,24 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 +// ˴ɹɡ +// ʱ汾:4.0.30319.42000 // -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 +// ԴļĸĿܻᵼ²ȷΪ +// ɴ룬ЩĽᶪʧ // //------------------------------------------------------------------------------ -namespace ImageProcessing.Processors.Resources { +namespace XP.ImageProcessing.Processors.Resources { using System; /// - /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// һǿ͵Դ࣬ڲұػַȡ /// - // 此类是由 StronglyTypedResourceBuilder - // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 - // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen - // (以 /str 作为命令选项),或重新生成 VS 项目。 + // StronglyTypedResourceBuilder + // ͨ ResGen Visual Studio ĹԶɵġ + // ҪӻƳԱ༭ .ResX ļȻ ResGen + // ( /str Ϊѡ) VS Ŀ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] @@ -33,13 +33,13 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 返回此类使用的缓存的 ResourceManager 实例。 + /// شʹõĻ ResourceManager ʵ /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ImageProcessing.Processors.Resources.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("XP.ImageProcessing.Processors.Resources.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; @@ -47,8 +47,8 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 重写当前线程的 CurrentUICulture 属性,对 - /// 使用此强类型资源类的所有资源查找执行重写。 + /// дǰ̵߳ CurrentUICulture ԣ + /// ʹôǿԴԴִд /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] public static global::System.Globalization.CultureInfo Culture { @@ -61,7 +61,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Preserve image information within specified frequency range 的本地化字符串。 + /// Preserve image information within specified frequency range ıػַ /// public static string BandPassFilterProcessor_Description { get { @@ -70,7 +70,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Filter Type 的本地化字符串。 + /// Filter Type ıػַ /// public static string BandPassFilterProcessor_FilterType { get { @@ -79,7 +79,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Transition characteristics of the filter 的本地化字符串。 + /// Transition characteristics of the filter ıػַ /// public static string BandPassFilterProcessor_FilterType_Desc { get { @@ -88,7 +88,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 High Cutoff Radius 的本地化字符串。 + /// High Cutoff Radius ıػַ /// public static string BandPassFilterProcessor_HighCutoff { get { @@ -97,7 +97,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Components above this frequency will be removed 的本地化字符串。 + /// Components above this frequency will be removed ıػַ /// public static string BandPassFilterProcessor_HighCutoff_Desc { get { @@ -106,7 +106,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Low Cutoff Radius 的本地化字符串。 + /// Low Cutoff Radius ıػַ /// public static string BandPassFilterProcessor_LowCutoff { get { @@ -115,7 +115,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Components below this frequency will be removed 的本地化字符串。 + /// Components below this frequency will be removed ıػַ /// public static string BandPassFilterProcessor_LowCutoff_Desc { get { @@ -124,7 +124,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Band Pass Filter 的本地化字符串。 + /// Band Pass Filter ıػַ /// public static string BandPassFilterProcessor_Name { get { @@ -133,7 +133,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Butterworth Order 的本地化字符串。 + /// Butterworth Order ıػַ /// public static string BandPassFilterProcessor_Order { get { @@ -142,7 +142,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Order of Butterworth filter 的本地化字符串。 + /// Order of Butterworth filter ıػַ /// public static string BandPassFilterProcessor_Order_Desc { get { @@ -151,7 +151,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Edge-preserving smoothing filter 的本地化字符串。 + /// Edge-preserving smoothing filter ıػַ /// public static string BilateralFilterProcessor_Description { get { @@ -160,7 +160,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Diameter 的本地化字符串。 + /// Diameter ıػַ /// public static string BilateralFilterProcessor_Diameter { get { @@ -169,7 +169,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Diameter of each pixel neighborhood 的本地化字符串。 + /// Diameter of each pixel neighborhood ıػַ /// public static string BilateralFilterProcessor_Diameter_Desc { get { @@ -178,7 +178,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Bilateral Filter 的本地化字符串。 + /// Bilateral Filter ıػַ /// public static string BilateralFilterProcessor_Name { get { @@ -187,7 +187,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sigma Color 的本地化字符串。 + /// Sigma Color ıػַ /// public static string BilateralFilterProcessor_SigmaColor { get { @@ -196,7 +196,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Filter sigma in the color space 的本地化字符串。 + /// Filter sigma in the color space ıػַ /// public static string BilateralFilterProcessor_SigmaColor_Desc { get { @@ -205,7 +205,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sigma Space 的本地化字符串。 + /// Sigma Space ıػַ /// public static string BilateralFilterProcessor_SigmaSpace { get { @@ -214,7 +214,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Filter sigma in the coordinate space 的本地化字符串。 + /// Filter sigma in the coordinate space ıػַ /// public static string BilateralFilterProcessor_SigmaSpace_Desc { get { @@ -223,7 +223,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Detect contours in image and output contour information 的本地化字符串。 + /// Detect contours in image and output contour information ıػַ /// public static string ContourProcessor_Description { get { @@ -232,7 +232,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Max Area 的本地化字符串。 + /// Max Area ıػַ /// public static string ContourProcessor_MaxArea { get { @@ -241,7 +241,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Filter contours larger than this area 的本地化字符串。 + /// Filter contours larger than this area ıػַ /// public static string ContourProcessor_MaxArea_Desc { get { @@ -250,7 +250,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Min Area 的本地化字符串。 + /// Min Area ıػַ /// public static string ContourProcessor_MinArea { get { @@ -259,7 +259,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Filter contours smaller than this area 的本地化字符串。 + /// Filter contours smaller than this area ıػַ /// public static string ContourProcessor_MinArea_Desc { get { @@ -268,7 +268,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Contour Detection 的本地化字符串。 + /// Contour Detection ıػַ /// public static string ContourProcessor_Name { get { @@ -277,7 +277,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Target Color 的本地化字符串。 + /// Target Color ıػַ /// public static string ContourProcessor_TargetColor { get { @@ -286,7 +286,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select the color of regions to find (white or black) 的本地化字符串。 + /// Select the color of regions to find (white or black) ıػַ /// public static string ContourProcessor_TargetColor_Desc { get { @@ -295,7 +295,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Line Thickness 的本地化字符串。 + /// Line Thickness ıػַ /// public static string ContourProcessor_Thickness { get { @@ -304,7 +304,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Thickness of contour lines 的本地化字符串。 + /// Thickness of contour lines ıػַ /// public static string ContourProcessor_Thickness_Desc { get { @@ -313,7 +313,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Threshold Value 的本地化字符串。 + /// Threshold Value ıػַ /// public static string ContourProcessor_ThresholdValue { get { @@ -322,7 +322,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Threshold value for binarization (0-255) 的本地化字符串。 + /// Threshold value for binarization (0-255) ıػַ /// public static string ContourProcessor_ThresholdValue_Desc { get { @@ -331,7 +331,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Use Otsu Auto Threshold 的本地化字符串。 + /// Use Otsu Auto Threshold ıػַ /// public static string ContourProcessor_UseOtsu { get { @@ -340,7 +340,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Automatically calculate optimal threshold 的本地化字符串。 + /// Automatically calculate optimal threshold ıػַ /// public static string ContourProcessor_UseOtsu_Desc { get { @@ -349,7 +349,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Enable Threshold 的本地化字符串。 + /// Enable Threshold ıػַ /// public static string ContourProcessor_UseThreshold { get { @@ -358,7 +358,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Apply binary threshold before contour detection 的本地化字符串。 + /// Apply binary threshold before contour detection ıػַ /// public static string ContourProcessor_UseThreshold_Desc { get { @@ -367,7 +367,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Auto Contrast 的本地化字符串。 + /// Auto Contrast ıػַ /// public static string ContrastProcessor_AutoContrast { get { @@ -376,7 +376,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Automatically stretch contrast to full range 的本地化字符串。 + /// Automatically stretch contrast to full range ıػַ /// public static string ContrastProcessor_AutoContrast_Desc { get { @@ -385,7 +385,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Brightness 的本地化字符串。 + /// Brightness ıػַ /// public static string ContrastProcessor_Brightness { get { @@ -394,7 +394,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Brightness offset 的本地化字符串。 + /// Brightness offset ıػַ /// public static string ContrastProcessor_Brightness_Desc { get { @@ -403,7 +403,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 CLAHE Clip Limit 的本地化字符串。 + /// CLAHE Clip Limit ıػַ /// public static string ContrastProcessor_ClipLimit { get { @@ -412,7 +412,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 CLAHE contrast limit threshold 的本地化字符串。 + /// CLAHE contrast limit threshold ıػַ /// public static string ContrastProcessor_ClipLimit_Desc { get { @@ -421,7 +421,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Contrast 的本地化字符串。 + /// Contrast ıػַ /// public static string ContrastProcessor_Contrast { get { @@ -430,7 +430,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Contrast gain, 1.0 for original contrast 的本地化字符串。 + /// Contrast gain, 1.0 for original contrast ıػַ /// public static string ContrastProcessor_Contrast_Desc { get { @@ -439,7 +439,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Adjust image contrast and brightness 的本地化字符串。 + /// Adjust image contrast and brightness ıػַ /// public static string ContrastProcessor_Description { get { @@ -448,7 +448,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Contrast Adjustment 的本地化字符串。 + /// Contrast Adjustment ıػַ /// public static string ContrastProcessor_Name { get { @@ -457,7 +457,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Use CLAHE 的本地化字符串。 + /// Use CLAHE ıػַ /// public static string ContrastProcessor_UseCLAHE { get { @@ -466,7 +466,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Use Contrast Limited Adaptive Histogram Equalization 的本地化字符串。 + /// Use Contrast Limited Adaptive Histogram Equalization ıػַ /// public static string ContrastProcessor_UseCLAHE_Desc { get { @@ -475,7 +475,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Perform division operation on image for background correction and normalization 的本地化字符串。 + /// Perform division operation on image for background correction and normalization ıػַ /// public static string DivisionProcessor_Description { get { @@ -484,7 +484,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Divisor 的本地化字符串。 + /// Divisor ıػַ /// public static string DivisionProcessor_Divisor { get { @@ -493,7 +493,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Each pixel value will be divided by this number 的本地化字符串。 + /// Each pixel value will be divided by this number ıػַ /// public static string DivisionProcessor_Divisor_Desc { get { @@ -502,7 +502,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Division Operation 的本地化字符串。 + /// Division Operation ıػַ /// public static string DivisionProcessor_Name { get { @@ -511,7 +511,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Normalize Output 的本地化字符串。 + /// Normalize Output ıػַ /// public static string DivisionProcessor_Normalize { get { @@ -520,7 +520,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Normalize result to 0-255 range 的本地化字符串。 + /// Normalize result to 0-255 range ıػַ /// public static string DivisionProcessor_Normalize_Desc { get { @@ -529,7 +529,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Scale Factor 的本地化字符串。 + /// Scale Factor ıػַ /// public static string DivisionProcessor_Scale { get { @@ -538,7 +538,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Division result multiplied by this scale factor 的本地化字符串。 + /// Division result multiplied by this scale factor ıػַ /// public static string DivisionProcessor_Scale_Desc { get { @@ -547,7 +547,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Preserve image information within specified frequency range 的本地化字符串。 + /// Preserve image information within specified frequency range ıػַ /// public static string FilterProcessor_BandPass_Desc { get { @@ -556,7 +556,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Band Pass Filter 的本地化字符串。 + /// Band Pass Filter ıػַ /// public static string FilterProcessor_BandPass_Name { get { @@ -565,7 +565,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Band Pass Filter Type 的本地化字符串。 + /// Band Pass Filter Type ıػַ /// public static string FilterProcessor_BandPassFilterType { get { @@ -574,7 +574,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Transition characteristics of the band pass filter 的本地化字符串。 + /// Transition characteristics of the band pass filter ıػַ /// public static string FilterProcessor_BandPassFilterType_Desc { get { @@ -583,7 +583,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Edge-preserving smoothing filter 的本地化字符串。 + /// Edge-preserving smoothing filter ıػַ /// public static string FilterProcessor_Bilateral_Desc { get { @@ -592,7 +592,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Bilateral Filter 的本地化字符串。 + /// Bilateral Filter ıػַ /// public static string FilterProcessor_Bilateral_Name { get { @@ -601,7 +601,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Cutoff Frequency 的本地化字符串。 + /// Cutoff Frequency ıػַ /// public static string FilterProcessor_D0 { get { @@ -610,7 +610,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Cutoff frequency for frequency domain filtering 的本地化字符串。 + /// Cutoff frequency for frequency domain filtering ıػַ /// public static string FilterProcessor_D0_Desc { get { @@ -619,7 +619,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Integrated multiple filtering methods 的本地化字符串。 + /// Integrated multiple filtering methods ıػַ /// public static string FilterProcessor_Description { get { @@ -628,7 +628,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Filter Type 的本地化字符串。 + /// Filter Type ıػַ /// public static string FilterProcessor_FilterType { get { @@ -637,7 +637,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select filtering method 的本地化字符串。 + /// Select filtering method ıػַ /// public static string FilterProcessor_FilterType_Desc { get { @@ -646,7 +646,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Smooth image and reduce Gaussian noise while preserving edges 的本地化字符串。 + /// Smooth image and reduce Gaussian noise while preserving edges ıػַ /// public static string FilterProcessor_Gaussian_Desc { get { @@ -655,7 +655,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gaussian Filter 的本地化字符串。 + /// Gaussian Filter ıػַ /// public static string FilterProcessor_Gaussian_Name { get { @@ -664,7 +664,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 High Cutoff Radius 的本地化字符串。 + /// High Cutoff Radius ıػַ /// public static string FilterProcessor_HighCutoff { get { @@ -673,7 +673,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Components above this frequency will be removed 的本地化字符串。 + /// Components above this frequency will be removed ıػַ /// public static string FilterProcessor_HighCutoff_Desc { get { @@ -682,7 +682,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Edge enhancement in frequency domain 的本地化字符串。 + /// Edge enhancement in frequency domain ıػַ /// public static string FilterProcessor_HighPass_Desc { get { @@ -691,7 +691,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 High Pass Filter 的本地化字符串。 + /// High Pass Filter ıػַ /// public static string FilterProcessor_HighPass_Name { get { @@ -700,7 +700,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Kernel Size 的本地化字符串。 + /// Kernel Size ıػַ /// public static string FilterProcessor_KernelSize { get { @@ -709,7 +709,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Size of the filter kernel (must be odd) 的本地化字符串。 + /// Size of the filter kernel (must be odd) ıػַ /// public static string FilterProcessor_KernelSize_Desc { get { @@ -718,7 +718,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Low Cutoff Radius 的本地化字符串。 + /// Low Cutoff Radius ıػַ /// public static string FilterProcessor_LowCutoff { get { @@ -727,7 +727,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Components below this frequency will be removed 的本地化字符串。 + /// Components below this frequency will be removed ıػַ /// public static string FilterProcessor_LowCutoff_Desc { get { @@ -736,7 +736,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Remove high frequency noise in frequency domain 的本地化字符串。 + /// Remove high frequency noise in frequency domain ıػַ /// public static string FilterProcessor_LowPass_Desc { get { @@ -745,7 +745,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Low Pass Filter 的本地化字符串。 + /// Low Pass Filter ıػַ /// public static string FilterProcessor_LowPass_Name { get { @@ -754,7 +754,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Simple averaging smoothing filter 的本地化字符串。 + /// Simple averaging smoothing filter ıػַ /// public static string FilterProcessor_Mean_Desc { get { @@ -763,7 +763,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Mean Filter 的本地化字符串。 + /// Mean Filter ıػַ /// public static string FilterProcessor_Mean_Name { get { @@ -772,7 +772,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Remove salt-and-pepper noise effectively 的本地化字符串。 + /// Remove salt-and-pepper noise effectively ıػַ /// public static string FilterProcessor_Median_Desc { get { @@ -781,7 +781,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Median Filter 的本地化字符串。 + /// Median Filter ıػַ /// public static string FilterProcessor_Median_Name { get { @@ -790,7 +790,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Comprehensive Filter 的本地化字符串。 + /// Comprehensive Filter ıػַ /// public static string FilterProcessor_Name { get { @@ -799,7 +799,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Butterworth Order 的本地化字符串。 + /// Butterworth Order ıػַ /// public static string FilterProcessor_Order { get { @@ -808,7 +808,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Order of Butterworth filter 的本地化字符串。 + /// Order of Butterworth filter ıػַ /// public static string FilterProcessor_Order_Desc { get { @@ -817,7 +817,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sigma 的本地化字符串。 + /// Sigma ıػַ /// public static string FilterProcessor_Sigma { get { @@ -826,7 +826,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Standard deviation for Gaussian/Bilateral filter 的本地化字符串。 + /// Standard deviation for Gaussian/Bilateral filter ıػַ /// public static string FilterProcessor_Sigma_Desc { get { @@ -835,7 +835,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Adjust image brightness through Gamma value 的本地化字符串。 + /// Adjust image brightness through Gamma value ıػַ /// public static string GammaProcessor_Description { get { @@ -844,7 +844,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gain 的本地化字符串。 + /// Gain ıػַ /// public static string GammaProcessor_Gain { get { @@ -853,7 +853,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Output gain coefficient 的本地化字符串。 + /// Output gain coefficient ıػַ /// public static string GammaProcessor_Gain_Desc { get { @@ -862,7 +862,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gamma Value 的本地化字符串。 + /// Gamma Value ıػַ /// public static string GammaProcessor_Gamma { get { @@ -871,7 +871,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gamma value, less than 1 darkens image, greater than 1 brightens image 的本地化字符串。 + /// Gamma value, less than 1 darkens image, greater than 1 brightens image ıػַ /// public static string GammaProcessor_Gamma_Desc { get { @@ -880,7 +880,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gamma Correction 的本地化字符串。 + /// Gamma Correction ıػַ /// public static string GammaProcessor_Name { get { @@ -889,7 +889,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Smooth image using Gaussian kernel 的本地化字符串。 + /// Smooth image using Gaussian kernel ıػַ /// public static string GaussianBlurProcessor_Description { get { @@ -898,7 +898,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Kernel Size 的本地化字符串。 + /// Kernel Size ıػַ /// public static string GaussianBlurProcessor_KernelSize { get { @@ -907,7 +907,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Size of Gaussian kernel, must be odd 的本地化字符串。 + /// Size of Gaussian kernel, must be odd ıػַ /// public static string GaussianBlurProcessor_KernelSize_Desc { get { @@ -916,7 +916,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gaussian Blur 的本地化字符串。 + /// Gaussian Blur ıػַ /// public static string GaussianBlurProcessor_Name { get { @@ -925,7 +925,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Standard Deviation 的本地化字符串。 + /// Standard Deviation ıػַ /// public static string GaussianBlurProcessor_Sigma { get { @@ -934,7 +934,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Standard deviation of Gaussian kernel, controls blur amount 的本地化字符串。 + /// Standard deviation of Gaussian kernel, controls blur amount ıػַ /// public static string GaussianBlurProcessor_Sigma_Desc { get { @@ -943,7 +943,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Convert image to grayscale 的本地化字符串。 + /// Convert image to grayscale ıػַ /// public static string GrayscaleProcessor_Description { get { @@ -952,7 +952,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Conversion Method 的本地化字符串。 + /// Conversion Method ıػַ /// public static string GrayscaleProcessor_Method { get { @@ -961,7 +961,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Method for grayscale conversion 的本地化字符串。 + /// Method for grayscale conversion ıػַ /// public static string GrayscaleProcessor_Method_Desc { get { @@ -970,7 +970,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Grayscale Conversion 的本地化字符串。 + /// Grayscale Conversion ıػַ /// public static string GrayscaleProcessor_Name { get { @@ -979,7 +979,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Bias 的本地化字符串。 + /// Bias ıػַ /// public static string HDREnhancementProcessor_Bias { get { @@ -988,7 +988,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Bias for adaptive logarithmic and Drago mapping, controls dark/bright balance 的本地化字符串。 + /// Bias for adaptive logarithmic and Drago mapping, controls dark/bright balance ıػַ /// public static string HDREnhancementProcessor_Bias_Desc { get { @@ -997,7 +997,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 High Dynamic Range image enhancement with tone mapping 的本地化字符串。 + /// High Dynamic Range image enhancement with tone mapping ıػַ /// public static string HDREnhancementProcessor_Description { get { @@ -1006,7 +1006,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Detail Boost 的本地化字符串。 + /// Detail Boost ıػַ /// public static string HDREnhancementProcessor_DetailBoost { get { @@ -1015,7 +1015,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Detail enhancement factor, higher values reveal more fine details 的本地化字符串。 + /// Detail enhancement factor, higher values reveal more fine details ıػַ /// public static string HDREnhancementProcessor_DetailBoost_Desc { get { @@ -1024,7 +1024,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gamma 的本地化字符串。 + /// Gamma ıػַ /// public static string HDREnhancementProcessor_Gamma { get { @@ -1033,7 +1033,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gamma correction value for output brightness adjustment 的本地化字符串。 + /// Gamma correction value for output brightness adjustment ıػַ /// public static string HDREnhancementProcessor_Gamma_Desc { get { @@ -1042,7 +1042,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Tone Mapping Method 的本地化字符串。 + /// Tone Mapping Method ıػַ /// public static string HDREnhancementProcessor_Method { get { @@ -1051,7 +1051,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select HDR tone mapping algorithm: LocalToneMap, AdaptiveLog, Drago, BilateralToneMap 的本地化字符串。 + /// Select HDR tone mapping algorithm: LocalToneMap, AdaptiveLog, Drago, BilateralToneMap ıػַ /// public static string HDREnhancementProcessor_Method_Desc { get { @@ -1060,7 +1060,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 HDR Enhancement 的本地化字符串。 + /// HDR Enhancement ıػַ /// public static string HDREnhancementProcessor_Name { get { @@ -1069,7 +1069,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Saturation 的本地化字符串。 + /// Saturation ıػַ /// public static string HDREnhancementProcessor_Saturation { get { @@ -1078,7 +1078,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Contrast saturation factor for LocalToneMap method 的本地化字符串。 + /// Contrast saturation factor for LocalToneMap method ıػַ /// public static string HDREnhancementProcessor_Saturation_Desc { get { @@ -1087,7 +1087,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sigma Color 的本地化字符串。 + /// Sigma Color ıػַ /// public static string HDREnhancementProcessor_SigmaColor { get { @@ -1096,7 +1096,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Color sigma for bilateral tone mapping, controls edge preservation 的本地化字符串。 + /// Color sigma for bilateral tone mapping, controls edge preservation ıػַ /// public static string HDREnhancementProcessor_SigmaColor_Desc { get { @@ -1105,7 +1105,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sigma Space 的本地化字符串。 + /// Sigma Space ıػַ /// public static string HDREnhancementProcessor_SigmaSpace { get { @@ -1114,7 +1114,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Spatial sigma for base layer extraction, controls smoothing range 的本地化字符串。 + /// Spatial sigma for base layer extraction, controls smoothing range ıػַ /// public static string HDREnhancementProcessor_SigmaSpace_Desc { get { @@ -1123,7 +1123,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Cutoff Frequency 的本地化字符串。 + /// Cutoff Frequency ıػַ /// public static string HighPassFilterProcessor_CutoffFrequency { get { @@ -1132,7 +1132,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Cutoff frequency for high pass filter 的本地化字符串。 + /// Cutoff frequency for high pass filter ıػַ /// public static string HighPassFilterProcessor_CutoffFrequency_Desc { get { @@ -1141,7 +1141,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Edge enhancement in frequency domain 的本地化字符串。 + /// Edge enhancement in frequency domain ıػַ /// public static string HighPassFilterProcessor_Description { get { @@ -1150,7 +1150,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 High Pass Filter 的本地化字符串。 + /// High Pass Filter ıػַ /// public static string HighPassFilterProcessor_Name { get { @@ -1159,7 +1159,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Clip Limit 的本地化字符串。 + /// Clip Limit ıػַ /// public static string HistogramEqualizationProcessor_ClipLimit { get { @@ -1168,7 +1168,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Contrast limiting threshold for CLAHE 的本地化字符串。 + /// Contrast limiting threshold for CLAHE ıػַ /// public static string HistogramEqualizationProcessor_ClipLimit_Desc { get { @@ -1177,7 +1177,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Enhance image contrast 的本地化字符串。 + /// Enhance image contrast ıػַ /// public static string HistogramEqualizationProcessor_Description { get { @@ -1186,7 +1186,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Equalization Method 的本地化字符串。 + /// Equalization Method ıػַ /// public static string HistogramEqualizationProcessor_Method { get { @@ -1195,7 +1195,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select histogram equalization algorithm 的本地化字符串。 + /// Select histogram equalization algorithm ıػַ /// public static string HistogramEqualizationProcessor_Method_Desc { get { @@ -1204,7 +1204,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Histogram Equalization 的本地化字符串。 + /// Histogram Equalization ıػַ /// public static string HistogramEqualizationProcessor_Name { get { @@ -1213,7 +1213,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Tile Size 的本地化字符串。 + /// Tile Size ıػַ /// public static string HistogramEqualizationProcessor_TileSize { get { @@ -1222,7 +1222,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Tile size for CLAHE 的本地化字符串。 + /// Tile size for CLAHE ıػַ /// public static string HistogramEqualizationProcessor_TileSize_Desc { get { @@ -1231,7 +1231,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Detect horizontal edges specifically 的本地化字符串。 + /// Detect horizontal edges specifically ıػַ /// public static string HorizontalEdgeProcessor_Description { get { @@ -1240,7 +1240,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Detection Method 的本地化字符串。 + /// Detection Method ıػַ /// public static string HorizontalEdgeProcessor_Method { get { @@ -1249,7 +1249,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select horizontal edge detection algorithm 的本地化字符串。 + /// Select horizontal edge detection algorithm ıػַ /// public static string HorizontalEdgeProcessor_Method_Desc { get { @@ -1258,7 +1258,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Horizontal Edge Detection 的本地化字符串。 + /// Horizontal Edge Detection ıػַ /// public static string HorizontalEdgeProcessor_Name { get { @@ -1267,7 +1267,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sensitivity 的本地化字符串。 + /// Sensitivity ıػַ /// public static string HorizontalEdgeProcessor_Sensitivity { get { @@ -1276,7 +1276,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Edge detection sensitivity 的本地化字符串。 + /// Edge detection sensitivity ıػַ /// public static string HorizontalEdgeProcessor_Sensitivity_Desc { get { @@ -1285,7 +1285,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Threshold 的本地化字符串。 + /// Threshold ıػַ /// public static string HorizontalEdgeProcessor_Threshold { get { @@ -1294,7 +1294,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Edge detection threshold 的本地化字符串。 + /// Edge detection threshold ıػַ /// public static string HorizontalEdgeProcessor_Threshold_Desc { get { @@ -1303,7 +1303,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Detect image edges using Kirsch operator 的本地化字符串。 + /// Detect image edges using Kirsch operator ıػַ /// public static string KirschEdgeProcessor_Description { get { @@ -1312,7 +1312,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Kirsch Edge Detection 的本地化字符串。 + /// Kirsch Edge Detection ıػַ /// public static string KirschEdgeProcessor_Name { get { @@ -1321,7 +1321,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Scale Factor 的本地化字符串。 + /// Scale Factor ıػַ /// public static string KirschEdgeProcessor_Scale { get { @@ -1330,7 +1330,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Scale factor for edge intensity 的本地化字符串。 + /// Scale factor for edge intensity ıػַ /// public static string KirschEdgeProcessor_Scale_Desc { get { @@ -1339,7 +1339,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Threshold 的本地化字符串。 + /// Threshold ıػַ /// public static string KirschEdgeProcessor_Threshold { get { @@ -1348,7 +1348,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Edge detection threshold 的本地化字符串。 + /// Edge detection threshold ıػַ /// public static string KirschEdgeProcessor_Threshold_Desc { get { @@ -1357,7 +1357,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Cutoff Frequency 的本地化字符串。 + /// Cutoff Frequency ıػַ /// public static string LowPassFilterProcessor_CutoffFrequency { get { @@ -1366,7 +1366,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Cutoff frequency for low pass filter 的本地化字符串。 + /// Cutoff frequency for low pass filter ıػַ /// public static string LowPassFilterProcessor_CutoffFrequency_Desc { get { @@ -1375,7 +1375,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Remove high frequency noise in frequency domain 的本地化字符串。 + /// Remove high frequency noise in frequency domain ıػַ /// public static string LowPassFilterProcessor_Description { get { @@ -1384,7 +1384,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Low Pass Filter 的本地化字符串。 + /// Low Pass Filter ıػַ /// public static string LowPassFilterProcessor_Name { get { @@ -1393,7 +1393,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Simple averaging smoothing filter 的本地化字符串。 + /// Simple averaging smoothing filter ıػַ /// public static string MeanFilterProcessor_Description { get { @@ -1402,7 +1402,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Kernel Size 的本地化字符串。 + /// Kernel Size ıػַ /// public static string MeanFilterProcessor_KernelSize { get { @@ -1411,7 +1411,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Size of the filter kernel (must be odd) 的本地化字符串。 + /// Size of the filter kernel (must be odd) ıػַ /// public static string MeanFilterProcessor_KernelSize_Desc { get { @@ -1420,7 +1420,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Mean Filter 的本地化字符串。 + /// Mean Filter ıػַ /// public static string MeanFilterProcessor_Name { get { @@ -1429,7 +1429,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Remove salt-and-pepper noise effectively 的本地化字符串。 + /// Remove salt-and-pepper noise effectively ıػַ /// public static string MedianFilterProcessor_Description { get { @@ -1438,7 +1438,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Kernel Size 的本地化字符串。 + /// Kernel Size ıػַ /// public static string MedianFilterProcessor_KernelSize { get { @@ -1447,7 +1447,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Size of the filter kernel (must be odd) 的本地化字符串。 + /// Size of the filter kernel (must be odd) ıػַ /// public static string MedianFilterProcessor_KernelSize_Desc { get { @@ -1456,7 +1456,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Median Filter 的本地化字符串。 + /// Median Filter ıػַ /// public static string MedianFilterProcessor_Name { get { @@ -1465,7 +1465,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Flip image horizontally, vertically, or both 的本地化字符串。 + /// Flip image horizontally, vertically, or both ıػַ /// public static string MirrorProcessor_Description { get { @@ -1474,7 +1474,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Direction 的本地化字符串。 + /// Direction ıػַ /// public static string MirrorProcessor_Direction { get { @@ -1483,7 +1483,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Flip direction: Horizontal (left-right), Vertical (up-down), Both (180° rotation) 的本地化字符串。 + /// Flip direction: Horizontal (left-right), Vertical (up-down), Both (180 rotation) ıػַ /// public static string MirrorProcessor_Direction_Desc { get { @@ -1492,7 +1492,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Mirror 的本地化字符串。 + /// Mirror ıػַ /// public static string MirrorProcessor_Name { get { @@ -1501,7 +1501,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Perform morphological operations (erosion, dilation, opening, closing) 的本地化字符串。 + /// Perform morphological operations (erosion, dilation, opening, closing) ıػַ /// public static string MorphologyProcessor_Description { get { @@ -1510,7 +1510,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Iterations 的本地化字符串。 + /// Iterations ıػַ /// public static string MorphologyProcessor_Iterations { get { @@ -1519,7 +1519,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Number of times to repeat morphological operation 的本地化字符串。 + /// Number of times to repeat morphological operation ıػַ /// public static string MorphologyProcessor_Iterations_Desc { get { @@ -1528,7 +1528,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Kernel Size 的本地化字符串。 + /// Kernel Size ıػַ /// public static string MorphologyProcessor_KernelSize { get { @@ -1537,7 +1537,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Size of structuring element 的本地化字符串。 + /// Size of structuring element ıػַ /// public static string MorphologyProcessor_KernelSize_Desc { get { @@ -1546,7 +1546,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Morphology Processing 的本地化字符串。 + /// Morphology Processing ıػַ /// public static string MorphologyProcessor_Name { get { @@ -1555,7 +1555,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Operation Type 的本地化字符串。 + /// Operation Type ıػַ /// public static string MorphologyProcessor_Operation { get { @@ -1564,7 +1564,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select morphological operation type 的本地化字符串。 + /// Select morphological operation type ıػַ /// public static string MorphologyProcessor_Operation_Desc { get { @@ -1573,7 +1573,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Color Map 的本地化字符串。 + /// Color Map ıػַ /// public static string PseudoColorProcessor_ColorMap { get { @@ -1582,7 +1582,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select color mapping table for rendering 的本地化字符串。 + /// Select color mapping table for rendering ıػַ /// public static string PseudoColorProcessor_ColorMap_Desc { get { @@ -1591,7 +1591,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Map grayscale image to color image using color maps 的本地化字符串。 + /// Map grayscale image to color image using color maps ıػַ /// public static string PseudoColorProcessor_Description { get { @@ -1600,7 +1600,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Invert Color Map 的本地化字符串。 + /// Invert Color Map ıػַ /// public static string PseudoColorProcessor_InvertMap { get { @@ -1609,7 +1609,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Reverse the color mapping direction 的本地化字符串。 + /// Reverse the color mapping direction ıػַ /// public static string PseudoColorProcessor_InvertMap_Desc { get { @@ -1618,7 +1618,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Max Gray Value 的本地化字符串。 + /// Max Gray Value ıػַ /// public static string PseudoColorProcessor_MaxValue { get { @@ -1627,7 +1627,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gray values above this will be clipped to maximum color 的本地化字符串。 + /// Gray values above this will be clipped to maximum color ıػַ /// public static string PseudoColorProcessor_MaxValue_Desc { get { @@ -1636,7 +1636,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Min Gray Value 的本地化字符串。 + /// Min Gray Value ıػַ /// public static string PseudoColorProcessor_MinValue { get { @@ -1645,7 +1645,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gray values below this will be clipped to minimum color 的本地化字符串。 + /// Gray values below this will be clipped to minimum color ıػַ /// public static string PseudoColorProcessor_MinValue_Desc { get { @@ -1654,7 +1654,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Pseudo Color Rendering 的本地化字符串。 + /// Pseudo Color Rendering ıػַ /// public static string PseudoColorProcessor_Name { get { @@ -1663,7 +1663,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Multi-scale shadow correction and illumination equalization based on Retinex 的本地化字符串。 + /// Multi-scale shadow correction and illumination equalization based on Retinex ıػַ /// public static string RetinexProcessor_Description { get { @@ -1672,7 +1672,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Gain 的本地化字符串。 + /// Gain ıػַ /// public static string RetinexProcessor_Gain { get { @@ -1681,7 +1681,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Output gain factor 的本地化字符串。 + /// Output gain factor ıػַ /// public static string RetinexProcessor_Gain_Desc { get { @@ -1690,7 +1690,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Processing Method 的本地化字符串。 + /// Processing Method ıػַ /// public static string RetinexProcessor_Method { get { @@ -1699,7 +1699,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select Retinex algorithm type 的本地化字符串。 + /// Select Retinex algorithm type ıػַ /// public static string RetinexProcessor_Method_Desc { get { @@ -1708,7 +1708,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Retinex Shadow Correction 的本地化字符串。 + /// Retinex Shadow Correction ıػַ /// public static string RetinexProcessor_Name { get { @@ -1717,7 +1717,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Offset 的本地化字符串。 + /// Offset ıػַ /// public static string RetinexProcessor_Offset { get { @@ -1726,7 +1726,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Output offset value 的本地化字符串。 + /// Output offset value ıػַ /// public static string RetinexProcessor_Offset_Desc { get { @@ -1735,7 +1735,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Scale 1 (Small) 的本地化字符串。 + /// Scale 1 (Small) ıػַ /// public static string RetinexProcessor_Sigma1 { get { @@ -1744,7 +1744,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Small scale Gaussian kernel sigma for detail enhancement 的本地化字符串。 + /// Small scale Gaussian kernel sigma for detail enhancement ıػַ /// public static string RetinexProcessor_Sigma1_Desc { get { @@ -1753,7 +1753,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Scale 2 (Medium) 的本地化字符串。 + /// Scale 2 (Medium) ıػַ /// public static string RetinexProcessor_Sigma2 { get { @@ -1762,7 +1762,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Medium scale Gaussian kernel sigma for local illumination correction 的本地化字符串。 + /// Medium scale Gaussian kernel sigma for local illumination correction ıػַ /// public static string RetinexProcessor_Sigma2_Desc { get { @@ -1771,7 +1771,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Scale 3 (Large) 的本地化字符串。 + /// Scale 3 (Large) ıػַ /// public static string RetinexProcessor_Sigma3 { get { @@ -1780,7 +1780,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Large scale Gaussian kernel sigma for global illumination correction 的本地化字符串。 + /// Large scale Gaussian kernel sigma for global illumination correction ıػַ /// public static string RetinexProcessor_Sigma3_Desc { get { @@ -1789,7 +1789,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Angle 的本地化字符串。 + /// Angle ıػַ /// public static string RotateProcessor_Angle { get { @@ -1798,7 +1798,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Rotation angle in degrees, positive is counter-clockwise 的本地化字符串。 + /// Rotation angle in degrees, positive is counter-clockwise ıػַ /// public static string RotateProcessor_Angle_Desc { get { @@ -1807,7 +1807,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Background 的本地化字符串。 + /// Background ıػַ /// public static string RotateProcessor_BackgroundValue { get { @@ -1816,7 +1816,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Background fill value (0-255) for areas outside the original image 的本地化字符串。 + /// Background fill value (0-255) for areas outside the original image ıػַ /// public static string RotateProcessor_BackgroundValue_Desc { get { @@ -1825,7 +1825,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Rotate image by arbitrary angle with optional canvas expansion 的本地化字符串。 + /// Rotate image by arbitrary angle with optional canvas expansion ıػַ /// public static string RotateProcessor_Description { get { @@ -1834,7 +1834,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Expand Canvas 的本地化字符串。 + /// Expand Canvas ıػַ /// public static string RotateProcessor_ExpandCanvas { get { @@ -1843,7 +1843,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Expand canvas to fit the entire rotated image, otherwise crop to original size 的本地化字符串。 + /// Expand canvas to fit the entire rotated image, otherwise crop to original size ıػַ /// public static string RotateProcessor_ExpandCanvas_Desc { get { @@ -1852,7 +1852,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Interpolation 的本地化字符串。 + /// Interpolation ıػַ /// public static string RotateProcessor_Interpolation { get { @@ -1861,7 +1861,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Interpolation method: Nearest (fast), Bilinear (smooth), Bicubic (high quality) 的本地化字符串。 + /// Interpolation method: Nearest (fast), Bilinear (smooth), Bicubic (high quality) ıػַ /// public static string RotateProcessor_Interpolation_Desc { get { @@ -1870,7 +1870,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Rotate 的本地化字符串。 + /// Rotate ıػַ /// public static string RotateProcessor_Name { get { @@ -1879,7 +1879,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Enhance image edges and details 的本地化字符串。 + /// Enhance image edges and details ıػַ /// public static string SharpenProcessor_Description { get { @@ -1888,7 +1888,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Kernel Size 的本地化字符串。 + /// Kernel Size ıػַ /// public static string SharpenProcessor_KernelSize { get { @@ -1897,7 +1897,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Size of sharpening kernel (must be odd) 的本地化字符串。 + /// Size of sharpening kernel (must be odd) ıػַ /// public static string SharpenProcessor_KernelSize_Desc { get { @@ -1906,7 +1906,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sharpen Method 的本地化字符串。 + /// Sharpen Method ıػַ /// public static string SharpenProcessor_Method { get { @@ -1915,7 +1915,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select sharpening algorithm 的本地化字符串。 + /// Select sharpening algorithm ıػַ /// public static string SharpenProcessor_Method_Desc { get { @@ -1924,7 +1924,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sharpen 的本地化字符串。 + /// Sharpen ıػַ /// public static string SharpenProcessor_Name { get { @@ -1933,7 +1933,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Strength 的本地化字符串。 + /// Strength ıػַ /// public static string SharpenProcessor_Strength { get { @@ -1942,7 +1942,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Strength of sharpening effect 的本地化字符串。 + /// Strength of sharpening effect ıػַ /// public static string SharpenProcessor_Strength_Desc { get { @@ -1951,7 +1951,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Edge enhancement and denoising 的本地化字符串。 + /// Edge enhancement and denoising ıػַ /// public static string ShockFilterProcessor_Description { get { @@ -1960,7 +1960,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Time Step 的本地化字符串。 + /// Time Step ıػַ /// public static string ShockFilterProcessor_Dt { get { @@ -1969,7 +1969,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Evolution time step 的本地化字符串。 + /// Evolution time step ıػַ /// public static string ShockFilterProcessor_Dt_Desc { get { @@ -1978,7 +1978,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Iterations 的本地化字符串。 + /// Iterations ıػַ /// public static string ShockFilterProcessor_Iterations { get { @@ -1987,7 +1987,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Number of filter iterations 的本地化字符串。 + /// Number of filter iterations ıػַ /// public static string ShockFilterProcessor_Iterations_Desc { get { @@ -1996,7 +1996,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Shock Filter 的本地化字符串。 + /// Shock Filter ıػַ /// public static string ShockFilterProcessor_Name { get { @@ -2005,7 +2005,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Threshold 的本地化字符串。 + /// Threshold ıػַ /// public static string ShockFilterProcessor_Theta { get { @@ -2014,7 +2014,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Edge detection threshold 的本地化字符串。 + /// Edge detection threshold ıػַ /// public static string ShockFilterProcessor_Theta_Desc { get { @@ -2023,7 +2023,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Detect image edges using Sobel operator 的本地化字符串。 + /// Detect image edges using Sobel operator ıػַ /// public static string SobelEdgeProcessor_Description { get { @@ -2032,7 +2032,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Detection Direction 的本地化字符串。 + /// Detection Direction ıػַ /// public static string SobelEdgeProcessor_Direction { get { @@ -2041,7 +2041,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Select edge detection direction 的本地化字符串。 + /// Select edge detection direction ıػַ /// public static string SobelEdgeProcessor_Direction_Desc { get { @@ -2050,7 +2050,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Kernel Size 的本地化字符串。 + /// Kernel Size ıػַ /// public static string SobelEdgeProcessor_KernelSize { get { @@ -2059,7 +2059,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sobel operator kernel size (odd number) 的本地化字符串。 + /// Sobel operator kernel size (odd number) ıػַ /// public static string SobelEdgeProcessor_KernelSize_Desc { get { @@ -2068,7 +2068,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Sobel Edge Detection 的本地化字符串。 + /// Sobel Edge Detection ıػַ /// public static string SobelEdgeProcessor_Name { get { @@ -2077,7 +2077,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Scale Factor 的本地化字符串。 + /// Scale Factor ıػַ /// public static string SobelEdgeProcessor_Scale { get { @@ -2086,7 +2086,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Scale factor for edge intensity 的本地化字符串。 + /// Scale factor for edge intensity ıػַ /// public static string SobelEdgeProcessor_Scale_Desc { get { @@ -2095,7 +2095,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Binarize image 的本地化字符串。 + /// Binarize image ıػַ /// public static string ThresholdProcessor_Description { get { @@ -2104,7 +2104,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Max Value 的本地化字符串。 + /// Max Value ıػַ /// public static string ThresholdProcessor_MaxValue { get { @@ -2113,7 +2113,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Pixels above threshold will be set to this value 的本地化字符串。 + /// Pixels above threshold will be set to this value ıػַ /// public static string ThresholdProcessor_MaxValue_Desc { get { @@ -2122,7 +2122,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Threshold Segmentation 的本地化字符串。 + /// Threshold Segmentation ıػַ /// public static string ThresholdProcessor_Name { get { @@ -2131,7 +2131,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Threshold 的本地化字符串。 + /// Threshold ıػַ /// public static string ThresholdProcessor_Threshold { get { @@ -2140,7 +2140,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Binarization threshold, pixels above this value will be set to max value 的本地化字符串。 + /// Binarization threshold, pixels above this value will be set to max value ıػַ /// public static string ThresholdProcessor_Threshold_Desc { get { @@ -2149,7 +2149,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 Use Otsu Auto Threshold 的本地化字符串。 + /// Use Otsu Auto Threshold ıػַ /// public static string ThresholdProcessor_UseOtsu { get { @@ -2158,7 +2158,7 @@ namespace ImageProcessing.Processors.Resources { } /// - /// 查找类似 When enabled, optimal threshold will be calculated automatically 的本地化字符串。 + /// When enabled, optimal threshold will be calculated automatically ıػַ /// public static string ThresholdProcessor_UseOtsu_Desc { get { diff --git a/ImageProcessing.Processors/Resources/Resources.resx b/XP.ImageProcessing.Processors/Resources/Resources.resx similarity index 100% rename from ImageProcessing.Processors/Resources/Resources.resx rename to XP.ImageProcessing.Processors/Resources/Resources.resx diff --git a/ImageProcessing.Processors/Resources/Resources.zh-CN.resx b/XP.ImageProcessing.Processors/Resources/Resources.zh-CN.resx similarity index 100% rename from ImageProcessing.Processors/Resources/Resources.zh-CN.resx rename to XP.ImageProcessing.Processors/Resources/Resources.zh-CN.resx diff --git a/ImageProcessing.Processors/ImageProcessing.Processors.csproj b/XP.ImageProcessing.Processors/XP.ImageProcessing.Processors.csproj similarity index 86% rename from ImageProcessing.Processors/ImageProcessing.Processors.csproj rename to XP.ImageProcessing.Processors/XP.ImageProcessing.Processors.csproj index 6db6112..732ba01 100644 --- a/ImageProcessing.Processors/ImageProcessing.Processors.csproj +++ b/XP.ImageProcessing.Processors/XP.ImageProcessing.Processors.csproj @@ -5,6 +5,8 @@ enable enable true + XP.ImageProcessing.Processors + XP.ImageProcessing.Processors @@ -28,7 +30,7 @@ - + diff --git a/ImageProcessing.Processors/其他/FilmEffectProcessor.cs b/XP.ImageProcessing.Processors/其他/FilmEffectProcessor.cs similarity index 93% rename from ImageProcessing.Processors/其他/FilmEffectProcessor.cs rename to XP.ImageProcessing.Processors/其他/FilmEffectProcessor.cs index 2a2c831..a3cc5f7 100644 --- a/ImageProcessing.Processors/其他/FilmEffectProcessor.cs +++ b/XP.ImageProcessing.Processors/其他/FilmEffectProcessor.cs @@ -1,24 +1,23 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: FilmEffectProcessor.cs -// 描述: 电子胶片效果算子,模拟传统X射线胶片的显示效果 +// 文件? FilmEffectProcessor.cs +// 描述: 电子胶片效果算子,模拟传统X射线胶片的显示效? // 功能: -// - 窗宽窗位(Window/Level)调整 -// - 胶片反转(正片/负片) +// - 窗宽窗位(Window/Level)调? +// - 胶片反转(正?负片? // - 多种胶片特性曲线(线性、S曲线、对数、指数) // - 边缘增强(模拟胶片锐化效果) -// - 使用查找表(LUT)加速处理 -// 算法: 窗宽窗位映射 + 特性曲线变换 -// 作者: 李伟 wei.lw.li@hexagon.com +// - 使用查找表(LUT)加速处? +// 算法: 窗宽窗位映射 + 特性曲线变? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; -using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 电子胶片效果算子 @@ -103,7 +102,7 @@ public class FilmEffectProcessor : ImageProcessorBase double curveStrength = GetParameter("CurveStrength"); double edgeEnhance = GetParameter("EdgeEnhance"); - // 构建查找表 + // 构建查找? BuildLUT(windowCenter, windowWidth, invert, curve, curveStrength); // 应用 LUT @@ -150,14 +149,14 @@ public class FilmEffectProcessor : ImageProcessorBase for (int i = 0; i < 256; i++) { - // 窗宽窗位映射到 [0, 1] + // 窗宽窗位映射?[0, 1] double normalized; if (ww <= 1) normalized = i >= wc ? 1.0 : 0.0; else normalized = Math.Clamp((i - low) / (high - low), 0.0, 1.0); - // 应用特性曲线 + // 应用特性曲? double mapped = curve switch { "Sigmoid" => ApplySigmoid(normalized, strength), diff --git a/ImageProcessing.Processors/其他/PseudoColorProcessor.cs b/XP.ImageProcessing.Processors/其他/PseudoColorProcessor.cs similarity index 92% rename from ImageProcessing.Processors/其他/PseudoColorProcessor.cs rename to XP.ImageProcessing.Processors/其他/PseudoColorProcessor.cs index e1af058..ab75243 100644 --- a/ImageProcessing.Processors/其他/PseudoColorProcessor.cs +++ b/XP.ImageProcessing.Processors/其他/PseudoColorProcessor.cs @@ -1,25 +1,25 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: PseudoColorProcessor.cs +// 文件? PseudoColorProcessor.cs // 描述: 伪色彩渲染算子,将灰度图像映射为彩色图像 // 功能: // - 支持多种 OpenCV 内置色彩映射表(Jet、Hot、Cool、Rainbow 等) // - 可选灰度范围裁剪,突出感兴趣的灰度区间 -// - 可选反转色彩映射方向 -// 算法: 查找表(LUT)色彩映射 -// 作者: 李伟 wei.lw.li@hexagon.com +// - 可选反转色彩映射方? +// 算法: 查找表(LUT)色彩映? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 伪色彩渲染算子 +/// 伪色彩渲染算? /// public class PseudoColorProcessor : ImageProcessorBase { @@ -82,11 +82,11 @@ public class PseudoColorProcessor : ImageProcessorBase OutputData.Clear(); - // 灰度范围裁剪与归一化 + // 灰度范围裁剪与归一? Image normalized; if (minValue > 0 || maxValue < 255) { - // 将 [minValue, maxValue] 映射到 [0, 255] + // ?[minValue, maxValue] 映射?[0, 255] normalized = inputImage.Clone(); double scale = 255.0 / Math.Max(maxValue - minValue, 1); for (int y = 0; y < normalized.Height; y++) @@ -135,7 +135,7 @@ public class PseudoColorProcessor : ImageProcessorBase var colorImage = colorMat.ToImage(); - // 将彩色图像存入 OutputData,供 UI 显示 + // 将彩色图像存?OutputData,供 UI 显示 OutputData["PseudoColorImage"] = colorImage; _logger.Debug("Process: ColorMap={ColorMap}, MinValue={Min}, MaxValue={Max}, InvertMap={Invert}", diff --git a/ImageProcessing.Processors/图像变换/GrayscaleProcessor.cs b/XP.ImageProcessing.Processors/图像变换/GrayscaleProcessor.cs similarity index 89% rename from ImageProcessing.Processors/图像变换/GrayscaleProcessor.cs rename to XP.ImageProcessing.Processors/图像变换/GrayscaleProcessor.cs index 6fb7b53..374e95a 100644 --- a/ImageProcessing.Processors/图像变换/GrayscaleProcessor.cs +++ b/XP.ImageProcessing.Processors/图像变换/GrayscaleProcessor.cs @@ -1,25 +1,25 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: GrayscaleProcessor.cs +// 文件? GrayscaleProcessor.cs // 描述: 灰度图转换算子,用于将彩色图像转换为灰度图像 // 功能: // - 标准灰度转换(加权平均) // - 平均值法 // - 最大值法 // - 最小值法 -// 算法: 加权平均法 Gray = 0.299*R + 0.587*G + 0.114*B -// 作者: 李伟 wei.lw.li@hexagon.com +// 算法: 加权平均?Gray = 0.299*R + 0.587*G + 0.114*B +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 灰度图转换算子 +/// 灰度图转换算? /// public class GrayscaleProcessor : ImageProcessorBase { @@ -49,13 +49,13 @@ public class GrayscaleProcessor : ImageProcessorBase { string method = GetParameter("Method"); - // 如果输入已经是灰度图,根据方法进行处理 + // 如果输入已经是灰度图,根据方法进行处? var result = inputImage.Clone(); switch (method) { case "Average": - // 对于已经是灰度的图像,平均值法不改变图像 + // 对于已经是灰度的图像,平均值法不改变图? break; case "Max": diff --git a/ImageProcessing.Processors/图像变换/MirrorProcessor.cs b/XP.ImageProcessing.Processors/图像变换/MirrorProcessor.cs similarity index 87% rename from ImageProcessing.Processors/图像变换/MirrorProcessor.cs rename to XP.ImageProcessing.Processors/图像变换/MirrorProcessor.cs index 39dcd74..79e0e9c 100644 --- a/ImageProcessing.Processors/图像变换/MirrorProcessor.cs +++ b/XP.ImageProcessing.Processors/图像变换/MirrorProcessor.cs @@ -1,22 +1,22 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: MirrorProcessor.cs -// 描述: 镜像算子,用于图像翻转 +// 文件? MirrorProcessor.cs +// 描述: 镜像算子,用于图像翻? // 功能: // - 水平镜像(左右翻转) // - 垂直镜像(上下翻转) -// - 对角镜像(水平+垂直翻转,等效180°旋转) +// - 对角镜像(水?垂直翻转,等?80°旋转? // 算法: 像素坐标映射 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 镜像算子 diff --git a/ImageProcessing.Processors/图像变换/RotateProcessor.cs b/XP.ImageProcessing.Processors/图像变换/RotateProcessor.cs similarity index 95% rename from ImageProcessing.Processors/图像变换/RotateProcessor.cs rename to XP.ImageProcessing.Processors/图像变换/RotateProcessor.cs index bf64c8b..ecf8e39 100644 --- a/ImageProcessing.Processors/图像变换/RotateProcessor.cs +++ b/XP.ImageProcessing.Processors/图像变换/RotateProcessor.cs @@ -1,24 +1,24 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: RotateProcessor.cs +// 文件? RotateProcessor.cs // 描述: 图像旋转算子 // 功能: // - 任意角度旋转 // - 支持保持原始尺寸或自适应扩展画布 -// - 可选背景填充值 -// - 支持双线性插值 +// - 可选背景填充? +// - 支持双线性插? // 算法: 仿射变换旋转 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 图像旋转算子 @@ -101,14 +101,14 @@ public class RotateProcessor : ImageProcessorBase if (expandCanvas) { - // 计算旋转后能容纳整幅图像的画布尺寸 + // 计算旋转后能容纳整幅图像的画布尺? double rad = Math.Abs(angle * Math.PI / 180.0); double sinA = Math.Abs(Math.Sin(rad)); double cosA = Math.Abs(Math.Cos(rad)); dstW = (int)Math.Ceiling(srcW * cosA + srcH * sinA); dstH = (int)Math.Ceiling(srcW * sinA + srcH * cosA); - // 调整旋转矩阵的平移分量,使图像居中 + // 调整旋转矩阵的平移分量,使图像居? double[] m = new double[6]; rotMat.CopyTo(m); m[2] += (dstW - srcW) / 2.0; diff --git a/ImageProcessing.Processors/图像变换/ThresholdProcessor.cs b/XP.ImageProcessing.Processors/图像变换/ThresholdProcessor.cs similarity index 92% rename from ImageProcessing.Processors/图像变换/ThresholdProcessor.cs rename to XP.ImageProcessing.Processors/图像变换/ThresholdProcessor.cs index 327100d..2dffda2 100644 --- a/ImageProcessing.Processors/图像变换/ThresholdProcessor.cs +++ b/XP.ImageProcessing.Processors/图像变换/ThresholdProcessor.cs @@ -1,26 +1,26 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: ThresholdProcessor.cs +// 文件? ThresholdProcessor.cs // 描述: 阈值分割算子,用于图像二值化处理 // 功能: // - 固定阈值二值化 -// - Otsu自动阈值计算 -// - 可调节阈值和最大值 -// - 将灰度图像转换为二值图像 +// - Otsu自动阈值计? +// - 可调节阈值和最大? +// - 将灰度图像转换为二值图? // 算法: 阈值分割、Otsu算法 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 阈值分割算子 +/// 阈值分割算? /// public class ThresholdProcessor : ImageProcessorBase { diff --git a/ImageProcessing.Processors/图像增强/ColorLayerProcessor.cs b/XP.ImageProcessing.Processors/图像增强/ColorLayerProcessor.cs similarity index 91% rename from ImageProcessing.Processors/图像增强/ColorLayerProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/ColorLayerProcessor.cs index 7d0ba64..adab492 100644 --- a/ImageProcessing.Processors/图像增强/ColorLayerProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/ColorLayerProcessor.cs @@ -1,26 +1,25 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: ColorLayerProcessor.cs -// 描述: 色彩分层算子,将灰度图像按亮度区间分层 +// 文件? ColorLayerProcessor.cs +// 描述: 色彩分层算子,将灰度图像按亮度区间分? // 功能: // - 将灰度图像按指定层数均匀分层 -// - 支持自定义分层数(2~16层) -// - 支持均匀分层和基于 Otsu 的自适应分层 +// - 支持自定义分层数?~16层) +// - 支持均匀分层和基?Otsu 的自适应分层 // - 可选保留原始灰度或映射为等间距灰度 -// 算法: 灰度量化 / 多阈值分割 -// 作者: 李伟 wei.lw.li@hexagon.com +// 算法: 灰度量化 / 多阈值分? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; -using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 色彩分层算子,将灰度图像按亮度区间分为多个层级 +/// 色彩分层算子,将灰度图像按亮度区间分为多个层? /// public class ColorLayerProcessor : ImageProcessorBase { @@ -89,12 +88,12 @@ public class ColorLayerProcessor : ImageProcessorBase _logger.Debug("Process: Layers={Layers}, Method={Method}, OutputMode={OutputMode}, TargetLayer={TargetLayer}", layers, method, outputMode, targetLayer); - // 计算分层阈值 + // 计算分层阈? byte[] thresholds = method == "Otsu" ? ComputeOtsuMultiThresholds(inputImage, layers) : ComputeUniformThresholds(layers); - // 计算每层的输出灰度值 + // 计算每层的输出灰度? byte[] layerValues = ComputeLayerValues(thresholds, layers, outputMode); // 应用分层映射 @@ -106,7 +105,7 @@ public class ColorLayerProcessor : ImageProcessorBase if (targetLayer == 0) { - // 输出全部层 + // 输出全部? Parallel.For(0, height, y => { for (int x = 0; x < width; x++) @@ -119,8 +118,8 @@ public class ColorLayerProcessor : ImageProcessorBase } else { - // 只输出指定层:选中层为 255(白),其余为 0(黑) - int target = targetLayer - 1; // 参数从1开始,内部索引从0开始 + // 只输出指定层:选中层为 255(白),其余?0(黑? + int target = targetLayer - 1; // 参数?开始,内部索引?开? Parallel.For(0, height, y => { for (int x = 0; x < width; x++) @@ -137,7 +136,7 @@ public class ColorLayerProcessor : ImageProcessorBase } /// - /// 均匀分层阈值:将 [0, 255] 等分 + /// 均匀分层阈值:?[0, 255] 等分 /// private static byte[] ComputeUniformThresholds(int layers) { @@ -153,7 +152,7 @@ public class ColorLayerProcessor : ImageProcessorBase /// private static byte[] ComputeOtsuMultiThresholds(Image image, int layers) { - // 计算直方图 + // 计算直方? int[] histogram = new int[256]; var data = image.Data; int h = image.Height, w = image.Width; @@ -176,7 +175,7 @@ public class ColorLayerProcessor : ImageProcessorBase if (layers <= 1 || low >= high) return; - // 在 [low, high] 范围内找 Otsu 阈值 + // ?[low, high] 范围内找 Otsu 阈? long totalPixels = 0; long totalSum = 0; for (int i = low; i <= high; i++) @@ -220,7 +219,7 @@ public class ColorLayerProcessor : ImageProcessorBase } /// - /// 计算每层的输出灰度值 + /// 计算每层的输出灰度? /// private static byte[] ComputeLayerValues(byte[] thresholds, int layers, string outputMode) { @@ -233,7 +232,7 @@ public class ColorLayerProcessor : ImageProcessorBase } else // MidValue { - // 每层取区间中值 + // 每层取区间中? values[0] = (byte)(thresholds.Length > 0 ? thresholds[0] / 2 : 128); for (int i = 1; i < layers - 1; i++) values[i] = (byte)((thresholds[i - 1] + thresholds[i]) / 2); @@ -243,7 +242,7 @@ public class ColorLayerProcessor : ImageProcessorBase } /// - /// 根据阈值数组确定像素所属层级 + /// 根据阈值数组确定像素所属层? /// private static int GetLayerIndex(byte pixel, byte[] thresholds) { diff --git a/ImageProcessing.Processors/图像增强/ContrastProcessor.cs b/XP.ImageProcessing.Processors/图像增强/ContrastProcessor.cs similarity index 93% rename from ImageProcessing.Processors/图像增强/ContrastProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/ContrastProcessor.cs index de0e216..bc62084 100644 --- a/ImageProcessing.Processors/图像增强/ContrastProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/ContrastProcessor.cs @@ -1,26 +1,26 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: ContrastProcessor.cs -// 描述: 对比度调整算子,用于增强图像对比度 +// 文件? ContrastProcessor.cs +// 描述: 对比度调整算子,用于增强图像对比? // 功能: -// - 线性对比度和亮度调整 -// - 自动对比度拉伸 -// - CLAHE(对比度受限自适应直方图均衡化) -// - 支持多种对比度增强方法 +// - 线性对比度和亮度调? +// - 自动对比度拉? +// - CLAHE(对比度受限自适应直方图均衡化? +// - 支持多种对比度增强方? // 算法: 线性变换、直方图均衡化、CLAHE -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 对比度调整算子 +/// 对比度调整算? /// public class ContrastProcessor : ImageProcessorBase { diff --git a/ImageProcessing.Processors/图像增强/GammaProcessor.cs b/XP.ImageProcessing.Processors/图像增强/GammaProcessor.cs similarity index 93% rename from ImageProcessing.Processors/图像增强/GammaProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/GammaProcessor.cs index c9a85d7..bb9902f 100644 --- a/ImageProcessing.Processors/图像增强/GammaProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/GammaProcessor.cs @@ -1,22 +1,22 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: GammaProcessor.cs -// 描述: Gamma校正算子,用于调整图像亮度和对比度 +// 文件? GammaProcessor.cs +// 描述: Gamma校正算子,用于调整图像亮度和对比? // 功能: -// - Gamma非线性校正 +// - Gamma非线性校? // - 增益调整 -// - 使用查找表(LUT)加速处理 +// - 使用查找表(LUT)加速处? // - 适用于图像显示和亮度调整 // 算法: Gamma校正公式 output = (input^(1/gamma)) * gain -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// Gamma校正算子 diff --git a/ImageProcessing.Processors/图像增强/HDREnhancementProcessor.cs b/XP.ImageProcessing.Processors/图像增强/HDREnhancementProcessor.cs similarity index 94% rename from ImageProcessing.Processors/图像增强/HDREnhancementProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/HDREnhancementProcessor.cs index b4730cc..0f12aa6 100644 --- a/ImageProcessing.Processors/图像增强/HDREnhancementProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/HDREnhancementProcessor.cs @@ -1,26 +1,26 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: HDREnhancementProcessor.cs -// 描述: 高动态范围(HDR)图像增强算子 +// 文件? HDREnhancementProcessor.cs +// 描述: 高动态范围(HDR)图像增强算? // 功能: -// - 局部色调映射(Local Tone Mapping) -// - 自适应对数映射(Adaptive Logarithmic Mapping) +// - 局部色调映射(Local Tone Mapping? +// - 自适应对数映射(Adaptive Logarithmic Mapping? // - Drago色调映射 // - 双边滤波色调映射 -// - 增强图像暗部和亮部细节 +// - 增强图像暗部和亮部细? // 算法: 基于色调映射的HDR增强 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 高动态范围图像增强算子 +/// 高动态范围图像增强算? /// public class HDREnhancementProcessor : ImageProcessorBase { @@ -138,8 +138,8 @@ public class HDREnhancementProcessor : ImageProcessorBase } /// - /// 局部色调映射 - /// 将图像分解为基础层(光照)和细节层,分别处理后合成 + /// 局部色调映? + /// 将图像分解为基础层(光照)和细节层,分别处理后合? /// Base = GaussianBlur(log(I)) /// Detail = log(I) - Base /// Output = exp(Base_compressed + Detail * boost) @@ -156,22 +156,22 @@ public class HDREnhancementProcessor : ImageProcessorBase for (int x = 0; x < width; x++) floatImage.Data[y, x, 0] = floatImage.Data[y, x, 0] / 255.0f + 0.001f; - // 对数域 + // 对数? var logImage = new Image(width, height); for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) logImage.Data[y, x, 0] = (float)Math.Log(floatImage.Data[y, x, 0]); - // 基础层:大尺度高斯模糊提取光照分量 + // 基础层:大尺度高斯模糊提取光照分? int kernelSize = (int)(sigmaSpace * 6) | 1; if (kernelSize < 3) kernelSize = 3; var baseLayer = new Image(width, height); CvInvoke.GaussianBlur(logImage, baseLayer, new System.Drawing.Size(kernelSize, kernelSize), sigmaSpace); - // 细节层 + // 细节? var detailLayer = logImage - baseLayer; - // 压缩基础层的动态范围 + // 压缩基础层的动态范? double baseMin = double.MaxValue, baseMax = double.MinValue; for (int y = 0; y < height; y++) { @@ -200,7 +200,7 @@ public class HDREnhancementProcessor : ImageProcessorBase } } - // 合成:压缩后的基础层 + 增强的细节层 + // 合成:压缩后的基础?+ 增强的细节层 var combined = new Image(width, height); for (int y = 0; y < height; y++) { @@ -287,7 +287,7 @@ public class HDREnhancementProcessor : ImageProcessorBase for (int x = 0; x < width; x++) floatImage.Data[y, x, 0] /= 255.0f; - // 计算全局最大亮度 + // 计算全局最大亮? float globalMax = 0; for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) @@ -364,7 +364,7 @@ public class HDREnhancementProcessor : ImageProcessorBase for (int x = 0; x < width; x++) floatImage.Data[y, x, 0] /= 255.0f; - // 全局最大亮度 + // 全局最大亮? float maxLum = 0; for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) @@ -410,7 +410,7 @@ public class HDREnhancementProcessor : ImageProcessorBase /// /// 双边滤波色调映射 - /// 使用双边滤波分离基础层和细节层 + /// 使用双边滤波分离基础层和细节? /// 双边滤波保边特性使得细节层更加精确 /// private Image BilateralToneMapping(Image inputImage, @@ -419,20 +419,20 @@ public class HDREnhancementProcessor : ImageProcessorBase int width = inputImage.Width; int height = inputImage.Height; - // 转换为浮点并取对数 + // 转换为浮点并取对? var floatImage = inputImage.Convert(); var logImage = new Image(width, height); for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) logImage.Data[y, x, 0] = (float)Math.Log(floatImage.Data[y, x, 0] / 255.0f + 0.001); - // 双边滤波提取基础层(保边平滑) + // 双边滤波提取基础层(保边平滑? int diameter = (int)(sigmaSpace * 2) | 1; if (diameter < 3) diameter = 3; if (diameter > 31) diameter = 31; var baseLayer = new Image(width, height); - // 转换为 byte 进行双边滤波,再转回 float + // 转换?byte 进行双边滤波,再转回 float var logNorm = NormalizeToByteImage(logImage); var baseNorm = new Image(width, height); CvInvoke.BilateralFilter(logNorm, baseNorm, diameter, sigmaColor, sigmaSpace); @@ -454,10 +454,10 @@ public class HDREnhancementProcessor : ImageProcessorBase for (int x = 0; x < width; x++) baseLayer.Data[y, x, 0] = (float)(baseNorm.Data[y, x, 0] / 255.0 * logRange + logMin); - // 细节层 = 对数图像 - 基础层 + // 细节?= 对数图像 - 基础? var detailLayer = logImage - baseLayer; - // 压缩基础层 + // 压缩基础? double baseMin = double.MaxValue, baseMax = double.MinValue; for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) diff --git a/ImageProcessing.Processors/图像增强/HierarchicalEnhancementProcessor.cs b/XP.ImageProcessing.Processors/图像增强/HierarchicalEnhancementProcessor.cs similarity index 91% rename from ImageProcessing.Processors/图像增强/HierarchicalEnhancementProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/HierarchicalEnhancementProcessor.cs index db04325..648e0ae 100644 --- a/ImageProcessing.Processors/图像增强/HierarchicalEnhancementProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/HierarchicalEnhancementProcessor.cs @@ -1,22 +1,21 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: HierarchicalEnhancementProcessor.cs -// 描述: 层次增强算子,基于多尺度高斯分解对不同尺度细节独立增强 +// 文件? HierarchicalEnhancementProcessor.cs +// 描述: 层次增强算子,基于多尺度高斯分解对不同尺度细节独立增? // 功能: -// - 将图像分解为多层细节层 + 基础层 -// - 对每层细节独立控制增益 -// - 支持基础层亮度调整和对比度限制 +// - 将图像分解为多层细节?+ 基础? +// - 对每层细节独立控制增? +// - 支持基础层亮度调整和对比度限? // 算法: 多尺度高斯差分分解与重建 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; -using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 层次增强算子,基于多尺度高斯差分对不同尺度的图像细节进行独立增强 @@ -106,16 +105,16 @@ public class HierarchicalEnhancementProcessor : ImageProcessorBase int w = inputImage.Width; // === 多尺度高斯差分分解(全部在原始分辨率上操作,无需金字塔上下采样) === - // 用递增 sigma 的高斯模糊生成平滑层序列:G0(原图), G1, G2, ..., G_n(基础层) - // 细节层 D_i = G_i - G_{i+1} + // 用递增 sigma 的高斯模糊生成平滑层序列:G0(原图), G1, G2, ..., G_n(基础? + // 细节?D_i = G_i - G_{i+1} // 重建:output = sum(D_i * gain_i) + G_n * baseGain - // 计算每层的高斯 sigma(指数递增) + // 计算每层的高?sigma(指数递增? var sigmas = new double[levels]; for (int i = 0; i < levels; i++) sigmas[i] = Math.Pow(2, i + 1); // 2, 4, 8, 16, ... - // 生成平滑层序列(float 数组,避免 Emgu float Image 的问题) + // 生成平滑层序列(float 数组,避?Emgu float Image 的问题) var smoothLayers = new float[levels + 1][]; // [0]=原图, [1..n]=高斯模糊 smoothLayers[0] = new float[h * w]; var srcData = inputImage.Data; @@ -132,7 +131,7 @@ public class HierarchicalEnhancementProcessor : ImageProcessorBase if (ksize < 3) ksize = 3; using var src = new Image(w, h); - // 从上一层 float 转 byte 做高斯模糊 + // 从上一?float ?byte 做高斯模? var prevLayer = smoothLayers[i]; var sd = src.Data; Parallel.For(0, h, y => @@ -181,7 +180,7 @@ public class HierarchicalEnhancementProcessor : ImageProcessorBase var result = new Image(w, h); var resultData = result.Data; - // 预转换 gains 为 float + // 预转?gains ?float var fGains = new float[levels]; for (int i = 0; i < levels; i++) fGains[i] = (float)gains[i]; @@ -210,4 +209,4 @@ public class HierarchicalEnhancementProcessor : ImageProcessorBase _logger.Debug("Process completed: {Levels} levels, output={W}x{H}", levels, w, h); return result; } -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/图像增强/HistogramEqualizationProcessor.cs b/XP.ImageProcessing.Processors/图像增强/HistogramEqualizationProcessor.cs similarity index 94% rename from ImageProcessing.Processors/图像增强/HistogramEqualizationProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/HistogramEqualizationProcessor.cs index c964049..fa07e15 100644 --- a/ImageProcessing.Processors/图像增强/HistogramEqualizationProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/HistogramEqualizationProcessor.cs @@ -1,22 +1,22 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: HistogramEqualizationProcessor.cs +// 文件? HistogramEqualizationProcessor.cs // 描述: 直方图均衡化算子,用于增强图像对比度 // 功能: // - 全局直方图均衡化 -// - 自适应直方图均衡化(CLAHE) -// - 限制对比度增强 +// - 自适应直方图均衡化(CLAHE? +// - 限制对比度增? // - 改善图像的整体对比度 // 算法: 直方图均衡化、CLAHE -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 直方图均衡化算子 @@ -122,7 +122,7 @@ public class HistogramEqualizationProcessor : ImageProcessorBase var limited = floatTile + diff * Math.Min(clipLimit / 10.0, 1.0); var limitedByte = limited.Convert(); - // 复制到结果图像 + // 复制到结果图? result.ROI = roi; limitedByte.CopyTo(result); result.ROI = System.Drawing.Rectangle.Empty; diff --git a/ImageProcessing.Processors/图像增强/HistogramOverlayProcessor.cs b/XP.ImageProcessing.Processors/图像增强/HistogramOverlayProcessor.cs similarity index 89% rename from ImageProcessing.Processors/图像增强/HistogramOverlayProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/HistogramOverlayProcessor.cs index a9a545c..16faa40 100644 --- a/ImageProcessing.Processors/图像增强/HistogramOverlayProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/HistogramOverlayProcessor.cs @@ -1,27 +1,27 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: HistogramOverlayProcessor.cs +// 文件? HistogramOverlayProcessor.cs // 描述: 直方图叠加算子,计算灰度直方图并以蓝色柱状图绘制到结果图像左上角 // 功能: // - 计算输入图像的灰度直方图 -// - 将直方图绘制为蓝色半透明柱状图叠加到图像左上角 -// - 输出直方图统计表格数据 -// 算法: 灰度直方图统计 + 彩色图像叠加 -// 作者: 李伟 wei.lw.li@hexagon.com +// - 将直方图绘制为蓝色半透明柱状图叠加到图像左上? +// - 输出直方图统计表格数? +// 算法: 灰度直方图统?+ 彩色图像叠加 +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; using System.Text; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 直方图叠加算子,计算灰度直方图并以蓝色柱状图绘制到结果图像左上角,同时输出统计表格 +/// 直方图叠加算子,计算灰度直方图并以蓝色柱状图绘制到结果图像左上角,同时输出统计表? /// public class HistogramOverlayProcessor : ImageProcessorBase { @@ -29,10 +29,11 @@ public class HistogramOverlayProcessor : ImageProcessorBase // 固定参数 private const int ChartWidth = 256; // 柱状图绘图区宽度 + private const int ChartHeight = 200; // 柱状图绘图区高度 - private const int AxisMarginLeft = 50; // Y轴标签预留宽度 - private const int AxisMarginBottom = 25; // X轴标签预留高度 - private const int Padding = 8; // 背景额外内边距 + private const int AxisMarginLeft = 50; // Y轴标签预留宽? + private const int AxisMarginBottom = 25; // X轴标签预留高? + private const int Padding = 8; // 背景额外内边? private const int PaddingRight = 25; // 右侧额外内边距(容纳X轴末尾刻度文字) private const int Margin = 10; // 距图像左上角边距 private const float BgAlpha = 0.6f; @@ -47,7 +48,7 @@ public class HistogramOverlayProcessor : ImageProcessorBase protected override void InitializeParameters() { - // 无可调参数 + // 无可调参? } public override Image Process(Image inputImage) @@ -56,7 +57,7 @@ public class HistogramOverlayProcessor : ImageProcessorBase int w = inputImage.Width; var srcData = inputImage.Data; - // === 1. 计算灰度直方图 === + // === 1. 计算灰度直方?=== var hist = new int[256]; for (int y = 0; y < h; y++) for (int x = 0; x < w; x++) @@ -95,15 +96,15 @@ public class HistogramOverlayProcessor : ImageProcessorBase // === 3. 输出表格数据 === var sb = new StringBuilder(); - sb.AppendLine("=== 灰度直方图统计 ==="); + sb.AppendLine("=== 灰度直方图统?==="); sb.AppendLine($"图像尺寸: {w} x {h}"); sb.AppendLine($"总像素数: {totalPixels}"); - sb.AppendLine($"最小灰度: {minVal}"); - sb.AppendLine($"最大灰度: {maxVal}"); + sb.AppendLine($"最小灰? {minVal}"); + sb.AppendLine($"最大灰? {maxVal}"); sb.AppendLine($"平均灰度: {mean:F2}"); sb.AppendLine($"中位灰度: {medianVal}"); - sb.AppendLine($"众数灰度: {modeVal} (出现 {modeCount} 次)"); - sb.AppendLine($"标准差: {stdDev:F2}"); + sb.AppendLine($"众数灰度: {modeVal} (出现 {modeCount} ?"); + sb.AppendLine($"标准? {stdDev:F2}"); sb.AppendLine(); sb.AppendLine("灰度值\t像素数\t占比(%)"); for (int i = 0; i < 256; i++) @@ -119,8 +120,8 @@ public class HistogramOverlayProcessor : ImageProcessorBase var colorImage = inputImage.Convert(); var colorData = colorImage.Data; - // 布局:背景区域包含 Padding + Y轴标签 + 绘图区 + Padding(水平) - // Padding + 绘图区 + X轴标签 + Padding(垂直) + // 布局:背景区域包?Padding + Y轴标?+ 绘图?+ Padding(水平) + // Padding + 绘图?+ X轴标?+ Padding(垂直) int totalW = Padding + AxisMarginLeft + ChartWidth + PaddingRight; int totalH = Padding + ChartHeight + AxisMarginBottom + Padding; int bgW = Math.Min(totalW, w - Margin); @@ -132,7 +133,7 @@ public class HistogramOverlayProcessor : ImageProcessorBase int plotH = Math.Min(ChartHeight, bgH - Padding - AxisMarginBottom - Padding); if (plotW <= 0 || plotH <= 0) goto SkipOverlay; - // 绘图区左上角在图像中的坐标 + // 绘图区左上角在图像中的坐? int plotX0 = Margin + Padding + AxisMarginLeft; int plotY0 = Margin + Padding; @@ -163,7 +164,7 @@ public class HistogramOverlayProcessor : ImageProcessorBase } }); - // 绘制蓝色柱状图 + // 绘制蓝色柱状? Parallel.For(0, plotH, dy => { int imgY = plotY0 + dy; @@ -187,7 +188,7 @@ public class HistogramOverlayProcessor : ImageProcessorBase } }); - // === 5. 绘制坐标轴线和刻度标注 === + // === 5. 绘制坐标轴线和刻度标?=== var white = new MCvScalar(255, 255, 255); var gray = new MCvScalar(180, 180, 180); @@ -203,7 +204,7 @@ public class HistogramOverlayProcessor : ImageProcessorBase new Point(plotX0 + plotW, plotY0 + plotH), white, 1); - // X轴刻度: 0, 64, 128, 192, 255 + // X轴刻? 0, 64, 128, 192, 255 int[] xTicks = { 0, 64, 128, 192, 255 }; foreach (int tick in xTicks) { @@ -219,7 +220,7 @@ public class HistogramOverlayProcessor : ImageProcessorBase FontFace.HersheySimplex, FontScale, white, FontThickness); } - // Y轴刻度: 0%, 25%, 50%, 75%, 100% + // Y轴刻? 0%, 25%, 50%, 75%, 100% for (int i = 0; i <= 4; i++) { int val = maxCount * i / 4; @@ -247,7 +248,7 @@ public class HistogramOverlayProcessor : ImageProcessorBase } } - SkipOverlay: + SkipOverlay: OutputData["PseudoColorImage"] = colorImage; _logger.Debug("Process completed: histogram overlay, mean={Mean:F2}, stdDev={Std:F2}", mean, stdDev); @@ -255,7 +256,7 @@ public class HistogramOverlayProcessor : ImageProcessorBase } /// - /// 格式化像素计数为紧凑字符串(如 12345 → "12.3K") + /// 格式化像素计数为紧凑字符串(?12345 ?"12.3K"? /// private static string FormatCount(int count) { @@ -263,4 +264,4 @@ public class HistogramOverlayProcessor : ImageProcessorBase if (count >= 1_000) return $"{count / 1_000.0:F1}K"; return count.ToString(); } -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/图像增强/RetinexProcessor.cs b/XP.ImageProcessing.Processors/图像增强/RetinexProcessor.cs similarity index 95% rename from ImageProcessing.Processors/图像增强/RetinexProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/RetinexProcessor.cs index 8414907..bd1156d 100644 --- a/ImageProcessing.Processors/图像增强/RetinexProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/RetinexProcessor.cs @@ -1,6 +1,6 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: RetinexProcessor.cs +// 文件? RetinexProcessor.cs // 描述: 基于Retinex的多尺度阴影校正算子 // 功能: // - 单尺度Retinex (SSR) @@ -8,19 +8,19 @@ // - 带色彩恢复的多尺度Retinex (MSRCR) // - 光照不均匀校正 // - 阴影去除 -// 算法: Retinex理论 - 将图像分解为反射分量和光照分量 -// 作者: 李伟 wei.lw.li@hexagon.com +// 算法: Retinex理论 - 将图像分解为反射分量和光照分? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// Retinex多尺度阴影校正算子 +/// Retinex多尺度阴影校正算? /// public class RetinexProcessor : ImageProcessorBase { @@ -145,7 +145,7 @@ public class RetinexProcessor : ImageProcessorBase // 高斯模糊得到光照分量 Image blurred = new Image(inputImage.Size); - int kernelSize = (int)(sigma * 6) | 1; // 确保为奇数 + int kernelSize = (int)(sigma * 6) | 1; // 确保为奇? if (kernelSize < 3) kernelSize = 3; CvInvoke.GaussianBlur(floatImage, blurred, new System.Drawing.Size(kernelSize, kernelSize), sigma); @@ -162,7 +162,7 @@ public class RetinexProcessor : ImageProcessorBase // R = log(I) - log(I*G) Image retinex = logImage - logBlurred; - // 应用增益和偏移 + // 应用增益和偏? retinex = retinex * gain + offset; // 归一化到0-255 @@ -183,7 +183,7 @@ public class RetinexProcessor : ImageProcessorBase /// private Image MultiScaleRetinex(Image inputImage, double[] sigmas, double gain, int offset) { - // 转换为浮点图像 + // 转换为浮点图? Image floatImage = inputImage.Convert(); floatImage = floatImage + 1.0f; @@ -197,7 +197,7 @@ public class RetinexProcessor : ImageProcessorBase } } - // 累加多个尺度的结果 + // 累加多个尺度的结? Image msrResult = new Image(inputImage.Size); msrResult.SetZero(); @@ -229,10 +229,10 @@ public class RetinexProcessor : ImageProcessorBase // 平均 msrResult = msrResult / sigmas.Length; - // 应用增益和偏移 + // 应用增益和偏? msrResult = msrResult * gain + offset; - // 归一化 + // 归一? Image result = NormalizeToByteImage(msrResult); floatImage.Dispose(); @@ -244,14 +244,14 @@ public class RetinexProcessor : ImageProcessorBase /// /// 带色彩恢复的多尺度Retinex (MSRCR) - /// 对于灰度图像,使用简化版本 + /// 对于灰度图像,使用简化版? /// private Image MultiScaleRetinexCR(Image inputImage, double[] sigmas, double gain, int offset) { // 先执行MSR Image msrResult = MultiScaleRetinex(inputImage, sigmas, gain, offset); - // 对于灰度图像,色彩恢复简化为对比度增强 + // 对于灰度图像,色彩恢复简化为对比度增? Image floatMsr = msrResult.Convert(); Image floatInput = inputImage.Convert(); @@ -285,7 +285,7 @@ public class RetinexProcessor : ImageProcessorBase /// private Image NormalizeToByteImage(Image floatImage) { - // 找到最小值和最大值 + // 找到最小值和最大? double minVal = double.MaxValue; double maxVal = double.MinValue; diff --git a/ImageProcessing.Processors/图像增强/SharpenProcessor.cs b/XP.ImageProcessing.Processors/图像增强/SharpenProcessor.cs similarity index 92% rename from ImageProcessing.Processors/图像增强/SharpenProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/SharpenProcessor.cs index f46b24c..911474e 100644 --- a/ImageProcessing.Processors/图像增强/SharpenProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/SharpenProcessor.cs @@ -1,23 +1,23 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: SharpenProcessor.cs +// 文件? SharpenProcessor.cs // 描述: 锐化算子,用于增强图像边缘和细节 // 功能: // - 拉普拉斯锐化 -// - 非锐化掩蔽(Unsharp Masking) -// - 可调节锐化强度 -// - 支持多种锐化核 +// - 非锐化掩蔽(Unsharp Masking? +// - 可调节锐化强? +// - 支持多种锐化? // 算法: 拉普拉斯算子、非锐化掩蔽 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 锐化算子 @@ -94,7 +94,7 @@ public class SharpenProcessor : ImageProcessorBase var laplacian = new Image(inputImage.Size); CvInvoke.Laplacian(inputImage, laplacian, DepthType.Cv32F, 1); - // 转换为字节类型 + // 转换为字节类? var laplacianByte = laplacian.Convert(); // 将拉普拉斯结果加到原图上进行锐化 @@ -124,10 +124,10 @@ public class SharpenProcessor : ImageProcessorBase var floatBlurred = blurred.Convert(); var detail = floatInput - floatBlurred; - // 将细节加回原图 + // 将细节加回原? var sharpened = floatInput + detail * strength; - // 转换回字节类型 + // 转换回字节类? var result = sharpened.Convert(); blurred.Dispose(); diff --git a/ImageProcessing.Processors/图像增强/SubPixelZoomProcessor.cs b/XP.ImageProcessing.Processors/图像增强/SubPixelZoomProcessor.cs similarity index 92% rename from ImageProcessing.Processors/图像增强/SubPixelZoomProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/SubPixelZoomProcessor.cs index b9a0ce5..6eb2140 100644 --- a/ImageProcessing.Processors/图像增强/SubPixelZoomProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/SubPixelZoomProcessor.cs @@ -1,27 +1,27 @@ // ============================================================================ // Copyright © 2016-2025 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: SubPixelZoomProcessor.cs +// 文件? SubPixelZoomProcessor.cs // 描述: 亚像素放大算子,通过高质量插值实现图像的亚像素级放大 // 功能: -// - 支持任意倍率放大(含小数倍率如 1.5x、2.3x) -// - 多种插值方法(最近邻、双线性、双三次、Lanczos) +// - 支持任意倍率放大(含小数倍率?1.5x?.3x? +// - 多种插值方法(最近邻、双线性、双三次、Lanczos? // - 可选锐化补偿(抵消插值模糊) -// - 可选指定输出尺寸 -// 算法: 基于 OpenCV Resize 的高质量插值放大 -// 作者: 李伟 wei.lw.li@hexagon.com +// - 可选指定输出尺? +// 算法: 基于 OpenCV Resize 的高质量插值放? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 亚像素放大算子 +/// 亚像素放大算? /// public class SubPixelZoomProcessor : ImageProcessorBase { @@ -104,7 +104,7 @@ public class SubPixelZoomProcessor : ImageProcessorBase if (sharpenAfter) { // Unsharp Masking: result = result + strength * (result - blur) - int ksize = Math.Max(3, (int)(scaleFactor * 2) | 1); // 奇数核 + int ksize = Math.Max(3, (int)(scaleFactor * 2) | 1); // 奇数? using var blurred = result.SmoothGaussian(ksize); for (int y = 0; y < newHeight; y++) @@ -124,4 +124,4 @@ public class SubPixelZoomProcessor : ImageProcessorBase return result; } -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/图像增强/SuperResolutionProcessor.cs b/XP.ImageProcessing.Processors/图像增强/SuperResolutionProcessor.cs similarity index 91% rename from ImageProcessing.Processors/图像增强/SuperResolutionProcessor.cs rename to XP.ImageProcessing.Processors/图像增强/SuperResolutionProcessor.cs index dc57cc2..cb5c135 100644 --- a/ImageProcessing.Processors/图像增强/SuperResolutionProcessor.cs +++ b/XP.ImageProcessing.Processors/图像增强/SuperResolutionProcessor.cs @@ -1,27 +1,26 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: SuperResolutionProcessor.cs -// 描述: 基于深度学习的超分辨率算子 +// 文件? SuperResolutionProcessor.cs +// 描述: 基于深度学习的超分辨率算? // 功能: -// - 支持 EDSR 和 FSRCNN 超分辨率模型(ONNX 格式) -// - 支持 2x、3x、4x 放大倍率 +// - 支持 EDSR ?FSRCNN 超分辨率模型(ONNX 格式? +// - 支持 2x?x?x 放大倍率 // - 灰度图像自动转换为三通道输入,推理后转回灰度 // - 模型文件自动搜索,支持自定义路径 // - 使用 Microsoft.ML.OnnxRuntime 进行推理 // 算法: EDSR (Enhanced Deep Residual SR) / FSRCNN (Fast SR CNN) -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using Serilog; -using System.IO; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 基于深度学习的超分辨率算子(EDSR / FSRCNN),使用 ONNX Runtime 推理 @@ -30,8 +29,9 @@ public class SuperResolutionProcessor : ImageProcessorBase { private static readonly ILogger _logger = Log.ForContext(); - // 会话缓存,避免重复加载 + // 会话缓存,避免重复加? private static InferenceSession? _cachedSession; + private static string _cachedModelKey = string.Empty; public SuperResolutionProcessor() @@ -76,17 +76,17 @@ public class SuperResolutionProcessor : ImageProcessorBase { _logger.Error("Model file not found: {Model}_x{Scale}.onnx", model, scale); throw new FileNotFoundException( - $"超分辨率模型文件未找到: {model}_x{scale}.onnx\n" + + $"超分辨率模型文件未找? {model}_x{scale}.onnx\n" + $"请将模型文件放置到以下任一目录:\n" + $" 1. 程序目录/Models/\n" + $" 2. 程序目录/\n" + - $"模型需要 ONNX 格式。\n" + - $"可使用 tf2onnx 从 .pb 转换:\n" + + $"模型需?ONNX 格式。\n" + + $"可使?tf2onnx ?.pb 转换:\n" + $" pip install tf2onnx\n" + $" python -m tf2onnx.convert --input {model}_x{scale}.pb --output {model}_x{scale}.onnx --inputs input:0 --outputs output:0"); } - // 加载或复用会话 + // 加载或复用会? string modelKey = $"{model}_{scale}"; InferenceSession session; if (_cachedModelKey == modelKey && _cachedSession != null) @@ -111,7 +111,7 @@ public class SuperResolutionProcessor : ImageProcessorBase session = new InferenceSession(modelPath, options); _cachedSession = session; _cachedModelKey = modelKey; - // 记录实际使用的 Execution Provider + // 记录实际使用?Execution Provider var providers = session.ModelMetadata?.CustomMetadataMap; _logger.Information("Loaded ONNX model: {ModelPath}, Providers: {Providers}", modelPath, string.Join(", ", session.GetType().Name)); @@ -134,7 +134,7 @@ public class SuperResolutionProcessor : ImageProcessorBase } /// - /// 单次推理(小图或 FSRCNN) + /// 单次推理(小图或 FSRCNN? /// private Image ProcessSingle(InferenceSession session, Image inputImage, int scale) { @@ -145,8 +145,8 @@ public class SuperResolutionProcessor : ImageProcessorBase string inputName = session.InputMetadata.Keys.First(); var inputMeta = session.InputMetadata[inputName]; int[] dims = inputMeta.Dimensions; - // dims 格式: [1, H, W, C] (NHWC),C 可能是 1 或 3 - int inputChannels = dims[^1]; // 最后一维是通道数 + // dims 格式: [1, H, W, C] (NHWC),C 可能?1 ?3 + int inputChannels = dims[^1]; // 最后一维是通道? // 构建输入 tensor: [1, H, W, C] (NHWC) // 使用底层数组 + Parallel.For 避免逐元素索引开销 @@ -178,7 +178,7 @@ public class SuperResolutionProcessor : ImageProcessorBase for (int x = 0; x < w; x++) { int px = rowOffset + x * 3; - buf[px] = imgData[y, x, 0]; + buf[px] = imgData[y, x, 0]; buf[px + 1] = imgData[y, x, 1]; buf[px + 2] = imgData[y, x, 2]; } @@ -195,13 +195,13 @@ public class SuperResolutionProcessor : ImageProcessorBase using var results = session.Run(inputs); var outputTensor = results.First().AsTensor(); - // 输出 shape: [1, C, H*scale, W*scale] (NCHW,模型输出经过 Transpose) + // 输出 shape: [1, C, H*scale, W*scale] (NCHW,模型输出经?Transpose) var shape = outputTensor.Dimensions; int outC = shape[1]; int outH = shape[2]; int outW = shape[3]; - // 转换为灰度图像 + // 转换为灰度图? // 使用 Parallel.For + 直接内存操作 Image result; if (outC == 1) @@ -217,7 +217,7 @@ public class SuperResolutionProcessor : ImageProcessorBase } else { - // EDSR: 三通道输出 [1, 3, outH, outW] → 灰度 + // EDSR: 三通道输出 [1, 3, outH, outW] ?灰度 // 直接计算灰度值,跳过中间 BGR 图像分配 result = new Image(outW, outH); var outData = result.Data; @@ -241,13 +241,13 @@ public class SuperResolutionProcessor : ImageProcessorBase } /// - /// 分块推理(大图 EDSR),将图像切成小块分别推理后拼接 + /// 分块推理(大?EDSR),将图像切成小块分别推理后拼接 /// private Image ProcessTiled(InferenceSession session, Image inputImage, int scale, int tileSize) { int h = inputImage.Height; int w = inputImage.Width; - int overlap = 8; // 重叠像素,减少拼接边缘伪影 + int overlap = 8; // 重叠像素,减少拼接边缘伪? var result = new Image(w * scale, h * scale); @@ -290,7 +290,7 @@ public class SuperResolutionProcessor : ImageProcessorBase } /// - /// 查找模型文件,按优先级搜索多个目录(.onnx 格式) + /// 查找模型文件,按优先级搜索多个目录(.onnx 格式? /// private static string FindModelFile(string model, int scale) { diff --git a/ImageProcessing.Processors/形态学处理/MorphologyProcessor.cs b/XP.ImageProcessing.Processors/形态学处理/MorphologyProcessor.cs similarity index 96% rename from ImageProcessing.Processors/形态学处理/MorphologyProcessor.cs rename to XP.ImageProcessing.Processors/形态学处理/MorphologyProcessor.cs index 5a9942a..a158a7e 100644 --- a/ImageProcessing.Processors/形态学处理/MorphologyProcessor.cs +++ b/XP.ImageProcessing.Processors/形态学处理/MorphologyProcessor.cs @@ -1,6 +1,6 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: MorphologyProcessor.cs +// 文件? MorphologyProcessor.cs // 描述: 形态学处理算子,用于二值图像的形态学操作 // 功能: // - 腐蚀(Erode):收缩目标区域 @@ -8,17 +8,17 @@ // - 开运算(Open):先腐蚀后膨胀,去除小目标 // - 闭运算(Close):先膨胀后腐蚀,填充小孔洞 // 算法: 数学形态学运算 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 形态学处理算子 diff --git a/ImageProcessing.Processors/数学运算/DifferenceProcessor.cs b/XP.ImageProcessing.Processors/数学运算/DifferenceProcessor.cs similarity index 91% rename from ImageProcessing.Processors/数学运算/DifferenceProcessor.cs rename to XP.ImageProcessing.Processors/数学运算/DifferenceProcessor.cs index 93c6b54..d639401 100644 --- a/ImageProcessing.Processors/数学运算/DifferenceProcessor.cs +++ b/XP.ImageProcessing.Processors/数学运算/DifferenceProcessor.cs @@ -1,23 +1,23 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: DifferenceProcessor.cs -// 描述: 差分运算算子,用于边缘检测和变化检测 +// 文件? DifferenceProcessor.cs +// 描述: 差分运算算子,用于边缘检测和变化检? // 功能: -// - 对图像进行差分运算 -// - 支持水平、垂直和对角线差分 -// - 可用于边缘检测 -// - 可选归一化输出 -// 算法: 像素级差分运算 -// 作者: 李伟 wei.lw.li@hexagon.com +// - 对图像进行差分运? +// - 支持水平、垂直和对角线差? +// - 可用于边缘检? +// - 可选归一化输? +// 算法: 像素级差分运? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 差分运算算子 @@ -96,7 +96,7 @@ public class DifferenceProcessor : ImageProcessorBase } else // Both { - // 梯度幅值: sqrt((dx)^2 + (dy)^2) + // 梯度幅? sqrt((dx)^2 + (dy)^2) for (int y = 0; y < height - 1; y++) { for (int x = 0; x < width - 1; x++) diff --git a/ImageProcessing.Processors/数学运算/DivisionProcessor.cs b/XP.ImageProcessing.Processors/数学运算/DivisionProcessor.cs similarity index 89% rename from ImageProcessing.Processors/数学运算/DivisionProcessor.cs rename to XP.ImageProcessing.Processors/数学运算/DivisionProcessor.cs index 2414c06..d2c8588 100644 --- a/ImageProcessing.Processors/数学运算/DivisionProcessor.cs +++ b/XP.ImageProcessing.Processors/数学运算/DivisionProcessor.cs @@ -1,23 +1,23 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: DivisionProcessor.cs -// 描述: 除法运算算子,用于图像归一化处理 +// 文件? DivisionProcessor.cs +// 描述: 除法运算算子,用于图像归一化处? // 功能: -// - 对图像像素值进行除法运算 +// - 对图像像素值进行除法运? // - 支持缩放因子调整 // - 可选归一化到0-255范围 -// - 常用于背景校正和图像归一化 -// 算法: 像素级除法运算 -// 作者: 李伟 wei.lw.li@hexagon.com +// - 常用于背景校正和图像归一? +// 算法: 像素级除法运? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 除法运算算子 diff --git a/ImageProcessing.Processors/数学运算/IntegralProcessor.cs b/XP.ImageProcessing.Processors/数学运算/IntegralProcessor.cs similarity index 89% rename from ImageProcessing.Processors/数学运算/IntegralProcessor.cs rename to XP.ImageProcessing.Processors/数学运算/IntegralProcessor.cs index 1cf7996..162013f 100644 --- a/ImageProcessing.Processors/数学运算/IntegralProcessor.cs +++ b/XP.ImageProcessing.Processors/数学运算/IntegralProcessor.cs @@ -1,22 +1,22 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: IntegralProcessor.cs -// 描述: 积分运算算子,计算积分图像 +// 文件? IntegralProcessor.cs +// 描述: 积分运算算子,计算积分图? // 功能: -// - 计算积分图像(累加和) -// - 用于快速区域求和 -// - 支持归一化输出 +// - 计算积分图像(累加和? +// - 用于快速区域求? +// - 支持归一化输? // 算法: 积分图像算法 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 积分运算算子 diff --git a/ImageProcessing.Processors/数学运算/MultiplicationProcessor.cs b/XP.ImageProcessing.Processors/数学运算/MultiplicationProcessor.cs similarity index 88% rename from ImageProcessing.Processors/数学运算/MultiplicationProcessor.cs rename to XP.ImageProcessing.Processors/数学运算/MultiplicationProcessor.cs index 46d758e..42bb537 100644 --- a/ImageProcessing.Processors/数学运算/MultiplicationProcessor.cs +++ b/XP.ImageProcessing.Processors/数学运算/MultiplicationProcessor.cs @@ -1,23 +1,23 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: MultiplicationProcessor.cs -// 描述: 乘法运算算子,用于图像增强 +// 文件? MultiplicationProcessor.cs +// 描述: 乘法运算算子,用于图像增? // 功能: -// - 对图像像素值进行乘法运算 +// - 对图像像素值进行乘法运? // - 支持增益调整 -// - 可选归一化输出 -// - 常用于图像增强和对比度调整 -// 算法: 像素级乘法运算 -// 作者: 李伟 wei.lw.li@hexagon.com +// - 可选归一化输? +// - 常用于图像增强和对比度调? +// 算法: 像素级乘法运? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 乘法运算算子 diff --git a/ImageProcessing.Processors/数学运算/OrProcessor.cs b/XP.ImageProcessing.Processors/数学运算/OrProcessor.cs similarity index 91% rename from ImageProcessing.Processors/数学运算/OrProcessor.cs rename to XP.ImageProcessing.Processors/数学运算/OrProcessor.cs index 60e1a1d..c130750 100644 --- a/ImageProcessing.Processors/数学运算/OrProcessor.cs +++ b/XP.ImageProcessing.Processors/数学运算/OrProcessor.cs @@ -1,24 +1,24 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: OrProcessor.cs +// 文件? OrProcessor.cs // 描述: 或运算算子,用于图像逻辑运算 // 功能: // - 对图像进行按位或运算 // - 支持与固定值或运算 // - 可用于图像合并和掩码操作 // 算法: 像素级按位或运算 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 或运算算子 +/// 或运算算? /// public class OrProcessor : ImageProcessorBase { diff --git a/ImageProcessing.Processors/检测分析/AngleMeasurementProcessor.cs b/XP.ImageProcessing.Processors/检测分析/AngleMeasurementProcessor.cs similarity index 88% rename from ImageProcessing.Processors/检测分析/AngleMeasurementProcessor.cs rename to XP.ImageProcessing.Processors/检测分析/AngleMeasurementProcessor.cs index b3b4f43..6e5020d 100644 --- a/ImageProcessing.Processors/检测分析/AngleMeasurementProcessor.cs +++ b/XP.ImageProcessing.Processors/检测分析/AngleMeasurementProcessor.cs @@ -1,19 +1,19 @@ // ============================================================================ -// 文件名: AngleMeasurementProcessor.cs -// 描述: 角度测量算子 — 共端点的两条直线夹角 +// 文件? AngleMeasurementProcessor.cs +// 描述: 角度测量算子 ?共端点的两条直线夹角 // 功能: -// - 用户定义三个点:端点(顶点)、射线1终点、射线2终点 -// - 计算两条射线之间的夹角(0°~180°) +// - 用户定义三个点:端点(顶点)、射?终点、射?终点 +// - 计算两条射线之间的夹角(0°~180°? // - 在图像上绘制两条射线、角度弧线和标注 // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; public class AngleMeasurementProcessor : ImageProcessorBase { @@ -27,7 +27,7 @@ public class AngleMeasurementProcessor : ImageProcessorBase protected override void InitializeParameters() { - // 三个点坐标(由交互控件注入,使用 double 避免取整误差) + // 三个点坐标(由交互控件注入,使用 double 避免取整误差? Parameters.Add("VX", new ProcessorParameter("VX", "VX", typeof(double), 250.0, null, null, "") { IsVisible = false }); Parameters.Add("VY", new ProcessorParameter("VY", "VY", typeof(double), 250.0, null, null, "") { IsVisible = false }); Parameters.Add("AX", new ProcessorParameter("AX", "AX", typeof(double), 100.0, null, null, "") { IsVisible = false }); @@ -44,7 +44,7 @@ public class AngleMeasurementProcessor : ImageProcessorBase OutputData.Clear(); - // 向量 VA 和 VB + // 向量 VA ?VB double vax = ax - vx, vay = ay - vy; double vbx = bx - vx, vby = by - vy; @@ -59,11 +59,11 @@ public class AngleMeasurementProcessor : ImageProcessorBase angleDeg = Math.Acos(cosAngle) * 180.0 / Math.PI; } - // 计算角度弧的起始角和扫过角(用于绘制弧线) + // 计算角度弧的起始角和扫过角(用于绘制弧线? double angleA = Math.Atan2(vay, vax) * 180.0 / Math.PI; double angleB = Math.Atan2(vby, vbx) * 180.0 / Math.PI; - // 确保从 angleA 到 angleB 的扫过方向是较小的夹角 + // 确保?angleA ?angleB 的扫过方向是较小的夹? double sweep = angleB - angleA; if (sweep > 180) sweep -= 360; if (sweep < -180) sweep += 360; @@ -84,4 +84,4 @@ public class AngleMeasurementProcessor : ImageProcessorBase return inputImage.Clone(); } -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/检测分析/BgaVoidRateProcessor.cs b/XP.ImageProcessing.Processors/检测分析/BgaVoidRateProcessor.cs similarity index 91% rename from ImageProcessing.Processors/检测分析/BgaVoidRateProcessor.cs rename to XP.ImageProcessing.Processors/检测分析/BgaVoidRateProcessor.cs index d99ffdc..44b9902 100644 --- a/ImageProcessing.Processors/检测分析/BgaVoidRateProcessor.cs +++ b/XP.ImageProcessing.Processors/检测分析/BgaVoidRateProcessor.cs @@ -1,27 +1,27 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: BgaVoidRateProcessor.cs -// 描述: BGA 空洞率检测算子(两步自动检测法) +// 文件? BgaVoidRateProcessor.cs +// 描述: BGA 空洞率检测算子(两步自动检测法? // // 处理流程: -// 第一步 — 焊球定位: 高斯模糊 → Otsu反向二值化 → 闭运算 → 轮廓检测 → 圆度过滤 → 椭圆拟合 -// 第二步 — 气泡检测: 焊球轮廓掩码 → 双阈值分割 → 轮廓检测 → 面积过滤 → 气泡率计算 +// 第一??焊球定位: 高斯模糊 ?Otsu反向二值化 ?闭运??轮廓检??圆度过滤 ?椭圆拟合 +// 第二??气泡检? 焊球轮廓掩码 ?双阈值分??轮廓检??面积过滤 ?气泡率计? // // 支持多边形ROI限定检测区域,支持IPC-7095标准PASS/FAIL判定 -// 正片模式:焊球=暗区域,气泡=亮区域 +// 正片模式:焊?暗区域,气泡=亮区? // -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.Util; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; public class BgaVoidRateProcessor : ImageProcessorBase { @@ -43,7 +43,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase LocalizationHelper.GetString("BgaVoidRateProcessor_RoiMode_Desc"), new string[] { "None", "Polygon" })); - // 多边形ROI点数和坐标(由UI注入,不可见,最多支持32个点) + // 多边形ROI点数和坐标(由UI注入,不可见,最多支?2个点? Parameters.Add("PolyCount", new ProcessorParameter("PolyCount", "PolyCount", typeof(int), 0, null, null, "") { IsVisible = false }); for (int i = 0; i < 32; i++) { @@ -76,7 +76,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase typeof(double), 0.5, 0.0, 1.0, LocalizationHelper.GetString("BgaVoidRateProcessor_BgaCircularity_Desc"))); - // ── 第二步:气泡检测参数 ── + // ── 第二步:气泡检测参?── Parameters.Add("MinThreshold", new ProcessorParameter( "MinThreshold", LocalizationHelper.GetString("BgaVoidRateProcessor_MinThreshold"), @@ -148,7 +148,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase OutputData["RoiMode"] = roiMode; OutputData["RoiMask"] = roiMask; - _logger.Debug("BgaVoidRate 两步法: BgaArea=[{Min},{Max}], Blur={Blur}, Circ={Circ}, Thresh=[{TMin},{TMax}]", + _logger.Debug("BgaVoidRate 两步? BgaArea=[{Min},{Max}], Blur={Blur}, Circ={Circ}, Thresh=[{TMin},{TMax}]", bgaMinArea, bgaMaxArea, bgaBlurSize, bgaCircularity, minThresh, maxThresh); // ================================================================ @@ -156,7 +156,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase // ================================================================ var bgaResults = DetectBgaBalls(inputImage, bgaBlurSize, bgaMinArea, bgaMaxArea, bgaCircularity, roiMask); - _logger.Information("第一步完成: 检测到 {Count} 个BGA焊球", bgaResults.Count); + _logger.Information("第一步完? 检测到 {Count} 个BGA焊球", bgaResults.Count); if (bgaResults.Count == 0) { @@ -176,7 +176,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase } // ================================================================ - // 第二步:在每个焊球区域内检测气泡 + // 第二步:在每个焊球区域内检测气? // ================================================================ int totalBgaArea = 0; int totalVoidArea = 0; @@ -193,13 +193,13 @@ public class BgaVoidRateProcessor : ImageProcessorBase double overallVoidRate = totalBgaArea > 0 ? (double)totalVoidArea / totalBgaArea * 100.0 : 0; string classification = overallVoidRate <= voidLimit ? "PASS" : "FAIL"; - // 检查每个焊球是否单独超标 + // 检查每个焊球是否单独超? foreach (var bga in bgaResults) { bga.Classification = bga.VoidRate <= voidLimit ? "PASS" : "FAIL"; } - _logger.Information("第二步完成: 总气泡率={VoidRate:F1}%, 气泡数={Count}, 判定={Class}", + _logger.Information("第二步完? 总气泡率={VoidRate:F1}%, 气泡?{Count}, 判定={Class}", overallVoidRate, totalVoidCount, classification); // 输出数据 @@ -222,7 +222,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase /// /// 第一步:自动检测BGA焊球位置 - /// 使用Otsu二值化 + 轮廓检测 + 圆度过滤 + 椭圆拟合 + /// 使用Otsu二值化 + 轮廓检?+ 圆度过滤 + 椭圆拟合 /// private List DetectBgaBalls(Image input, int blurSize, int minArea, int maxArea, double minCircularity, Image? roiMask) { @@ -233,7 +233,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase var blurred = new Image(w, h); CvInvoke.GaussianBlur(input, blurred, new Size(blurSize, blurSize), 0); - // Otsu自动二值化(X-Ray正片:焊球=暗区域) + // Otsu自动二值化(X-Ray正片:焊?暗区域) var binary = new Image(w, h); CvInvoke.Threshold(blurred, binary, 0, 255, ThresholdType.Otsu | ThresholdType.BinaryInv); @@ -264,7 +264,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase double circularity = 4.0 * Math.PI * area / (perimeter * perimeter); if (circularity < minCircularity) continue; - // 需要至少5个点才能拟合椭圆 + // 需要至?个点才能拟合椭圆 if (contours[i].Size < 5) continue; var ellipse = CvInvoke.FitEllipse(contours[i]); @@ -284,7 +284,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase }); } - // 按面积从大到小排序 + // 按面积从大到小排? results.Sort((a, b) => b.BgaArea.CompareTo(a.BgaArea)); for (int i = 0; i < results.Count; i++) results[i].Index = i + 1; @@ -296,8 +296,8 @@ public class BgaVoidRateProcessor : ImageProcessorBase } /// - /// 第二步:在单个BGA焊球区域内检测气泡 - /// 使用焊球轮廓作为掩码,双阈值分割气泡区域 + /// 第二步:在单个BGA焊球区域内检测气? + /// 使用焊球轮廓作为掩码,双阈值分割气泡区? /// private void DetectVoidsInBga(Image input, BgaBallInfo bga, int minThresh, int maxThresh, int minVoidArea) { @@ -314,7 +314,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase int bgaPixels = CvInvoke.CountNonZero(mask); bga.BgaArea = bgaPixels; - // 双阈值分割(正片模式:气泡=亮,灰度在[minThresh, maxThresh]范围内判为气泡) + // 双阈值分割(正片模式:气?亮,灰度在[minThresh, maxThresh]范围内判为气泡) var voidImg = new Image(w, h); byte[,,] srcData = input.Data; byte[,,] dstData = voidImg.Data; @@ -361,7 +361,7 @@ public class BgaVoidRateProcessor : ImageProcessorBase }); } - // 按面积从大到小排序 + // 按面积从大到小排? bga.Voids.Sort((a, b) => b.Area.CompareTo(a.Area)); for (int i = 0; i < bga.Voids.Count; i++) bga.Voids[i].Index = i + 1; @@ -400,4 +400,4 @@ public class VoidInfo public double AreaPercent { get; set; } public Rectangle BoundingBox { get; set; } public Point[] ContourPoints { get; set; } = Array.Empty(); -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/检测分析/ContourDetectionProcessor.cs b/XP.ImageProcessing.Processors/检测分析/ContourDetectionProcessor.cs similarity index 94% rename from ImageProcessing.Processors/检测分析/ContourDetectionProcessor.cs rename to XP.ImageProcessing.Processors/检测分析/ContourDetectionProcessor.cs index 1d3ddcf..c5ada86 100644 --- a/ImageProcessing.Processors/检测分析/ContourDetectionProcessor.cs +++ b/XP.ImageProcessing.Processors/检测分析/ContourDetectionProcessor.cs @@ -1,25 +1,25 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: ContourProcessor.cs +// 文件? ContourProcessor.cs // 描述: 轮廓查找算子,用于检测和分析图像中的轮廓 // 功能: -// - 检测图像中的外部轮廓 +// - 检测图像中的外部轮? // - 根据面积范围过滤轮廓 -// - 计算轮廓的几何特征(面积、周长、中心、外接矩形等) -// - 输出轮廓信息供后续处理使用 -// 算法: 基于OpenCV的轮廓检测算法 -// 作者: 李伟 wei.lw.li@hexagon.com +// - 计算轮廓的几何特征(面积、周长、中心、外接矩形等? +// - 输出轮廓信息供后续处理使? +// 算法: 基于OpenCV的轮廓检测算? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.Util; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 轮廓查找算子 @@ -117,7 +117,7 @@ public class ContourProcessor : ImageProcessorBase OutputData.Clear(); - // 创建输入图像的副本用于处理 + // 创建输入图像的副本用于处? Image processImage = inputImage.Clone(); // 步骤1:如果启用阈值分割,先进行二值化 @@ -128,18 +128,18 @@ public class ContourProcessor : ImageProcessorBase if (useOtsu) { - // 使用Otsu自动阈值 + // 使用Otsu自动阈? CvInvoke.Threshold(processImage, thresholdImage, 0, 255, ThresholdType.Otsu); _logger.Debug("Applied Otsu threshold"); } else { - // 使用固定阈值 + // 使用固定阈? CvInvoke.Threshold(processImage, thresholdImage, thresholdValue, 255, ThresholdType.Binary); _logger.Debug("Applied binary threshold with value {ThresholdValue}", thresholdValue); } - // 保存阈值处理后的图像用于调试 + // 保存阈值处理后的图像用于调? try { string debugPath = Path.Combine("logs", $"contour_threshold_{DateTime.Now:yyyyMMdd_HHmmss}.png"); @@ -156,7 +156,7 @@ public class ContourProcessor : ImageProcessorBase processImage = thresholdImage; } - // 步骤2:如果目标是黑色区域,需要反转图像 + // 步骤2:如果目标是黑色区域,需要反转图? bool isBlackTarget = targetColor != null && (targetColor.Equals("Black", StringComparison.OrdinalIgnoreCase) || targetColor.Equals("黑色", StringComparison.OrdinalIgnoreCase)); @@ -180,7 +180,7 @@ public class ContourProcessor : ImageProcessorBase } } - // 步骤3:查找轮廓 + // 步骤3:查找轮? using (VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint()) { Mat hierarchy = new Mat(); diff --git a/ImageProcessing.Processors/检测分析/EllipseDetectionProcessor.cs b/XP.ImageProcessing.Processors/检测分析/EllipseDetectionProcessor.cs similarity index 94% rename from ImageProcessing.Processors/检测分析/EllipseDetectionProcessor.cs rename to XP.ImageProcessing.Processors/检测分析/EllipseDetectionProcessor.cs index 012ed26..1e29ade 100644 --- a/ImageProcessing.Processors/检测分析/EllipseDetectionProcessor.cs +++ b/XP.ImageProcessing.Processors/检测分析/EllipseDetectionProcessor.cs @@ -1,53 +1,64 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: EllipseDetectionProcessor.cs -// 描述: 椭圆检测算子,基于轮廓分析和椭圆拟合检测图像中的椭圆 +// 文件? EllipseDetectionProcessor.cs +// 描述: 椭圆检测算子,基于轮廓分析和椭圆拟合检测图像中的椭? // 功能: -// - 阈值分割 + 轮廓提取 -// - 椭圆拟合(FitEllipse) -// - 面积/轴长/离心率/拟合误差多维过滤 -// - 支持双阈值分割和 Otsu 自动阈值 -// 算法: 阈值分割 + OpenCV FitEllipse -// 作者: 李伟 wei.lw.li@hexagon.com +// - 阈值分?+ 轮廓提取 +// - 椭圆拟合(FitEllipse? +// - 面积/轴长/离心?拟合误差多维过滤 +// - 支持双阈值分割和 Otsu 自动阈? +// 算法: 阈值分?+ OpenCV FitEllipse +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.Util; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 椭圆检测结果 +/// 椭圆检测结? /// public class EllipseInfo { /// 序号 public int Index { get; set; } + /// 中心点X public float CenterX { get; set; } + /// 中心点Y public float CenterY { get; set; } + /// 长轴长度 public float MajorAxis { get; set; } + /// 短轴长度 public float MinorAxis { get; set; } - /// 旋转角度(度) + + /// 旋转角度(度?/summary> public float Angle { get; set; } + /// 面积 public double Area { get; set; } + /// 周长 public double Perimeter { get; set; } - /// 离心率 (0=圆, 接近1=扁椭圆) + + /// 离心?(0=? 接近1=扁椭? public double Eccentricity { get; set; } + /// 拟合误差(像素) public double FitError { get; set; } + /// 轮廓点集 public Point[] ContourPoints { get; set; } = Array.Empty(); + /// 外接矩形 public Rectangle BoundingBox { get; set; } } @@ -70,7 +81,7 @@ public class EllipseDetector public double MaxFitError { get; set; } = 5.0; public int Thickness { get; set; } = 2; - /// 执行椭圆检测 + /// 执行椭圆检?/summary> public List Detect(Image inputImage, Image? roiMask = null) { _logger.Debug("Ellipse detection started: UseOtsu={UseOtsu}, MinThreshold={Min}, MaxThreshold={Max}", @@ -186,7 +197,7 @@ public class EllipseDetector } /// -/// 椭圆检测算子 +/// 椭圆检测算? /// public class EllipseDetectionProcessor : ImageProcessorBase { @@ -200,7 +211,7 @@ public class EllipseDetectionProcessor : ImageProcessorBase protected override void InitializeParameters() { - // ── 多边形ROI(由UI注入,最多32个点) ── + // ── 多边形ROI(由UI注入,最?2个点?── Parameters.Add("PolyCount", new ProcessorParameter("PolyCount", "PolyCount", typeof(int), 0, null, null, "") { IsVisible = false }); for (int i = 0; i < 32; i++) { @@ -300,4 +311,4 @@ public class EllipseDetectionProcessor : ImageProcessorBase _logger.Information("Ellipse detection completed: detected {Count} ellipses", ellipses.Count); return inputImage.Clone(); } -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/检测分析/FillRateProcessor.cs b/XP.ImageProcessing.Processors/检测分析/FillRateProcessor.cs similarity index 87% rename from ImageProcessing.Processors/检测分析/FillRateProcessor.cs rename to XP.ImageProcessing.Processors/检测分析/FillRateProcessor.cs index 82deeb2..b504ed9 100644 --- a/ImageProcessing.Processors/检测分析/FillRateProcessor.cs +++ b/XP.ImageProcessing.Processors/检测分析/FillRateProcessor.cs @@ -1,28 +1,28 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: FillRateProcessor.cs +// 文件? FillRateProcessor.cs // 描述: 通孔填锡率测量算子(倾斜投影几何法),基于四椭圆ROI // 功能: -// - 样品倾斜约45°放置,利用投影位移关系计算填锡率 -// - 四个椭圆定义: +// - 样品倾斜?5°放置,利用投影位移关系计算填锡率 +// - 四个椭圆定义? // E1 = 通孔底部轮廓 // E2 = 通孔顶部轮廓 -// E3 = 填锡起点(与E1重合,代表0%填锡) -// E4 = 填锡终点(锡实际填充到的高度) -// - 填锡率 = |E4中心 - E3中心| / |E2中心 - E1中心| × 100% -// - 纯几何方法,不依赖灰度分析 -// - IPC-610 THT 分级判定(Class 1/2/3) +// E3 = 填锡起点(与E1重合,代?%填锡? +// E4 = 填锡终点(锡实际填充到的高度? +// - 填锡?= |E4中心 - E3中心| / |E2中心 - E1中心| × 100% +// - 纯几何方法,不依赖灰度分? +// - IPC-610 THT 分级判定(Class 1/2/3? // 算法: 倾斜投影位移比例 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 通孔填锡率测量算子(倾斜投影几何法) @@ -42,7 +42,7 @@ public class FillRateProcessor : ImageProcessorBase // 四个椭圆(由交互控件注入,UI不可见) AddEllipseParams("E1", 200, 250, 60, 50, 0); // 底部 AddEllipseParams("E2", 220, 180, 60, 50, 0); // 顶部 - AddEllipseParams("E3", 200, 250, 60, 50, 0); // 填锡起点(=E1) + AddEllipseParams("E3", 200, 250, 60, 50, 0); // 填锡起点?E1? AddEllipseParams("E4", 210, 220, 55, 45, 0); // 填锡终点 Parameters.Add("THTLimit", new ProcessorParameter( @@ -78,7 +78,7 @@ public class FillRateProcessor : ImageProcessorBase int e3cx = GetParameter("E3_CX"), e3cy = GetParameter("E3_CY"); int e4cx = GetParameter("E4_CX"), e4cy = GetParameter("E4_CY"); - // 获取椭圆轴参数(用于绘制) + // 获取椭圆轴参数(用于绘制? double e1a = GetParameter("E1_A"), e1b = GetParameter("E1_B"), e1ang = GetParameter("E1_Angle"); double e2a = GetParameter("E2_A"), e2b = GetParameter("E2_B"), e2ang = GetParameter("E2_Angle"); double e3a = GetParameter("E3_A"), e3b = GetParameter("E3_B"), e3ang = GetParameter("E3_Angle"); @@ -89,17 +89,17 @@ public class FillRateProcessor : ImageProcessorBase OutputData.Clear(); - // 计算通孔全高度的投影位移(E1底部 → E2顶部) + // 计算通孔全高度的投影位移(E1底部 ?E2顶部? double fullDx = e2cx - e1cx; double fullDy = e2cy - e1cy; double fullDistance = Math.Sqrt(fullDx * fullDx + fullDy * fullDy); - // 计算填锡高度的投影位移(E3起点 → E4终点) + // 计算填锡高度的投影位移(E3起点 ?E4终点? double fillDx = e4cx - e3cx; double fillDy = e4cy - e3cy; double fillDistance = Math.Sqrt(fillDx * fillDx + fillDy * fillDy); - // 填锡率 = 填锡位移 / 全高度位移 + // 填锡?= 填锡位移 / 全高度位? double fillRate = fullDistance > 0 ? (fillDistance / fullDistance) * 100.0 : 0; fillRate = Math.Clamp(fillRate, 0, 100); @@ -130,4 +130,4 @@ public class FillRateProcessor : ImageProcessorBase return inputImage.Clone(); } -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/检测分析/LineMeasurementProcessor.cs b/XP.ImageProcessing.Processors/检测分析/LineMeasurementProcessor.cs similarity index 89% rename from ImageProcessing.Processors/检测分析/LineMeasurementProcessor.cs rename to XP.ImageProcessing.Processors/检测分析/LineMeasurementProcessor.cs index e681620..d8e2a66 100644 --- a/ImageProcessing.Processors/检测分析/LineMeasurementProcessor.cs +++ b/XP.ImageProcessing.Processors/检测分析/LineMeasurementProcessor.cs @@ -1,28 +1,27 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: LineMeasurementProcessor.cs -// 描述: 直线测量算子,用于测量图像中两点之间的距离 +// 文件? LineMeasurementProcessor.cs +// 描述: 直线测量算子,用于测量图像中两点之间的距? // 功能: -// - 用户指定两个点坐标(像素坐标) -// - 计算两点之间的欧氏距离(像素单位) -// - 支持像素尺寸标定,输出实际物理距离 +// - 用户指定两个点坐标(像素坐标? +// - 计算两点之间的欧氏距离(像素单位? +// - 支持像素尺寸标定,输出实际物理距? // - 在图像上绘制测量线和标注 -// - 输出测量结果供后续处理使用 +// - 输出测量结果供后续处理使? // 算法: 欧氏距离计算 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; -using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 直线测量算子 - 测量两点之间的距离 +/// 直线测量算子 - 测量两点之间的距? /// public class LineMeasurementProcessor : ImageProcessorBase { @@ -41,28 +40,28 @@ public class LineMeasurementProcessor : ImageProcessorBase LocalizationHelper.GetString("LineMeasurementProcessor_X1"), typeof(int), 100, null, null, LocalizationHelper.GetString("LineMeasurementProcessor_X1_Desc")) - { IsVisible = false }); + { IsVisible = false }); Parameters.Add("Y1", new ProcessorParameter( "Y1", LocalizationHelper.GetString("LineMeasurementProcessor_Y1"), typeof(int), 100, null, null, LocalizationHelper.GetString("LineMeasurementProcessor_Y1_Desc")) - { IsVisible = false }); + { IsVisible = false }); Parameters.Add("X2", new ProcessorParameter( "X2", LocalizationHelper.GetString("LineMeasurementProcessor_X2"), typeof(int), 400, null, null, LocalizationHelper.GetString("LineMeasurementProcessor_X2_Desc")) - { IsVisible = false }); + { IsVisible = false }); Parameters.Add("Y2", new ProcessorParameter( "Y2", LocalizationHelper.GetString("LineMeasurementProcessor_Y2"), typeof(int), 400, null, null, LocalizationHelper.GetString("LineMeasurementProcessor_Y2_Desc")) - { IsVisible = false }); + { IsVisible = false }); Parameters.Add("PixelSize", new ProcessorParameter( "PixelSize", @@ -120,7 +119,7 @@ public class LineMeasurementProcessor : ImageProcessorBase // 计算实际距离 double actualDistance = pixelDistance * pixelSize; - // 计算角度(相对于水平方向) + // 计算角度(相对于水平方向? double angleRad = Math.Atan2(dy, dx); double angleDeg = angleRad * 180.0 / Math.PI; @@ -147,4 +146,4 @@ public class LineMeasurementProcessor : ImageProcessorBase return inputImage.Clone(); } -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/检测分析/PointToLineProcessor.cs b/XP.ImageProcessing.Processors/检测分析/PointToLineProcessor.cs similarity index 93% rename from ImageProcessing.Processors/检测分析/PointToLineProcessor.cs rename to XP.ImageProcessing.Processors/检测分析/PointToLineProcessor.cs index 6dbd43a..124ebe9 100644 --- a/ImageProcessing.Processors/检测分析/PointToLineProcessor.cs +++ b/XP.ImageProcessing.Processors/检测分析/PointToLineProcessor.cs @@ -1,24 +1,23 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: PointToLineProcessor.cs +// 文件? PointToLineProcessor.cs // 描述: 点到直线距离测量算子 // 功能: // - 用户定义一条直线(两个端点)和一个测量点 -// - 计算测量点到直线的垂直距离 +// - 计算测量点到直线的垂直距? // - 支持像素尺寸标定输出物理距离 // - 在图像上绘制直线、测量点、垂足和距离标注 // 算法: 点到直线距离公式 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; -using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; public class PointToLineProcessor : ImageProcessorBase { @@ -32,7 +31,7 @@ public class PointToLineProcessor : ImageProcessorBase protected override void InitializeParameters() { - // 直线两端点 + 测量点(由交互控件注入) + // 直线两端?+ 测量点(由交互控件注入) Parameters.Add("L1X", new ProcessorParameter("L1X", "L1X", typeof(int), 100, null, null, "") { IsVisible = false }); Parameters.Add("L1Y", new ProcessorParameter("L1Y", "L1Y", typeof(int), 200, null, null, "") { IsVisible = false }); Parameters.Add("L2X", new ProcessorParameter("L2X", "L2X", typeof(int), 400, null, null, "") { IsVisible = false }); @@ -80,7 +79,7 @@ public class PointToLineProcessor : ImageProcessorBase if (abLen > 0.001) { - // 叉积求距离 + // 叉积求距? double cross = Math.Abs(abx * (l1y - py) - aby * (l1x - px)); pixelDistance = cross / abLen; @@ -113,4 +112,4 @@ public class PointToLineProcessor : ImageProcessorBase return inputImage.Clone(); } -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/检测分析/VoidMeasurementProcessor.cs b/XP.ImageProcessing.Processors/检测分析/VoidMeasurementProcessor.cs similarity index 95% rename from ImageProcessing.Processors/检测分析/VoidMeasurementProcessor.cs rename to XP.ImageProcessing.Processors/检测分析/VoidMeasurementProcessor.cs index 09c3aa2..7598007 100644 --- a/ImageProcessing.Processors/检测分析/VoidMeasurementProcessor.cs +++ b/XP.ImageProcessing.Processors/检测分析/VoidMeasurementProcessor.cs @@ -1,24 +1,24 @@ // ============================================================================ -// 文件名: VoidMeasurementProcessor.cs +// 文件? VoidMeasurementProcessor.cs // 描述: 空隙测量算子 // // 处理流程: // 1. 构建多边形ROI掩码,计算ROI面积 -// 2. 在ROI内进行双阈值分割提取气泡区域 +// 2. 在ROI内进行双阈值分割提取气泡区? // 3. 形态学膨胀合并相邻气泡 // 4. 轮廓检测,计算每个气泡面积 -// 5. 计算空隙率 = 总气泡面积 / ROI面积 +// 5. 计算空隙?= 总气泡面?/ ROI面积 // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.Util; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; public class VoidMeasurementProcessor : ImageProcessorBase { @@ -32,7 +32,7 @@ public class VoidMeasurementProcessor : ImageProcessorBase protected override void InitializeParameters() { - // ── 多边形ROI(由UI注入,最多32个点) ── + // ── 多边形ROI(由UI注入,最?2个点?── Parameters.Add("PolyCount", new ProcessorParameter("PolyCount", "PolyCount", typeof(int), 0, null, null, "") { IsVisible = false }); for (int i = 0; i < 32; i++) { @@ -40,7 +40,7 @@ public class VoidMeasurementProcessor : ImageProcessorBase Parameters.Add($"PolyY{i}", new ProcessorParameter($"PolyY{i}", $"PolyY{i}", typeof(int), 0, null, null, "") { IsVisible = false }); } - // ── 气泡检测参数 ── + // ── 气泡检测参?── Parameters.Add("MinThreshold", new ProcessorParameter( "MinThreshold", LocalizationHelper.GetString("VoidMeasurementProcessor_MinThreshold"), @@ -109,7 +109,7 @@ public class VoidMeasurementProcessor : ImageProcessorBase } else { - // 无ROI时使用全图 + // 无ROI时使用全? roiMask = new Image(w, h); roiMask.SetValue(new Gray(255)); } @@ -152,7 +152,7 @@ public class VoidMeasurementProcessor : ImageProcessorBase CvInvoke.BitwiseAnd(voidImg, roiMask, voidImg); } - // ── 轮廓检测 ── + // ── 轮廓检?── using var contours = new VectorOfVectorOfPoint(); using var hierarchy = new Mat(); CvInvoke.FindContours(voidImg, contours, hierarchy, RetrType.External, ChainApproxMethod.ChainApproxSimple); @@ -183,7 +183,7 @@ public class VoidMeasurementProcessor : ImageProcessorBase }); } - // 按面积从大到小排序 + // 按面积从大到小排? voids.Sort((a, b) => b.Area.CompareTo(a.Area)); for (int i = 0; i < voids.Count; i++) voids[i].Index = i + 1; @@ -227,4 +227,4 @@ public class VoidRegionInfo public double AreaPercent { get; set; } public Rectangle BoundingBox { get; set; } public Point[] ContourPoints { get; set; } = Array.Empty(); -} +} \ No newline at end of file diff --git a/ImageProcessing.Processors/滤波处理/BandPassFilterProcessor.cs b/XP.ImageProcessing.Processors/滤波处理/BandPassFilterProcessor.cs similarity index 96% rename from ImageProcessing.Processors/滤波处理/BandPassFilterProcessor.cs rename to XP.ImageProcessing.Processors/滤波处理/BandPassFilterProcessor.cs index d902cb9..97feb58 100644 --- a/ImageProcessing.Processors/滤波处理/BandPassFilterProcessor.cs +++ b/XP.ImageProcessing.Processors/滤波处理/BandPassFilterProcessor.cs @@ -1,24 +1,24 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: BandPassFilterProcessor.cs -// 描述: 带通滤波器算子,用于频域图像处理 +// 文件? BandPassFilterProcessor.cs +// 描述: 带通滤波器算子,用于频域图像处? // 功能: -// - 在频域中保留特定频率范围的信号 +// - 在频域中保留特定频率范围的信? // - 支持理想、巴特沃斯、高斯三种滤波器类型 // - 可调节低频和高频截止频率 // - 通过FFT实现频域滤波 // 算法: 基于离散傅里叶变换(DFT)的频域滤波 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 带通滤波器算子 diff --git a/ImageProcessing.Processors/滤波处理/BilateralFilterProcessor.cs b/XP.ImageProcessing.Processors/滤波处理/BilateralFilterProcessor.cs similarity index 90% rename from ImageProcessing.Processors/滤波处理/BilateralFilterProcessor.cs rename to XP.ImageProcessing.Processors/滤波处理/BilateralFilterProcessor.cs index 0c5ca2a..dfcd2ba 100644 --- a/ImageProcessing.Processors/滤波处理/BilateralFilterProcessor.cs +++ b/XP.ImageProcessing.Processors/滤波处理/BilateralFilterProcessor.cs @@ -1,21 +1,21 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: BilateralFilterProcessor.cs -// 描述: 双边滤波算子,用于保边降噪 +// 文件? BilateralFilterProcessor.cs +// 描述: 双边滤波算子,用于保边降? // 功能: // - 双边滤波 -// - 保持边缘清晰的同时平滑图像 +// - 保持边缘清晰的同时平滑图? // - 可调节核大小和标准差 // 算法: 双边滤波 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 双边滤波算子 diff --git a/ImageProcessing.Processors/滤波处理/GaussianBlurProcessor.cs b/XP.ImageProcessing.Processors/滤波处理/GaussianBlurProcessor.cs similarity index 91% rename from ImageProcessing.Processors/滤波处理/GaussianBlurProcessor.cs rename to XP.ImageProcessing.Processors/滤波处理/GaussianBlurProcessor.cs index 1e2540e..2010848 100644 --- a/ImageProcessing.Processors/滤波处理/GaussianBlurProcessor.cs +++ b/XP.ImageProcessing.Processors/滤波处理/GaussianBlurProcessor.cs @@ -1,22 +1,22 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: GaussianBlurProcessor.cs +// 文件? GaussianBlurProcessor.cs // 描述: 高斯模糊算子,用于图像平滑和降噪 // 功能: -// - 高斯核卷积平滑 +// - 高斯核卷积平? // - 可调节核大小和标准差 // - 有效去除高斯噪声 // - 保持边缘相对清晰 -// 算法: 高斯滤波器卷积 -// 作者: 李伟 wei.lw.li@hexagon.com +// 算法: 高斯滤波器卷? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 高斯模糊算子 diff --git a/ImageProcessing.Processors/滤波处理/HighPassFilterProcessor.cs b/XP.ImageProcessing.Processors/滤波处理/HighPassFilterProcessor.cs similarity index 93% rename from ImageProcessing.Processors/滤波处理/HighPassFilterProcessor.cs rename to XP.ImageProcessing.Processors/滤波处理/HighPassFilterProcessor.cs index 172cfd2..0a99ab9 100644 --- a/ImageProcessing.Processors/滤波处理/HighPassFilterProcessor.cs +++ b/XP.ImageProcessing.Processors/滤波处理/HighPassFilterProcessor.cs @@ -1,26 +1,26 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: HighPassFilterProcessor.cs +// 文件? HighPassFilterProcessor.cs // 描述: 高通滤波算子,用于边缘增强 // 功能: -// - 高通滤波(频域) +// - 高通滤波(频域? // - 边缘增强 // - 去除低频信息 -// - 可调节截止频率 +// - 可调节截止频? // 算法: 高斯高通滤波器(频域) -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 高通滤波算子 +/// 高通滤波算? /// public class HighPassFilterProcessor : ImageProcessorBase { @@ -69,7 +69,7 @@ public class HighPassFilterProcessor : ImageProcessorBase Mat dftImage = new Mat(); CvInvoke.Dft(complexImage, dftImage, DxtType.Forward); - // 分离实部和虚部 + // 分离实部和虚? using (var dftPlanes = new Emgu.CV.Util.VectorOfMat()) { CvInvoke.Split(dftImage, dftPlanes); @@ -80,7 +80,7 @@ public class HighPassFilterProcessor : ImageProcessorBase // 创建高通滤波器 Mat filter = CreateHighPassFilter(rows, cols, cutoffFrequency); - // 应用滤波器 + // 应用滤波? CvInvoke.Multiply(real, filter, real); CvInvoke.Multiply(imag, filter, imag); diff --git a/ImageProcessing.Processors/滤波处理/LowPassFilterProcessor.cs b/XP.ImageProcessing.Processors/滤波处理/LowPassFilterProcessor.cs similarity index 93% rename from ImageProcessing.Processors/滤波处理/LowPassFilterProcessor.cs rename to XP.ImageProcessing.Processors/滤波处理/LowPassFilterProcessor.cs index 89d0159..8f4821b 100644 --- a/ImageProcessing.Processors/滤波处理/LowPassFilterProcessor.cs +++ b/XP.ImageProcessing.Processors/滤波处理/LowPassFilterProcessor.cs @@ -1,26 +1,26 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: LowPassFilterProcessor.cs +// 文件? LowPassFilterProcessor.cs // 描述: 低通滤波算子,用于去除高频噪声 // 功能: -// - 低通滤波(频域) +// - 低通滤波(频域? // - 去除高频噪声 // - 平滑图像 -// - 可调节截止频率 +// - 可调节截止频? // 算法: 高斯低通滤波器(频域) -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 低通滤波算子 +/// 低通滤波算? /// public class LowPassFilterProcessor : ImageProcessorBase { @@ -69,7 +69,7 @@ public class LowPassFilterProcessor : ImageProcessorBase Mat dftImage = new Mat(); CvInvoke.Dft(complexImage, dftImage, DxtType.Forward); - // 分离实部和虚部 + // 分离实部和虚? using (var dftPlanes = new Emgu.CV.Util.VectorOfMat()) { CvInvoke.Split(dftImage, dftPlanes); @@ -80,7 +80,7 @@ public class LowPassFilterProcessor : ImageProcessorBase // 创建低通滤波器 Mat filter = CreateLowPassFilter(rows, cols, cutoffFrequency); - // 应用滤波器 + // 应用滤波? CvInvoke.Multiply(real, filter, real); CvInvoke.Multiply(imag, filter, imag); diff --git a/ImageProcessing.Processors/滤波处理/MeanFilterProcessor.cs b/XP.ImageProcessing.Processors/滤波处理/MeanFilterProcessor.cs similarity index 88% rename from ImageProcessing.Processors/滤波处理/MeanFilterProcessor.cs rename to XP.ImageProcessing.Processors/滤波处理/MeanFilterProcessor.cs index 49d68f6..46effa1 100644 --- a/ImageProcessing.Processors/滤波处理/MeanFilterProcessor.cs +++ b/XP.ImageProcessing.Processors/滤波处理/MeanFilterProcessor.cs @@ -1,25 +1,25 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: MeanFilterProcessor.cs +// 文件? MeanFilterProcessor.cs // 描述: 均值滤波算子,用于图像平滑 // 功能: -// - 均值滤波 +// - 均值滤? // - 简单快速的平滑方法 // - 可调节核大小 -// 算法: 均值滤波 -// 作者: 李伟 wei.lw.li@hexagon.com +// 算法: 均值滤? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; using System.Drawing; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 均值滤波算子 +/// 均值滤波算? /// public class MeanFilterProcessor : ImageProcessorBase { diff --git a/ImageProcessing.Processors/滤波处理/MedianFilterProcessor.cs b/XP.ImageProcessing.Processors/滤波处理/MedianFilterProcessor.cs similarity index 88% rename from ImageProcessing.Processors/滤波处理/MedianFilterProcessor.cs rename to XP.ImageProcessing.Processors/滤波处理/MedianFilterProcessor.cs index b3ddf0e..d9bf276 100644 --- a/ImageProcessing.Processors/滤波处理/MedianFilterProcessor.cs +++ b/XP.ImageProcessing.Processors/滤波处理/MedianFilterProcessor.cs @@ -1,25 +1,25 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: MedianFilterProcessor.cs +// 文件? MedianFilterProcessor.cs // 描述: 中值滤波算子,用于去除椒盐噪声 // 功能: -// - 中值滤波 +// - 中值滤? // - 有效去除椒盐噪声 // - 保持边缘清晰 // - 可调节核大小 -// 算法: 中值滤波 -// 作者: 李伟 wei.lw.li@hexagon.com +// 算法: 中值滤? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 中值滤波算子 +/// 中值滤波算? /// public class MedianFilterProcessor : ImageProcessorBase { diff --git a/ImageProcessing.Processors/滤波处理/ShockFilterProcessor.cs b/XP.ImageProcessing.Processors/滤波处理/ShockFilterProcessor.cs similarity index 95% rename from ImageProcessing.Processors/滤波处理/ShockFilterProcessor.cs rename to XP.ImageProcessing.Processors/滤波处理/ShockFilterProcessor.cs index c692dd2..7ac952c 100644 --- a/ImageProcessing.Processors/滤波处理/ShockFilterProcessor.cs +++ b/XP.ImageProcessing.Processors/滤波处理/ShockFilterProcessor.cs @@ -1,22 +1,22 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: ShockFilterProcessor.cs +// 文件? ShockFilterProcessor.cs // 描述: 冲击滤波算子,用于图像锐化和边缘增强 // 功能: -// - 基于PDE的图像锐化 +// - 基于PDE的图像锐? // - 增强边缘同时保持平滑区域 // - 可调节迭代次数和滤波强度 // - 适用于模糊图像的恢复 // 算法: 冲击滤波器(Shock Filter)基于偏微分方程 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// /// 冲击滤波算子 diff --git a/ImageProcessing.Processors/边缘检测/HorizontalEdgeProcessor.cs b/XP.ImageProcessing.Processors/边缘检测/HorizontalEdgeProcessor.cs similarity index 92% rename from ImageProcessing.Processors/边缘检测/HorizontalEdgeProcessor.cs rename to XP.ImageProcessing.Processors/边缘检测/HorizontalEdgeProcessor.cs index 4d7485d..a4292ce 100644 --- a/ImageProcessing.Processors/边缘检测/HorizontalEdgeProcessor.cs +++ b/XP.ImageProcessing.Processors/边缘检测/HorizontalEdgeProcessor.cs @@ -1,26 +1,26 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: HorizontalEdgeProcessor.cs +// 文件? HorizontalEdgeProcessor.cs // 描述: 水平边缘检测算子,专门用于检测水平方向的边缘 // 功能: -// - 检测水平边缘 +// - 检测水平边? // - 支持Prewitt和Sobel算子 // - 可调节检测灵敏度 // - 适用于检测水平线条和纹理 // 算法: Prewitt/Sobel水平算子 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// 水平边缘检测算子 +/// 水平边缘检测算? /// public class HorizontalEdgeProcessor : ImageProcessorBase { @@ -92,15 +92,15 @@ public class HorizontalEdgeProcessor : ImageProcessorBase private Image ApplySobel(Image inputImage, double sensitivity, int threshold) { - // 使用Sobel算子检测水平边缘(Y方向导数) + // 使用Sobel算子检测水平边缘(Y方向导数? Image sobelY = new Image(inputImage.Size); CvInvoke.Sobel(inputImage, sobelY, DepthType.Cv32F, 0, 1, 3); - // 转换为绝对值并应用灵敏度 + // 转换为绝对值并应用灵敏? Image result = new Image(inputImage.Size); CvInvoke.ConvertScaleAbs(sobelY, result, sensitivity, 0); - // 应用阈值 + // 应用阈? if (threshold > 0) { CvInvoke.Threshold(result, result, threshold, 255, ThresholdType.Binary); @@ -141,10 +141,10 @@ public class HorizontalEdgeProcessor : ImageProcessorBase sum -= inputData[y + 1, x, 0]; sum -= inputData[y + 1, x + 1, 0]; - // 取绝对值并应用灵敏度 + // 取绝对值并应用灵敏? int value = (int)(Math.Abs(sum) * sensitivity); - // 应用阈值 + // 应用阈? if (value > threshold) { outputData[y, x, 0] = (byte)Math.Min(255, value); @@ -161,11 +161,11 @@ public class HorizontalEdgeProcessor : ImageProcessorBase private Image ApplySimple(Image inputImage, double sensitivity, int threshold) { - // 简单差分算子 + // 简单差分算? // [ 1 1 1] // [ 0 0 0] // [-1 -1 -1] - // 但权重更简单 + // 但权重更简? int width = inputImage.Width; int height = inputImage.Height; @@ -182,7 +182,7 @@ public class HorizontalEdgeProcessor : ImageProcessorBase int diff = inputData[y - 1, x, 0] - inputData[y + 1, x, 0]; int value = (int)(Math.Abs(diff) * sensitivity); - // 应用阈值 + // 应用阈? if (value > threshold) { outputData[y, x, 0] = (byte)Math.Min(255, value); diff --git a/ImageProcessing.Processors/边缘检测/KirschEdgeProcessor.cs b/XP.ImageProcessing.Processors/边缘检测/KirschEdgeProcessor.cs similarity index 87% rename from ImageProcessing.Processors/边缘检测/KirschEdgeProcessor.cs rename to XP.ImageProcessing.Processors/边缘检测/KirschEdgeProcessor.cs index 8f1b24d..e4e185e 100644 --- a/ImageProcessing.Processors/边缘检测/KirschEdgeProcessor.cs +++ b/XP.ImageProcessing.Processors/边缘检测/KirschEdgeProcessor.cs @@ -1,31 +1,31 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: KirschEdgeProcessor.cs -// 描述: Kirsch边缘检测算子,用于检测图像边缘 +// 文件? KirschEdgeProcessor.cs +// 描述: Kirsch边缘检测算子,用于检测图像边? // 功能: -// - Kirsch算子边缘检测 -// - 8个方向的边缘检测 +// - Kirsch算子边缘检? +// - 8个方向的边缘检? // - 输出最大响应方向的边缘 -// - 对噪声敏感度低 -// 算法: Kirsch算子(8方向模板) -// 作者: 李伟 wei.lw.li@hexagon.com +// - 对噪声敏感度? +// 算法: Kirsch算子?方向模板? +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// Kirsch边缘检测算子 +/// Kirsch边缘检测算? /// public class KirschEdgeProcessor : ImageProcessorBase { private static readonly ILogger _logger = Log.ForContext(); - // Kirsch算子的8个方向模板 + // Kirsch算子?个方向模? private static readonly int[][,] KirschKernels = new int[8][,] { // N @@ -86,14 +86,14 @@ public class KirschEdgeProcessor : ImageProcessorBase Image result = new Image(width, height); byte[,,] outputData = result.Data; - // 对每个像素应用8个Kirsch模板,取最大响应 + // 对每个像素应?个Kirsch模板,取最大响? for (int y = 1; y < height - 1; y++) { for (int x = 1; x < width - 1; x++) { int maxResponse = 0; - // 对8个方向分别计算 + // ?个方向分别计? for (int k = 0; k < 8; k++) { int sum = 0; @@ -106,7 +106,7 @@ public class KirschEdgeProcessor : ImageProcessorBase } } - // 取绝对值 + // 取绝对? sum = Math.Abs(sum); if (sum > maxResponse) { diff --git a/ImageProcessing.Processors/边缘检测/SobelEdgeProcessor.cs b/XP.ImageProcessing.Processors/边缘检测/SobelEdgeProcessor.cs similarity index 91% rename from ImageProcessing.Processors/边缘检测/SobelEdgeProcessor.cs rename to XP.ImageProcessing.Processors/边缘检测/SobelEdgeProcessor.cs index 8e49386..b7f5764 100644 --- a/ImageProcessing.Processors/边缘检测/SobelEdgeProcessor.cs +++ b/XP.ImageProcessing.Processors/边缘检测/SobelEdgeProcessor.cs @@ -1,26 +1,26 @@ // ============================================================================ // Copyright © 2026 Hexagon Technology Center GmbH. All Rights Reserved. -// 文件名: SobelEdgeProcessor.cs -// 描述: Sobel边缘检测算子,用于检测图像边缘 +// 文件? SobelEdgeProcessor.cs +// 描述: Sobel边缘检测算子,用于检测图像边? // 功能: -// - Sobel算子边缘检测 -// - 支持X方向、Y方向和组合检测 +// - Sobel算子边缘检? +// - 支持X方向、Y方向和组合检? // - 可调节核大小 -// - 输出边缘强度图 +// - 输出边缘强度? // 算法: Sobel算子 -// 作者: 李伟 wei.lw.li@hexagon.com +// 作? 李伟 wei.lw.li@hexagon.com // ============================================================================ using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; -using ImageProcessing.Core; using Serilog; +using XP.ImageProcessing.Core; -namespace ImageProcessing.Processors; +namespace XP.ImageProcessing.Processors; /// -/// Sobel边缘检测算子 +/// Sobel边缘检测算? /// public class SobelEdgeProcessor : ImageProcessorBase { @@ -96,7 +96,7 @@ public class SobelEdgeProcessor : ImageProcessorBase // 计算梯度幅值:sqrt(Gx^2 + Gy^2) Image magnitude = new Image(inputImage.Size); - // 手动计算幅值 + // 手动计算幅? for (int y = 0; y < inputImage.Height; y++) { for (int x = 0; x < inputImage.Width; x++) diff --git a/ImageROIControl/ControlThumb.cs b/XP.ImageProcessing.RoiControl/ControlThumb.cs similarity index 80% rename from ImageROIControl/ControlThumb.cs rename to XP.ImageProcessing.RoiControl/ControlThumb.cs index 36abc49..d9a7b92 100644 --- a/ImageROIControl/ControlThumb.cs +++ b/XP.ImageProcessing.RoiControl/ControlThumb.cs @@ -2,10 +2,10 @@ using System; using System.Windows; using System.Windows.Controls.Primitives; -namespace ImageROIControl +namespace XP.ImageProcessing.RoiControl { /// - /// ROI控制点 + /// ROI控制�? /// public class ControlThumb : Thumb { @@ -16,12 +16,12 @@ namespace ImageROIControl try { ResourceDictionary dictionary = new ResourceDictionary(); - dictionary.Source = new Uri("pack://application:,,,/ImageROIControl;component/Themes/Generic.xaml", UriKind.Absolute); + dictionary.Source = new Uri("pack://application:,,,/XP.ImageProcessing.RoiControl;component/Themes/Generic.xaml", UriKind.Absolute); thumbStyle = (Style?)dictionary["AreaControlThumbStyle"]; } catch { - // 如果样式加载失败,使用默认样式 + // 如果样式加载失败,使用默认样�? thumbStyle = null; } } diff --git a/ImageROIControl/Controls/ImageROICanvas.cs b/XP.ImageProcessing.RoiControl/Controls/ImageROICanvas.cs similarity index 98% rename from ImageROIControl/Controls/ImageROICanvas.cs rename to XP.ImageProcessing.RoiControl/Controls/ImageROICanvas.cs index c33354c..f313539 100644 --- a/ImageROIControl/Controls/ImageROICanvas.cs +++ b/XP.ImageProcessing.RoiControl/Controls/ImageROICanvas.cs @@ -1,12 +1,12 @@ -using ImageROIControl.Models; using System.Collections.ObjectModel; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; +using XP.ImageProcessing.RoiControl.Models; -namespace ImageROIControl.Controls +namespace XP.ImageProcessing.RoiControl.Controls { /// /// 图像ROI画布控件,支持图像显示、ROI编辑、缩放和平移 diff --git a/ImageROIControl/Controls/PolygonRoiCanvas.xaml b/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml similarity index 93% rename from ImageROIControl/Controls/PolygonRoiCanvas.xaml rename to XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml index 9be318d..409d5d4 100644 --- a/ImageROIControl/Controls/PolygonRoiCanvas.xaml +++ b/XP.ImageProcessing.RoiControl/Controls/PolygonRoiCanvas.xaml @@ -1,12 +1,12 @@ - { UpdateAdorner(); @@ -219,7 +219,7 @@ namespace ImageROIControl.Controls { var control = (PolygonRoiCanvas)d; - // 更新IsSelected状态 + // 更新IsSelected状�? if (e.OldValue is ROIShape oldROI) { oldROI.IsSelected = false; @@ -288,7 +288,7 @@ namespace ImageROIControl.Controls // 尝试获取容器 var container = itemsControl.ItemContainerGenerator.ContainerFromIndex(i) as ContentPresenter; - // 如果容器还没生成,尝试强制生成 + // 如果容器还没生成,尝试强制生�? if (container == null) { // 强制生成容器 @@ -298,7 +298,7 @@ namespace ImageROIControl.Controls if (container != null) { - // 查找实际的形状元素(只支持多边形) + // 查找实际的形状元素(只支持多边形�? if (roi is PolygonROI) { return FindVisualChild(container); @@ -334,10 +334,10 @@ namespace ImageROIControl.Controls private void Canvas_MouseWheel(object sender, MouseWheelEventArgs e) { - // 获取鼠标在 imageDisplayGrid 中的位置 + // 获取鼠标�?imageDisplayGrid 中的位置 Point mousePos = e.GetPosition(imageDisplayGrid); - // 获取鼠标在 Canvas 中的位置(缩放前) + // 获取鼠标�?Canvas 中的位置(缩放前�? Point mousePosOnCanvas = e.GetPosition(mainCanvas); double oldZoom = ZoomScale; @@ -364,7 +364,7 @@ namespace ImageROIControl.Controls ZoomScale = newZoom; // 调整平移偏移,使鼠标位置保持不变 - // 新的偏移 = 旧偏移 + 鼠标位置 - 鼠标位置 * 缩放比例 + // 新的偏移 = 旧偏�?+ 鼠标位置 - 鼠标位置 * 缩放比例 PanOffsetX = mousePos.X - (mousePos.X - PanOffsetX) * scale; PanOffsetY = mousePos.Y - (mousePos.Y - PanOffsetY) * scale; } @@ -412,7 +412,7 @@ namespace ImageROIControl.Controls private void Canvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { - // 右键点击完成多边形 + // 右键点击完成多边�? OnRightClick(); e.Handled = true; } @@ -440,10 +440,10 @@ namespace ImageROIControl.Controls if (imageDisplayGrid != null && CanvasWidth > 0 && CanvasHeight > 0) { - // 使用 Dispatcher 延迟执行,确保布局已完成 + // 使用 Dispatcher 延迟执行,确保布局已完�? Dispatcher.BeginInvoke(new Action(() => { - // 获取图像显示区域的实际尺寸 + // 获取图像显示区域的实际尺�? double viewportWidth = imageDisplayGrid.ActualWidth; double viewportHeight = imageDisplayGrid.ActualHeight; @@ -453,10 +453,10 @@ namespace ImageROIControl.Controls double scaleX = viewportWidth / CanvasWidth; double scaleY = viewportHeight / CanvasHeight; - // 选择较小的缩放比例,确保图像完全显示在窗口内(保持宽高比) + // 选择较小的缩放比例,确保图像完全显示在窗口内(保持宽高比�? ZoomScale = Math.Min(scaleX, scaleY); - // 居中显示由 Grid 的 HorizontalAlignment 和 VerticalAlignment 自动处理 + // 居中显示�?Grid �?HorizontalAlignment �?VerticalAlignment 自动处理 PanOffsetX = 0; PanOffsetY = 0; } diff --git a/ImageROIControl/Models/ROIShape.cs b/XP.ImageProcessing.RoiControl/Models/ROIShape.cs similarity index 97% rename from ImageROIControl/Models/ROIShape.cs rename to XP.ImageProcessing.RoiControl/Models/ROIShape.cs index ee9fff8..4ca8789 100644 --- a/ImageROIControl/Models/ROIShape.cs +++ b/XP.ImageProcessing.RoiControl/Models/ROIShape.cs @@ -5,7 +5,7 @@ using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows; -namespace ImageROIControl.Models +namespace XP.ImageProcessing.RoiControl.Models { /// /// ROI形状类型 @@ -68,7 +68,7 @@ namespace ImageROIControl.Models } /// - /// 用于JSON序列化的Points列表(不参与UI绑定) + /// 用于JSON序列化的Points列表(不参与UI绑定�? /// [System.Text.Json.Serialization.JsonPropertyName("PointsList")] public List PointsList diff --git a/ImageROIControl/PointListConverter.cs b/XP.ImageProcessing.RoiControl/PointListConverter.cs similarity index 96% rename from ImageROIControl/PointListConverter.cs rename to XP.ImageProcessing.RoiControl/PointListConverter.cs index 4f7960f..c8ae3aa 100644 --- a/ImageROIControl/PointListConverter.cs +++ b/XP.ImageProcessing.RoiControl/PointListConverter.cs @@ -6,7 +6,7 @@ using System.Windows; using System.Windows.Data; using System.Windows.Media; -namespace ImageROIControl +namespace XP.ImageProcessing.RoiControl { /// /// 将Point列表转换为PointCollection,支持ObservableCollection变化通知 @@ -47,7 +47,7 @@ namespace ImageROIControl } /// - /// 索引转换为位置标签 + /// 索引转换为位置标�? /// public class IndexToPositionConverter : IValueConverter { diff --git a/ImageROIControl/PolygonAdorner.cs b/XP.ImageProcessing.RoiControl/PolygonAdorner.cs similarity index 95% rename from ImageROIControl/PolygonAdorner.cs rename to XP.ImageProcessing.RoiControl/PolygonAdorner.cs index 9305854..714a9cb 100644 --- a/ImageROIControl/PolygonAdorner.cs +++ b/XP.ImageProcessing.RoiControl/PolygonAdorner.cs @@ -6,14 +6,14 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Shapes; -namespace ImageROIControl +namespace XP.ImageProcessing.RoiControl { /// /// 多边形装饰器,用于编辑多边形顶点 /// public class PolygonAdorner : Adorner { - private List vertexThumbs = new List(); // 顶点控制点 + private List vertexThumbs = new List(); // 顶点控制�? private VisualCollection visualChildren; private double scaleFactor = 1; private Models.PolygonROI? polygonROI; @@ -28,7 +28,7 @@ namespace ImageROIControl // 使用ROI模型的Points数量而不是Polygon的Points int pointCount = polygonROI?.Points.Count ?? 0; - // 创建顶点控制点 + // 创建顶点控制�? for (int i = 0; i < pointCount; i++) { var thumb = new ControlThumb(); @@ -80,7 +80,7 @@ namespace ImageROIControl private void HandleRightClick(object sender, MouseButtonEventArgs e) { - // 右键删除顶点(至少保留3个顶点) + // 右键删除顶点(至少保�?个顶点) if (polygonROI != null && polygonROI.Points.Count > 3) { Thumb? hitThumb = sender as Thumb; @@ -104,7 +104,7 @@ namespace ImageROIControl { double thumbSize = 12 * scaleFactor; - // 布局顶点控制点 + // 布局顶点控制�? for (int i = 0; i < vertexThumbs.Count && i < polygonROI.Points.Count; i++) { vertexThumbs[i].Arrange(new Rect( diff --git a/ImageROIControl/PolygonPointsBehavior.cs b/XP.ImageProcessing.RoiControl/PolygonPointsBehavior.cs similarity index 97% rename from ImageROIControl/PolygonPointsBehavior.cs rename to XP.ImageProcessing.RoiControl/PolygonPointsBehavior.cs index ee4ef90..ca59b43 100644 --- a/ImageROIControl/PolygonPointsBehavior.cs +++ b/XP.ImageProcessing.RoiControl/PolygonPointsBehavior.cs @@ -6,7 +6,7 @@ using System.Windows; using System.Windows.Media; using System.Windows.Shapes; -namespace ImageROIControl +namespace XP.ImageProcessing.RoiControl { /// /// 多边形Points附加行为,支持ObservableCollection绑定 @@ -58,7 +58,7 @@ namespace ImageROIControl // 保存引用以便后续清理 _attachedCollections[polygon] = newCollection; - // 监听Polygon卸载事件以清理资源 + // 监听Polygon卸载事件以清理资�? polygon.Unloaded += (s, args) => { if (_attachedCollections.TryGetValue(polygon, out var collection)) diff --git a/ImageROIControl/ROISerializer.cs b/XP.ImageProcessing.RoiControl/ROISerializer.cs similarity index 95% rename from ImageROIControl/ROISerializer.cs rename to XP.ImageProcessing.RoiControl/ROISerializer.cs index 966cb23..52ac6ad 100644 --- a/ImageROIControl/ROISerializer.cs +++ b/XP.ImageProcessing.RoiControl/ROISerializer.cs @@ -1,12 +1,12 @@ -using ImageROIControl.Models; using System; using System.Collections.Generic; using System.IO; using System.Text.Json; using System.Text.Json.Serialization; using System.Windows; +using XP.ImageProcessing.RoiControl.Models; -namespace ImageROIControl +namespace XP.ImageProcessing.RoiControl { /// /// ROI序列化工具类 @@ -38,7 +38,7 @@ namespace ImageROIControl } /// - /// 序列化ROI列表为JSON字符串 + /// 序列化ROI列表为JSON字符�? /// public static string Serialize(IEnumerable roiList) { @@ -55,7 +55,7 @@ namespace ImageROIControl } /// - /// Point类型的JSON转换器 + /// Point类型的JSON转换�? /// public class PointConverter : JsonConverter { @@ -102,7 +102,7 @@ namespace ImageROIControl } /// - /// ROIShape多态类型的JSON转换器 + /// ROIShape多态类型的JSON转换�? /// public class ROIShapeConverter : JsonConverter { diff --git a/ImageROIControl/ROITypeToVisibilityConverter.cs b/XP.ImageProcessing.RoiControl/ROITypeToVisibilityConverter.cs similarity index 88% rename from ImageROIControl/ROITypeToVisibilityConverter.cs rename to XP.ImageProcessing.RoiControl/ROITypeToVisibilityConverter.cs index b19b220..7aa8b39 100644 --- a/ImageROIControl/ROITypeToVisibilityConverter.cs +++ b/XP.ImageProcessing.RoiControl/ROITypeToVisibilityConverter.cs @@ -1,10 +1,10 @@ -using ImageROIControl.Models; using System; using System.Globalization; using System.Windows; using System.Windows.Data; +using XP.ImageProcessing.RoiControl.Models; -namespace ImageROIControl.Converters +namespace XP.ImageProcessing.RoiControl.Converters { public class ROITypeToVisibilityConverter : IValueConverter { diff --git a/ImageROIControl/Themes/Generic.xaml b/XP.ImageProcessing.RoiControl/Themes/Generic.xaml similarity index 97% rename from ImageROIControl/Themes/Generic.xaml rename to XP.ImageProcessing.RoiControl/Themes/Generic.xaml index f8dc125..1ffabb5 100644 --- a/ImageROIControl/Themes/Generic.xaml +++ b/XP.ImageProcessing.RoiControl/Themes/Generic.xaml @@ -1,8 +1,7 @@ - + xmlns:local="clr-namespace:XP.ImageProcessing.RoiControl.Controls"> - @@ -74,7 +73,7 @@ - + - + @@ -121,7 +120,7 @@ - + @@ -167,7 +166,6 @@ MinHeight="200" ParameterChanged="OnParameterChanged" /> - @@ -205,6 +203,5 @@ Value="{Binding ProcessingProgress}" /> - - + \ No newline at end of file diff --git a/XplorePlane/Views/ImageProcessing/ImageProcessingPanelView.xaml.cs b/XplorePlane/Views/ImageProcessing/ImageProcessingPanelView.xaml.cs index f454a61..b72b23b 100644 --- a/XplorePlane/Views/ImageProcessing/ImageProcessingPanelView.xaml.cs +++ b/XplorePlane/Views/ImageProcessing/ImageProcessingPanelView.xaml.cs @@ -1,9 +1,10 @@ +using Prism.Ioc; using System; using System.Windows; using System.Windows.Controls; -using Prism.Ioc; using XplorePlane.Services; using XplorePlane.ViewModels; + namespace XplorePlane.Views { public partial class ImageProcessingPanelView : UserControl @@ -51,4 +52,4 @@ namespace XplorePlane.Views // Nothing extra needed here — ApplyProcessingCommand will pick them up via the service. } } -} +} \ No newline at end of file diff --git a/XplorePlane/Views/ImageProcessing/ImageProcessingWindow.xaml b/XplorePlane/Views/ImageProcessing/ImageProcessingWindow.xaml index cec64ed..8e144bd 100644 --- a/XplorePlane/Views/ImageProcessing/ImageProcessingWindow.xaml +++ b/XplorePlane/Views/ImageProcessing/ImageProcessingWindow.xaml @@ -11,4 +11,4 @@ ShowInTaskbar="False" WindowStartupLocation="CenterOwner"> - + \ No newline at end of file diff --git a/XplorePlane/Views/ImageProcessing/ImageProcessingWindow.xaml.cs b/XplorePlane/Views/ImageProcessing/ImageProcessingWindow.xaml.cs index ff57c0d..3dd4fa6 100644 --- a/XplorePlane/Views/ImageProcessing/ImageProcessingWindow.xaml.cs +++ b/XplorePlane/Views/ImageProcessing/ImageProcessingWindow.xaml.cs @@ -9,4 +9,4 @@ namespace XplorePlane.Views InitializeComponent(); } } -} +} \ No newline at end of file diff --git a/XplorePlane/Views/ImageProcessing/OperatorToolboxView.xaml b/XplorePlane/Views/ImageProcessing/OperatorToolboxView.xaml index b640ea9..60fe026 100644 --- a/XplorePlane/Views/ImageProcessing/OperatorToolboxView.xaml +++ b/XplorePlane/Views/ImageProcessing/OperatorToolboxView.xaml @@ -10,10 +10,10 @@ d:DesignHeight="600" d:DesignWidth="280"> - - - - + + + + Microsoft YaHei UI @@ -22,9 +22,9 @@ BorderThickness="1" CornerRadius="4"> - - - + + + @@ -32,27 +32,27 @@ + VerticalAlignment="Center" />