| | |
| | | using 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; |
| | |
| | | { |
| | | 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); |
| | |
| | | |
| | | Params.ROI = new HSegment(0, 0, 250, 250); |
| | | } |
| | | |
| | | |
| | | List<RecordImageEnhancementData> recordImageEnhancementDatas = new List<RecordImageEnhancementData>(); |
| | | /// <summary> |
| | | /// 算子逻辑 |
| | | /// </summary> |
| | |
| | | Result = false; |
| | | return; |
| | | } |
| | | |
| | | #region 裁剪区域 |
| | | if (!(Params.ROI is HSegment)) |
| | | if (InputImage is Bitmap) |
| | | { |
| | | Msg = "ROI类型错误,必须为HSegment类型"; |
| | | 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 = "输入图片类型错误,必须为HObject类型"; |
| | | Msg = "输入图片格式不为HObject"; |
| | | Result = false; |
| | | return; |
| | | } |
| | | #region 裁剪区域 |
| | | //if (!(Params.ROI is HSegment)) |
| | | //{ |
| | | // Msg = "ROI类型错误,必须为HSegment类型"; |
| | | // Result = false; |
| | | // return; |
| | | //} |
| | | |
| | | HObject DomainImage = ((HObject)InputImage)?.CopyObj(1, -1); |
| | | //if (!(InputImage is HObject)) |
| | | //{ |
| | | // Msg = "输入图片类型错误,必须为HObject类型"; |
| | | // Result = false; |
| | | // return; |
| | | //} |
| | | |
| | | //HObject DomainImage = ((HObject)InputImage)?.CopyObj(1, -1); |
| | | object DomainImage = null; |
| | | if (!ReduceDomainImage(InputImage, ref DomainImage)) |
| | | { |
| | | Msg = "裁剪区域失败"; |
| | | Result = false; |
| | | return; |
| | | } |
| | | #endregion |
| | | |
| | | #region 算子逻辑 |
| | |
| | | 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 |
| | | |
| | | |