XplorePlane Developer
539b626117
修复输出控制项目
2026-07-24 18:59:28 +08:00
XplorePlane Developer
2767510385
fix: 恢复 VoidMeasurementProcessor 输出控制项(合并时被 Develop/XP 版本覆盖)
2026-07-24 18:58:54 +08:00
XplorePlane Developer
1dc3f98fcd
合并 Develop/XP(PR 200: 气泡检测算法更新)
2026-07-24 18:53:53 +08:00
XplorePlane Developer
957157ae80
fix: 修复编译错误、BGA向导预览、算子重复插入及状态栏消息
...
## Compilation fixes
- Fix XAML namespace reference XplorePlane.Converters → XplorePlane.Helpers (EventLogView, StateDisplayView)
- Add missing using for ISampleTypeRepository / JsonSampleTypeRepository in App.xaml.cs
- Fix ILoggerService.Warn() calls using Exception as first arg instead of message string
- Serialize CncProgram to JSON when passing to MatrixLayout (expects string, not CncProgram object)
- Suppress CS8632 nullable annotation warnings project-wide
## BGA wizard fixes
- Fix preview not showing on step 3: force RefreshBgaPreview() when entering final step
- Add step validation in CanNext() to prevent skipping to preview with invalid inputs
- Notify NextCommand.CanExecuteChanged when inputs change
- Fix RunProgress runtime binding error: set Mode=OneWay for ProgressBar.Value
## Operator toolbox: prevent duplicate insertion
- Add static OperatorTarget property for direct dispatch to active pipeline
- PipelineEditorView registers as toolbox target on load (floating window only)
- CNC page sets initial target; PipelineEditorWindow resets to CNC pipeline on close
- '+' button inserts only to the active pipeline instead of broadcasting to all subscribers
## Pipeline editor status bar messages
- Add StatusBarMessageEvent / StatusBarMessagePayload to CommonEvents.cs
- PipelineEditorViewModel publishes status on all ops (add/remove/reorder/save/execute)
- MainViewModel subscribes and displays on main window bottom status bar
- Auto-clear after timeout (3s info, 5s error)
## docs
- Merge three architecture docs into consolidated XplorePlane-架构与结构说明.md
2026-07-24 15:59:16 +08:00
wei.lw.li
1f5b14cfff
fix(ImageProcessing): 修复资源泄漏和边界处理问题
2026-07-24 14:30:28 +08:00
wei.lw.li
0e644ba551
fix: QFN空洞检测阈值范围修复 + 多模式支持
2026-07-22 17:09:27 +08:00
wei.lw.li
f5c01a036a
fix: SubPixelZoomProcessor GaussianBlur 深度不匹配
2026-07-22 16:30:26 +08:00
wei.lw.li
d6e7c51bcb
feat: 空隙检测新增多模式支持 (Fixed/TopHat/LocalContrast/AdaptiveStatistics)
2026-07-22 16:30:18 +08:00
zhengxuan.zhang
8b1d20bd34
高级算子模块 输出参数的控制
2026-07-22 15:40:20 +08:00
wei.lw.li
8f611db0a8
feat: BGA检测新增AdaptiveStatistics模式 + 算法修复
2026-07-22 14:30:07 +08:00
wei.lw.li
9b0948cea9
feat(bga): 简化检测模式为Fixed/TopHat/LocalContrast,优化气泡形状过滤,恢复LocalContrastAbsMin参数
2026-07-21 17:49:51 +08:00
wei.lw.li
5d7f717e6a
feat(bga): 新增拟合椭圆裁剪去除宽基凸起并改进毛刺径向法
...
- BgaVoidRateProcessor 新增 BgaEllipseClipScale 参数,用拟合椭圆掩码裁剪焊球轮廓,切除形态学与径向法都无力的宽基凸起
- 毛刺径向法基准由形心/全局中位数半径改为椭圆中心/椭圆极径 r(θ),基准不受宽凸起牵引且兼容椭圆形焊球
- 移除低效且与面积一致性过滤重叠的 BgaMinCenterDistance 距离过滤参数
- 同步更新 BgaDetectionViewModel 参数下发、面板 XAML 控件与文件头说明
2026-07-21 16:02:31 +08:00
wei.lw.li
78694642bd
Revert "feat: 深度优化BGA焊点和气泡检测算法"
...
This reverts commit 2da914179c .
2026-07-21 13:48:39 +08:00
wei.lw.li
2da914179c
feat: 深度优化BGA焊点和气泡检测算法
...
焊点检测:新增距离变换+分水岭自动分离粘连焊球(BgaUseDistanceSplit);形态学核改为7x7;迭代次数可调(BgaMorphIterations);开运算加强分离能力
气泡检测:新增局部背景减除增强气泡对比度(VoidContrastEnhance);自适应阈值改为中值+偏移量模式(比百分位更稳健);气泡检测后增加形态学开运算去噪
默认参数:圆度0.6、自适应阈值开启、对比度增强开启、偏移量8000
2026-07-21 13:42:43 +08:00
wei.lw.li
38471bf510
feat: 改进BGA焊点和气泡检测算法,提升复杂背景下的检测精度
...
- 焊点检测:增加开运算去噪、闭运算改为1次减少粘连、提高默认圆度阈值0.6
- 新增焊球最小中心距过滤和面积一致性过滤,去除粘连和背景误检
- 气泡检测:新增自适应阈值,基于焊球内部灰度分布自动计算阈值
- BGA检测面板增加新参数控件:自适应阈值开关、阈值百分位、中心距、面积一致性
2026-07-21 13:31:51 +08:00
wei.lw.li
b1484ad2c6
fix:Normalize=false 时用 FromFloatImageClamped 保持除法后的绝对像素值语义
2026-07-21 10:16:43 +08:00
wei.lw.li
4f9d842898
fix:Normalize=false 时改用 FromFloatImageClamped(按绝对差值截断),true 时仍 min-max 拉伸
2026-07-21 10:15:58 +08:00
wei.lw.li
f30d3c39fb
fix:修复前所有类型都匹配不上、输出恒为全黑,现在三种带通滤波都能正常工作
2026-07-21 10:15:11 +08:00
wei.lw.li
42c1369604
refactor(processors): 伪彩色算子泛型化并修正形态学算子注释
...
- PseudoColorProcessor: 改为泛型,灰度主图按原位深透传避免降位;彩色叠加图仍为8位(显示固有限制)
- MorphologyProcessor: 修正误导性注释,OpenCV形态学运算原生支持CV_16U,实际无降位
2026-07-21 10:06:03 +08:00
wei.lw.li
85045d45e2
fix(processors): 修复对比度与阈值算子16位分支的降位精度损失
...
- ContrastProcessor: CLAHE分支改用原生CvInvoke.CLAHE(支持CV_16U),不再16→8→16往返
- ThresholdProcessor: Otsu分支在16位完整直方图(65536 bin)上原生计算最优阈值
2026-07-21 10:05:13 +08:00
wei.lw.li
87cd56b87e
refactor(processors): 图像增强算子改造为原生16位泛型实现
...
消除8位适配器16→8→16往返的精度损失,全程float域运算:
- HDREnhancementProcessor: 4种色调映射按位深归一化,保留暗部/亮部细节
- RetinexProcessor: SSR/MSR/MSRCR对数域运算保精度
- HierarchicalEnhancementProcessor: 多尺度高斯分解改在float域进行
- ColorLayerProcessor: 分层阈值与直方图按完整位深(16位65536 bin)计算
- EmbossProcessor: 浮雕卷积float域,灰度偏移按位深缩放
2026-07-21 10:04:13 +08:00
wei.lw.li
00c3c80481
feat(processors): 直方图均衡化算子改造为原生16位泛型实现
...
- 类改为 HistogramEqualizationProcessor<TDepth> 泛型,自动被发现机制识别为原生16位算子
- 全局均衡化16位模式:在65536 bin上直接做CDF映射,消除8位往返导致的梳状间隔放大
- CLAHE模式:改用OpenCV原生CvInvoke.CLAHE,原生支持CV_16UC1,无需降位
- 8位行为保持不变,算子键名兼容旧recipe
2026-07-21 09:28:10 +08:00
wei.lw.li
34f3eb78ce
fix: 修复图像处理算子内存泄漏和健壮性问题
...
ContrastProcessor: 修复AutoContrastStretch中floatImage重新赋值导致的内存泄漏, 修复线性模式brightness调整时result+覆盖中间图像泄漏
MorphologyProcessor: switch添加default分支防止未处理的结构元素类型
MultiplicationProcessor/BilateralFilterProcessor/PixelDepthHelper: 相关16位处理优化
2026-07-20 15:45:33 +08:00
wei.lw.li
90bff74caf
fix: 修复16位TIFF图像加载时精度丢失导致的色带问题
...
根本原因:WPF的BitmapImage加载16位灰度TIFF时自动转换为Bgr32(8位)格式,
导致原始16位精度(8976个灰度级)被压缩为约35个灰度级,产生明显色带。
修复内容:
- MainViewModel.ExecuteLoadImage: TIFF文件改用TiffBitmapDecoder+PreservePixelFormat加载
- PipelineEditorViewModel.LoadImageFromFile: 同样修复TIFF加载方式
- XP.Common.Converters.ImageConverter: ConvertGray16ToBitmapSource直接输出Gray16格式
- ImageConverter.ToBitmapSourceAutoNormalize: 采用ImageJ风格的线性映射显示算法
2026-07-20 11:49:42 +08:00
wei.lw.li
52d7379b23
feat:空隙检测增加排除检测区域
2026-07-13 13:34:31 +08:00
zhengxuan.zhang
5c6c608d13
feat(cnc): CNC 运行时 BGA/QFN 结果复核弹窗
...
在 CNC 运行到含统计项的检测模块时,弹出结果复核窗供操作员查看明细、
改判合格/不合格/警告并填写备注;判定与备注复用标记 mark 机制归档,
点击"继续"恢复执行、"中止"停止运行。
主要变动:
- 处理器门控:BgaVoidRate / QfnLeadPadVoid / QfnAutoDetection 三个算子
新增"运行时弹出结果"(ShowResultDialog) 参数并写入 OutputData,
由编排者在流水线中按需开关。
- 复核弹窗:新增 InspectionReviewWindow / InspectionReviewViewModel,
按 InspectionResultTable.Columns 通用列驱动动态建表(多表用 TabControl),
不合格/缺失行标红,展示数量/不合格/缺失汇总与 PASS/FAILED 判定横幅。
- 执行接线:CncExecutionService 在检测模块跑完流水线、归档前,
若开启弹窗且存在明细表则调用复核交互;操作员中止时抛
OperationCanceledException 停止运行。
- 交互与落库:ICncInteractionService/CncInteractionService 新增
ShowInspectionReviewAsync(Dispatcher 模态、无 UI 环境降级不阻塞);
InspectionMapViewModel 新增 InsertCncResultMarkAsync,复用
AddMarkAsync/UpdateMark 将判定+备注落成标记。
- 契约:新增 InspectionReviewRequest / InspectionReviewOutcome。
- 测试:新增 InspectionReviewViewModel 汇总计算单测。
2026-07-06 09:46:38 +08:00
zhengxuan.zhang
9a10482d8e
直方图控件填充为蓝色;修复CNC属性面板内控件显示不全的问题
2026-07-02 10:12:11 +08:00
zhengxuan.zhang
053da2a8a3
新增区域截图功能
2026-06-30 16:00:12 +08:00
zhengxuan.zhang
ab30e435bc
优化直方图控件,增加显示位置的属性; 修复算子工具箱发现逻辑;
...
1. ImageProcessorBase.cs — 新增 GetParametersDictionary() 公开方法,让适配器可以共享内部算子的参数字典引用。
2. ImageProcessingService.cs — 新增 ByteToUshortProcessorAdapter 类和发现逻辑:
适配器 (ByteToUshortProcessorAdapter): 包装一个 byte 算子为 ushort 接口。处理流程是 16 位输入 → 右移 8 位降到 byte → 委托给内部 byte 算子 → 结果 ×257 升回 ushort。参数字典和 OutputData 直接共享引用,外部 SetParameter 直接生效。
发现逻辑:DiscoverProcessors 现在分两遍扫描:
第一遍:原有逻辑,找原生 ushort 和泛型算子
第二遍:找 byte-only 算子(继承 ImageProcessorBase<byte> 且不可赋值给 ImageProcessorBase<ushort>),用适配器包装后注册。如果 key 已被第一遍注册则跳过(泛型版本优先)
2026-06-30 11:11:50 +08:00
zhengxuan.zhang
24303e1cf7
Merge branch 'Feature/16-bitImageProcessing' into Feature/TURBO-002-Cnc
...
# Conflicts:
# XP.Hardware.PLC.Sentry/XP.Hardware.PLC.Sentry.csproj
# XplorePlane.sln
2026-06-29 17:05:38 +08:00
李伟
680f61e711
feat(算子层): BGA/Void/QFN/模板匹配统一改为 ImageProcessorBase<ushort>
...
- BgaVoidRateProcessor: 改为 ushort 输入,16位双阈值分割后转8位二值图给FindContours
- VoidMeasurementProcessor: 同上,删除旧的 VoidMeasurementProcessor16 包装类
- QfnLeadPadVoidProcessor: 同上
- RotatedTemplateMatchingProcessor: 改为 ushort 输入,内部 ToByteImage 降位后传给C++库
- QfnAutoDetectionProcessor: 内部调用处增加 8→16 升位适配
- 所有阈值参数范围统一为 0-65535
2026-06-17 16:02:13 +08:00
李伟
ecc58a5819
feat(算子库): 50个算子升级为泛型,同时支持 8位/16位灰度图像处理
...
泛型算子(ImageProcessorBase<TDepth>,byte/ushort 均支持):
- 滤波处理:GaussianBlur、MeanFilter、MedianFilter、BilateralFilter
HighPassFilter、LowPassFilter、BandPassFilter、ShockFilter
- 边缘检测:SobelEdge、KirschEdge、HorizontalEdge
- 图像变换:Grayscale、Mirror、Rotate、Threshold
- 图像增强:Contrast、Gamma(LUT 升级为 ushort[65536])、Sharpen、SubPixelZoom
- 数学运算:Difference、Multiplication、Division、Integral、Or
- 其他:FilmEffect(窗宽窗位参数扩展至 0-65535)、MorphologyProcessor
- 检测分析:EdgeLineFit、EdgeCircleFit(卡尺剖面读取支持 16 位灰度)
保持 8位专用(ImageProcessorBase<byte>):
- 轮廓/椭圆检测、BGA/QFN/Void 检测、模板匹配等需要 FindContours/CV_8U 的算子
新增:
- VoidMeasurementProcessor16:16位专用包装类,阈值参数范围 0-65535
- VoidMeasurementProcessor/BgaVoidRateProcessor 阈值参数范围扩至 65535
2026-06-16 13:00:15 +08:00
李伟
6d27a02a9b
feat(算子库): ImageProcessorBase 升级为泛型基类,支持 byte/ushort 双位深
...
- ImageProcessorBase<TDepth> 泛型基类,where TDepth : struct, IComparable
- 保留 ImageProcessorBase 别名(= ImageProcessorBase<byte>)完全向后兼容
- 新增 PixelDepthHelper 工具类,封装 byte/ushort 转换、像素读写、阈值缩放等通用操作
- MaxPixelValue 属性动态返回位深最大值(byte=255,ushort=65535)
2026-06-16 11:48:19 +08:00
李伟
841cf34890
合并 XP.ImageProcessing.Core 到 XP.ImageProcessing.Processors/Core
2026-06-09 16:11:06 +08:00
zhengxuan.zhang
7683596c17
编译策略: “入口程序、硬件与 Native 依赖项目固定 x64,纯托管类库保持 Any CPU”的平台策略
2026-06-05 21:33:56 +08:00
李伟
7643cd77da
更新强度匹配类名与形状匹配对应
2026-06-03 16:02:44 +08:00
李伟
e7b660ecfb
将 C# 强度匹配封装重命名为 IntensityMatcherHandle,与 C++ IntensityMatcher 命名对齐
2026-06-03 13:15:53 +08:00
李伟
5cd1501de9
支持基于形状的模板匹配模式(独立于强度匹配)
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-03 11:31:46 +08:00
李伟
5b4ff89ef0
新增 QFN 一体检测算子,串联模板匹配与双路空洞检测。
...
将模板定位、中心 ROI 对齐、中心焊盘空洞和引脚空洞检测整合到单算子中,并输出统一判定结果,便于快速验证完整流程。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-01 17:06:48 +08:00
李伟
1874c4a5bb
新增 ROI 对齐基础能力并打通到算子与 UI。
...
统一补齐对齐核心工具类、RoiAlignment 算子、模板匹配对齐扩展和多语言资源,便于在检测前稳定完成示教 ROI 到运行图的变换。
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-01 17:04:32 +08:00
李伟
030433cc92
优化:修复Logger类型错误,重写CLAHE算法,像素遍历改用unsafe指针加速
2026-05-26 13:28:52 +08:00
李伟
0f24209e13
新增QFN引脚空洞率检测处理器及本地化资源
2026-05-26 11:22:04 +08:00
李伟
e233f0fd96
feat: 新增边缘查找拟合圆工具 + 优化拟合交互
...
- 新增 EdgeCircleFitProcessor 算子(卡尺径向边缘检测 + Kasa/RANSAC圆拟合)
- 新增 EdgeCircleFitPanel 辅助面板(拖拽画圆交互)
- Ribbon快捷工具组新增「圆拟合」按钮
- 拟合后卡尺保持可编辑状态,支持调整后重新拟合
- 每次拟合自动清除上一次结果
- 拟合方法固定RANSAC,UI不暴露选择
- 结果标注简化:直线显示角度,圆显示半径和圆心坐标
- 不再显示内点/外点小圆点
- 添加中英文本地化资源
2026-05-18 15:03:34 +08:00
李伟
12938764b1
feat: 新增边缘查找拟合直线工具
...
- 新增 EdgeLineFitProcessor 算子(卡尺边缘检测 + 最小二乘/RANSAC直线拟合)
- 新增 EdgeLineFitPanel 辅助面板(参数配置、交互绘制卡尺)
- 支持任意角度旋转的卡尺区域,4个手柄控制长度/宽度
- 支持多次拟合累积显示,关闭面板后结果保留
- 极性箭头标识搜索方向(B→D / D→B / 双向)
- 卡尺亮绿色1px,拟合直线蓝色2px
- Ribbon快捷工具组新增「直线拟合」按钮
- 添加中英文本地化资源
2026-05-15 15:44:18 +08:00
李伟
7447463c1a
feat: ROI 对齐工具与 TM_Result 位姿扩展
...
- Core: Pose2D、Point2D、RoiAlignment、AlignmentRecipe(示教多边形→运行图刚体变换)
- Processors: TemplateMatchAlignmentExtensions.ToPose2D / 四角与中心一致性校验
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-15 14:31:48 +08:00
李伟
e0eec42a2f
feat: 模板匹配助手窗口与主视口 ROI 清除逻辑
...
- 新增模板助手/批量测试窗口、事件与 ViewModel,主窗口入口与 App 注册
- 运行匹配或批量测试前发布清除事件;视口通过 VisualTreeHelper 从父 Panel 移除持久虚线 ROI,避免 FindChild 失败时框残留
- TemplateMatchNative 等相关调整
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-15 10:42:20 +08:00
李伟
82465e6510
白底/黑底检测:轮廓与最远弦度量,UI 分色与标注优化
...
- 算子:输出轮廓顶点及顶点间最远弦(微米标定与原先一致)
- 视图:实线轮廓;白底红/黑底绿;尺寸文字置于 ROI 外右侧垂直居中
- 事件与 MainViewModel 载荷改为 BackgroundDefectDetectionItem
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-05-15 09:08:44 +08:00
李伟
baef619bd4
refactor: 白底/黑底检测算法迁至 BackgroundDefectAnalyzer
...
- 在 XP.ImageProcessing.Processors 新增静态分析类与 BackgroundDefectMode/BackgroundDefectBlob。
- MainViewModel 仅负责灰度 ROI 提取、坐标平移与 Prism 事件发布。
2026-05-14 16:27:16 +08:00
李伟
aedbef5ecc
删除简单的opencv模板匹配算子,改为使用更高级一点的可旋转匹配算子(C++)
2026-05-13 14:04:10 +08:00
李伟
b9106acdf0
快捷工具处添加比例尺开关
2026-05-13 09:05:05 +08:00