using VisionCommon; using MilCommon; using Hermes; using Matrox.MatroxImagingLibrary; using Aurora.Api.DataType; using System.IO; namespace MilPattern { public class ImgPreProcessor { private static readonly int REPEAT_MAX_COUNT = 5; public static MIL_ID GetPreProcessedImage(MIL_ID srcImage, PreProcessingParam preProcParam) { MIL_ID preProcImage = MilEnvironment.GetCompatibleGrayImageBuffer(srcImage); MIL_ID tempImage = MilEnvironment.GetCompatibleGrayImageBuffer(srcImage); GetFilteredImage(srcImage, tempImage, preProcParam); GetBinarizedImage(tempImage, preProcImage, preProcParam); MilEnvironment.CopyImage(preProcImage, tempImage); GetMorphedImage(tempImage, preProcImage, preProcParam); MilEnvironment.CopyImage(preProcImage, tempImage); GetCustomizeMaskImage(tempImage, preProcImage, preProcParam); MilEnvironment.FreeImage(tempImage); return preProcImage; } #region Filtering public static int GetFilteredImage(MIL_ID srcImage, MIL_ID dstImage, PreProcessingParam preProcParam) { if (preProcParam.FilteringEnabled() && !preProcParam.FilParam.IsAllZero()) { MIL_ID tempImage = MilEnvironment.GetCompatibleGrayImageBuffer(srcImage); MilEnvironment.CopyImage(srcImage, tempImage); for (int j = 0; j < REPEAT_MAX_COUNT; j++) { if (preProcParam.FilParam.Types[j] != eFilteringType.None) { for (int i = 0; i < preProcParam.FilParam.RepeatCounts[j]; i++) { MilFiltering.Filtering(tempImage, dstImage, ConvertToMilId(preProcParam.FilParam.Types[j])); MilEnvironment.CopyImage(dstImage, tempImage); } } } MilEnvironment.FreeImage(tempImage); } else { MilEnvironment.CopyImage(srcImage, dstImage); } return E1.OK; } private static MIL_ID ConvertToMilId(eFilteringType filteringType) { if (filteringType == eFilteringType.Sharpen_4) { return MIL.M_SHARPEN_4; } else if (filteringType == eFilteringType.Sharpen_8) { return MIL.M_SHARPEN_8; } else if (filteringType == eFilteringType.Smooth) { return MIL.M_SMOOTH; } else if (filteringType == eFilteringType.Median) { return MIL.M_MEDIAN; } else if (filteringType == eFilteringType.MorphOpen) { return MIL.M_OPEN; } else if (filteringType == eFilteringType.MorphClose) { return MIL.M_CLOSE; } else { return MIL.M_SMOOTH; } } #endregion #region Binarization public static int GetBinarizedImage(MIL_ID srcImage, MIL_ID preProcImage, PreProcessingParam preProcParam) { if (preProcParam.BinaryEnabled()) { MilBinarization.Binarize( srcImage, preProcImage, preProcParam.BinParam.ThresholdLow, preProcParam.BinParam.ThresholdHigh, preProcParam.BinParam.ForegroundColor); } else { MilEnvironment.CopyImage(srcImage, preProcImage); } return E1.OK; } #endregion #region Morphology public static int GetMorphedImage(MIL_ID srcImage, MIL_ID dstImage, PreProcessingParam preProcParam) { if (preProcParam.MorphEnabled() && !preProcParam.MorphParam.IsAllZero()) { MIL_ID tempImage = MilEnvironment.GetCompatibleGrayImageBuffer(srcImage); MilEnvironment.CopyImage(srcImage, tempImage); for (int j = 0; j < REPEAT_MAX_COUNT; j++) { if (preProcParam.MorphParam.Types[j] != eMorphologyType.None) { ConvertMorphology(tempImage, dstImage, preProcParam.MorphParam.Types[j], preProcParam.MorphParam.RepeatCounts[j]); MilEnvironment.CopyImage(dstImage, tempImage); } } MilEnvironment.FreeImage(tempImage); } else { MilEnvironment.CopyImage(srcImage, dstImage); } return E1.OK; } private static MIL_ID ConvertMorphology(MIL_ID srcImage, MIL_ID dstImage, eMorphologyType morphologyType, int iteration) { MilMorphology.Morphology(srcImage, dstImage, morphologyType, iteration); return dstImage; } #endregion #region Customize Mask private static int GetCustomizeMaskImage(MIL_ID srcImage, MIL_ID dstImage, PreProcessingParam preProcParam) { if (preProcParam.CustomizeMaskEnable()) { MilCustomizeMask.Instance.LoadMaskingImage( Path.Combine(VisionSettingManager.VisionSetting.RootDirPath,"MaskingImages",preProcParam.CustomizeMaskParam.MaskingImageName), MilEnvironment.GetSystemOfBuffer(srcImage)); MilCustomizeMask.Instance.Mask(srcImage, dstImage); } else { MilEnvironment.CopyImage(srcImage, dstImage); } return E1.OK; } #endregion } }