/* * Copyright (c) 2025 LG Electronics Inc. * SPDX-License-Identifier: LicenseRef-LGE-Proprietary */ using Aurora.Api; using CogCommon; using VisionCommon; using Hermes; using Cognex.VisionPro; using System; using System.Collections.Generic; using System.Windows; using System.Diagnostics; namespace CogPattern { /// /// BrightnessRunParam 클래스 /// public class BrightnessRunParam : IRunParam, ICloneable { /// /// BrightnessParamExt /// public BrightnessParamExt BrightnessParamExt { get; set; } = new BrightnessParamExt(); /// /// object복사 /// /// object public object Clone() { return new BrightnessRunParam() { BrightnessParamExt = BrightnessParamExt.Clone() as BrightnessParamExt }; } } /// /// CogBrightness 클래스 /// internal static class CogBrightness { //private static readonly Logger _Logger = new Logger(typeof(CogBrightness).Name); /// /// 패턴결과 찾기 /// /// 이미지 /// ROI정보 /// 추가파라미터 /// PatternResult public static PatternResult Find(ICogImage image, ROI findRoi, BrightnessParamExt paramExt) { if (CogEnvironment.IsColorImage(image)) { var grayImageId = CogEnvironment.ConvertToGray(image); var patternResult = FindInternal(grayImageId, findRoi, paramExt); CogEnvironment.FreeImage(grayImageId); return patternResult; } return FindInternal(image, findRoi, paramExt); } private static PatternResult FindInternal(ICogImage image, ROI findRoi, BrightnessParamExt paramExt) { PatternResult finderResult; BrightnessResult brightnessResult; var timeFind = new Stopwatch(); timeFind.Start(); if (ROI.IsNullOrEmpty(findRoi)) { var imagePoint = CogEnvironment.GetImageCenter(image); brightnessResult = CogEnvironment.GetBrightness(image, imagePoint); finderResult = ExtractResults(brightnessResult, paramExt); } else { brightnessResult = CogEnvironment.GetBrightnessWithCropRoi(image, findRoi); finderResult = ExtractResults(brightnessResult, paramExt); } timeFind.Stop(); finderResult.TactTimeInMilliSec = timeFind.ElapsedMilliseconds; return finderResult; } private static PatternResult ExtractResults(BrightnessResult brightness, BrightnessParamExt paramExt) { var results = new List { brightness.Clone() }; return new PatternResult() { Status = (brightness.Avg > paramExt.AvgLow && brightness.Avg < paramExt.AvgHigh)? eFoundStatus.FoundOK : eFoundStatus.NotFound, Results = results }; } /// /// 결과없음 반환 /// /// PatternResult public static PatternResult GetNotFoundPatternResult() { return new PatternResult() { Status = eFoundStatus.NotFound, Results = new List() }; } /// /// 패턴 결과 그리기 /// /// 패턴결과 /// Display public static void Draw(PatternResult patternResult, ICogCameraDisplay cogCameraDisplay) { CogColorConstants color = CogColorConstants.Magenta; if (patternResult.Status != eFoundStatus.FoundOK) { color = ColorConverter.ConvertColor(eColor.Red); } var results = patternResult.Results as List; foreach (var result in results) { var msgs = new List { string.Format("Min : {0}", result.Min), string.Format("Max : {0}", result.Max), string.Format("Avg : {0}", result.Avg), string.Format("TactTime : {0} ms", Math.Round(patternResult.TactTimeInMilliSec)), string.Format("ID : {0}_{1}", patternResult.PatternIndex.PatternId, patternResult.PatternIndex.PatternSubId) }; cogCameraDisplay.AddTextList( color, new ImagePoint(result.ImagePosition.X, result.ImagePosition.Y), msgs); } } } }