/*
* 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);
}
}
}
}