From 0ab0fde3216783ee2694d8d4bfbb94237e25a4bb Mon Sep 17 00:00:00 2001
From: C3031 <shitiangui@lanpucloud.cn>
Date: 星期五, 06 三月 2026 16:52:56 +0800
Subject: [PATCH] 新增了图像增强算法及图像滤波算法

---
 LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs |  105 +++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 74 insertions(+), 31 deletions(-)

diff --git a/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs b/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs
index 48d4e46..9b4a1f0 100644
--- a/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs
+++ b/LB_VisionProcesses/Alogrithms/Halcon/2D/HImageEnhancementTool/HImageEnhancementTool.cs
@@ -1,7 +1,9 @@
 锘縰sing HalconDotNet;
+using LB_SmartVisionCommon;
 using LB_VisionControl;
 using System;
 using System.Collections.Generic;
+using System.Drawing.Imaging;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -11,13 +13,13 @@
 {
     public enum ImageEnhancementType { Emphasize, EquHisto, ScaleMax }
 
-    [Process("Halcon鍥惧儚澧炲己", Category = "Halcon2D宸ュ叿", Description = "鍒涘缓鍥惧儚澧炲己宸ュ叿")]
+    [Process("Halcon2D鍥惧儚澧炲己", Category = "Halcon2D宸ュ叿", Description = "鍒涘缓鍥惧儚澧炲己宸ュ叿")]    
     public class HImageEnhancementTool : TAlgorithm
     {
         public HImageEnhancementTool()
         {
             strProcessClass = "LB_VisionProcesses.Alogrithms.Halcon.HImageEnhancementTool";
-            strProcessName = "Halcon鍥惧儚澧炲己宸ュ叿";
+            strProcessName = "Halcon2D鍥惧儚澧炲己宸ュ叿";
 
             Params.Inputs.Add("婊ゆ尝鍣ㄧ被鍨�", "杈圭紭澧炲己");
             Params.Inputs.Add("鎺╄啘瀹�", 1);
@@ -33,7 +35,8 @@
 
             Params.ROI = new HSegment(0, 0, 250, 250);
         }
-    
+
+        List<RecordImageEnhancementData> recordImageEnhancementDatas = new List<RecordImageEnhancementData>();
         /// <summary>
         /// 绠楀瓙閫昏緫
         /// </summary>
@@ -53,23 +56,56 @@
                     Result = false;
                     return;
                 }
-
-                #region 瑁佸壀鍖哄煙
-                if (!(Params.ROI is HSegment))
+                if (InputImage is Bitmap)
                 {
-                    Msg = "ROI绫诲瀷閿欒,蹇呴』涓篐Segment绫诲瀷";
-                    Result = false;
-                    return;
+                    try
+                    {
+                        using (HImage hImage = new HImage())
+                        {
+                            Bitmap bitmap = (Bitmap)InputImage;
+                            Rectangle rect = new Rectangle(0, 0, ((Bitmap)bitmap).Width, ((Bitmap)bitmap).Height);
+                            BitmapData srcBmpData = ((Bitmap)bitmap).LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb);
+                            hImage.GenImageInterleaved(srcBmpData.Scan0, "rgbx", ((Bitmap)bitmap).Width, ((Bitmap)bitmap).Height, 0, "byte", ((Bitmap)bitmap).Width, ((Bitmap)bitmap).Height, 0, 0, -1, 0);
+                            ((Bitmap)bitmap).UnlockBits(srcBmpData);
+                            bitmap.Dispose();
+                            bitmap = null;
+                            InputImage = null;
+                            InputImage = hImage.Clone();
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                    }
                 }
-
                 if (!(InputImage is HObject))
                 {
-                    Msg = "杈撳叆鍥剧墖绫诲瀷閿欒,蹇呴』涓篐Object绫诲瀷";
+                    Msg = "杈撳叆鍥剧墖鏍煎紡涓嶄负HObject";
                     Result = false;
                     return;
                 }
+                #region 瑁佸壀鍖哄煙
+                //if (!(Params.ROI is HSegment))
+                //{
+                //    Msg = "ROI绫诲瀷閿欒,蹇呴』涓篐Segment绫诲瀷";
+                //    Result = false;
+                //    return;
+                //}
 
-                HObject DomainImage = ((HObject)InputImage)?.CopyObj(1, -1);
+                //if (!(InputImage is HObject))
+                //{
+                //    Msg = "杈撳叆鍥剧墖绫诲瀷閿欒,蹇呴』涓篐Object绫诲瀷";
+                //    Result = false;
+                //    return;
+                //}
+
+                //HObject DomainImage = ((HObject)InputImage)?.CopyObj(1, -1);
+                object DomainImage = null;
+                if (!ReduceDomainImage(InputImage, ref DomainImage))
+                {
+                    Msg = "瑁佸壀鍖哄煙澶辫触";
+                    Result = false;
+                    return;
+                }
                 #endregion
 
                 #region 绠楀瓙閫昏緫
@@ -106,30 +142,37 @@
                 int hv_MaskWidth = Convert.ToInt16(Params.Inputs["鎺╄啘瀹�"]);
                 int hv_MaskHight = Convert.ToInt16(Params.Inputs["鎺╄啘楂�"]);
                 double hv_Factor = Convert.ToDouble(Params.Inputs["澧炲己鍥犲瓙"]);
+                
+                recordImageEnhancementDatas = ImageEnhancementManager.Instance.GetAllUsers();
 
-                Enum.TryParse(Params.Inputs["鍥惧儚澧炲己绫诲瀷"]?.ToString(), out ImageEnhancementType imageEnhancementType);
-                string hv_ImageEnhancementType = "scaleMax";
-                switch (imageEnhancementType)
+                string hv_ImageEnhancementType = "";
+                foreach (var recordImageEnhancementData in recordImageEnhancementDatas)
                 {
-                    case ImageEnhancementType.Emphasize:
-                        hv_ImageEnhancementType = "emphasize";
+                    switch (recordImageEnhancementData.FilterName)
+                    {
+                        case ImageEnhancementDataType.杈圭紭澧炲己_ImageEmphasize:
+                            hv_ImageEnhancementType = "emphasize";
+                            hv_MaskWidth = Convert.ToInt16(recordImageEnhancementData.MaskWidth);
+                            hv_MaskHight = Convert.ToInt16(recordImageEnhancementData.MaskHight);
+                            hv_Factor = Convert.ToDouble(recordImageEnhancementData.Factor);
+                            ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_MaskWidth, hv_MaskHight, hv_Factor);
+                            break;
+                        case ImageEnhancementDataType.鐩存柟鍥惧潎琛″寲_EquHistoImage:
+                            hv_ImageEnhancementType = "equhisto";
+                            ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_MaskWidth, hv_MaskHight, hv_Factor);
+                            break;
+                        case ImageEnhancementDataType.姣斾緥澧炲己_ScaleImageMax:
+                            hv_ImageEnhancementType = "scaleimageMax";
+                            ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_MaskWidth, hv_MaskHight, hv_Factor);
+                            break;
+                        default:
+                            hv_ImageEnhancementType = "scaleImageMax";
+                            ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_MaskWidth, hv_MaskHight, hv_Factor);
+                            break;
+                    }
 
-                        break;
-                    case ImageEnhancementType.EquHisto:
-                        hv_ImageEnhancementType = "equHisto";
 
-                        break;
-                    case ImageEnhancementType.ScaleMax:
-                    default:
-                        hv_ImageEnhancementType = "scaleMax";
-                        break;
                 }
-                double hv_Row1 = Convert.ToDouble(((HSegment)Params.ROI).BeginRow + Params.Fixture.Row);
-                double hv_Column1 = Convert.ToDouble(((HSegment)Params.ROI).BeginColumn + Params.Fixture.Column);
-                double hv_Row2 = Convert.ToDouble(((HSegment)Params.ROI).EndRow + Params.Fixture.Row);
-                double hv_Column2 = Convert.ToDouble(((HSegment)Params.ROI).EndColumn + Params.Fixture.Column);
-
-                ImageEnhancement(hoDomainImage, out ho_Regions, hv_ImageEnhancementType, hv_Column1, hv_Row2, hv_Column2);
                 #endregion
 
 

--
Gitblit v1.9.3