Commit Graph

684 Commits

Author SHA1 Message Date
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 d025c8922b fix(viewport): 修复流水线处理16位图像后直方图退化为0-255的问题
- PipelinePreviewUpdatedPayload 新增 ResultImage16 字段携带16位结果图
- MainViewportService 增加 CurrentHistogramSource16 配对属性,引用配对防止过期数据
- SetManualImage/SetLiveProcessedImage 增加16位伴随图重载
- ViewportPanelViewModel 暴露 HistogramSource16 并在状态同步时更新
- ViewportPanelView 直方图刷新优先使用16位配对源统计全动态范围
2026-07-21 09:27:49 +08:00
wei.lw.li e39ca8c2b3 feat(UI): 增强/锐化按钮支持Toggle切换与撤销,添加激活状态样式指示器 2026-07-20 17:31:50 +08:00
wei.lw.li 8095a98752 feat(ImageProcessing): 锐化算法升级为16位处理管线,新增ToBitmapSource16支持Gray16输出 2026-07-20 17:31:46 +08:00
wei.lw.li 4667602400 fix: 测量工具手柄/顶点大小改为线条粗细的2倍
新增GetHandleSize() = GetAdaptiveThickness() × 2 统一自适应计算

CreateMDot/CreateAxisHandle/FootDot 从硬编码Width=2改为GetHandleSize()

移除BGA EdgeDot的硬编码2x2覆盖

图像<1000px: 2x2, 1500-2000px: 4x4, 3000px+: 6x6
2026-07-20 16:08:33 +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 c218209ce3 feat: 16位图像流水线处理及保存功能
PipelineExecutionService: 新增16位处理链路ExecutePipelineAsync16, 返回ResultImage16字段

PipelineEditorViewModel: 新增ResultImage16属性, 支持16位结果存储

MainViewportService: 新增LatestResultImage16属性

ViewportPanelView.xaml.cs: 新增16位TIFF保存功能(Save16BitTiffToFile)
2026-07-20 15:45:19 +08:00
wei.lw.li 6e07e255b6 fix: 修复InspectionMarkOverlay拦截下层鼠标事件导致测量工具无法拖拽
问题:InspectionMarkOverlay以z-index=20000覆盖在mainCanvas最上层,Background=Transparent+IsHitTestVisible=true全区域命中鼠标测试,导致注册在_measureOverlay子元素上的测量拖拽处理器永远收不到事件

修复:默认状态Background=null, IsHitTestVisible=false;仅当ActiveTool!=None时启用命中测试和透明背景
2026-07-20 15:45:07 +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
ZHANG Zhengxuan b862b31a05 已合并 PR 181: 代码结构的整理
进一步对代码框架进行规范化,按照 Service ,Models, ViewModel 和View层进行整理;解决方案统一使用 x64 ; Release文件夹的更新

具体功能点:
1、匹配工件位姿并自动补偿后续检测 ROI √
3、简化显示:CNC 树仅展示已启用的流水线步骤,未启用(停用)的算子不再列出 √
4、修复算子显示名称不统一的问题,都用右侧属性面板的名称 √
5、CNC编码窗体名称不统一,保持与右侧属性面板中算子名称 √
6、优化 Models的组织结构 √
7、清理 Service层进行拆分服务  √
8、架构4层清理 √
2026-07-17 18:46:54 +08:00
zhengxuan.zhang 28afe04422 Merge branch 'Develop/XP' into Feature/TURBO-002-Cnc 2026-07-17 13:14:19 +08:00
zhengxuan.zhang e4f1cc2e05 refactor: 迁移剩余对话框到 IApplicationDialogService,拆分 MatrixEditorViewModel 与 MainViewModel
对话框迁移(全部采用可选构造参数 dialogs,保持向后兼容):
- SettingsViewModel:9 处 MessageBox + 4 处文件/文件夹对话框
- InspectionMapViewModel:4 处 HexMessageBox + 3 处 MessageBox(含三态确认)+ 1 处 OpenFileDialog
- NavigationPropertyPanelViewModel:SaveFileDialog/OpenFileDialog/MessageBox(导航图保存、标定加载)
- Debug 目录(SnapshotManagerViewModel/EventLogViewModel/SnapshotDiffViewModel):全部 MessageBox 与文件对话框
- IApplicationDialogService 新增 ConfirmThreeWay 方法及 SelectOpenFile/SelectSaveFile 可选 initialDirectory 参数

God Class 拆分:
- 从 MatrixEditorViewModel 提取 MatrixOffsetCalculator(推荐示教点计算、自动生成偏移算法,纯静态计算无 UI 依赖)
  和 MatrixExecutionCoordinator(模板程序加载与执行编排,替代内联 try-catch)
- 从 MainViewModel 提取 WindowLauncherService,统一管理原 18+ 个 private Window 单例字段,
  提供 ShowOrActivate/ShowOrActivateVisible/Show/CloseIfOpen 四种窗口生命周期模式

文档:
- 修正 doc/代码评审.md 第二、三阶段标题状态矛盾及不准确的全称断言,新增第四阶段跟踪剩余工作

资源文件:
- Resources.resx(默认/zh-CN/zh-TW/en-US)新增约 100+ 本地化键,覆盖上述对话框迁移涉及的消息、标题与文件过滤器

测试:
- 同步更新 PipelineEditorViewModelTests/PipelinePropertyTests/CncEditorViewModelTests/MatrixEditorViewModelTests 的构造签名
- 全量 386 个测试通过,无回归
2026-07-17 13:04:11 +08:00
zhengxuan.zhang 5dd3d9e8f5 完成代码评审第三阶段整改 2026-07-17 10:38:21 +08:00
zhengxuan.zhang c3b2b507ad 完成代码评审第二阶段修复 2026-07-17 10:04:06 +08:00
zhengxuan.zhang 547f0aa777 修复代码评审中的高风险问题 2026-07-17 09:41:29 +08:00
zhengxuan.zhang cba425a376 对矩阵池页面进行紧凑布局 2026-07-17 09:28:17 +08:00
zhengxuan.zhang 83446a9d95 补全安全认证模型合并 2026-07-16 17:52:34 +08:00
zhengxuan.zhang 7ab56b0d8c 本轮修复全部完成,9项任务都已落地并通过编译验证。总结:
已修复(7个文件):

内存泄漏:ViewportPanelView.xaml.cs、MainViewModel.cs、MainWindow.xaml.cs 中 EventAggregator.Subscribe(..., true) 的 keepSubscriberReferenceAlive 全部改为具名方法订阅 + SubscriptionToken 记录,并在 Cleanup()/Unloaded/OnClosed 时反订阅。

MainViewModel.Cleanup() 补全:现在会反订阅全部 5 个 EventAggregator 事件、_mainViewportService.StateChanged、_recordingService.StateChanged,并停止全部 3 个 Timer。

DumpService 双实例问题:新增 StopEarlyDumpServiceIfSuperseded(),在 DI 容器就绪、CommonModule 内部的 IDumpService 单例接管保护职责后,主动停止并释放提前启动的 _earlyDumpService。

App.xaml.cs OnExit() 重复代码:提取 TryDispose<T>() 帮助方法,9 段"Resolve→Dispose→日志"模板压缩为 9 行调用。

日志占位符 bug:MainViewModel.cs 中 3 处(轴回原点/射线源暖机/一键暖机异常)重复占位符导致 Serilog 渲染中断的问题已修复(已用 Serilog 官方 GitHub issue 验证过这确实是真实 bug)。

空 catch{}:4 个文件共 9 处,全部补充了日志记录。过程中发现并修正了自己引入的一个 bug(ILoggerService.Debug/Warn 不接受 Exception 参数,已改用 {Reason} 占位符)。

AppStateService.Dispose():补上了遗漏的 CncExecutionStateChanged = null。
2026-07-16 17:51:23 +08:00
zhengxuan.zhang 57d4532945 简化结构 2026-07-16 17:39:25 +08:00
zhengxuan.zhang 9d09ca45af 已完成合并,Services\Inspection 从 28 个文件减少到 25 个。
具体调整:
IInspectionDefinitionRepository 合入 [JsonInspectionDefinitionRepository.cs](D:/XplorePlane/XplorePlane/Services/Inspection/JsonInspectionDefinitionRepository.cs)
采集模式、配置和异常类型合入 [InspectionExecutionContracts.cs](D:/XplorePlane/XplorePlane/Services/Inspection/InspectionExecutionContracts.cs)
BgaTargetIdGenerator 合入 [BgaTileResultMerger.cs](D:/XplorePlane/XplorePlane/Services/Inspection/BgaTileResultMerger.cs)
删除原来的三个独立文件
类型名称、命名空间、DI 注册和调用方式均未改变
2026-07-16 17:33:00 +08:00
zhengxuan.zhang 348d2341e0 统一库级别的x64; 更新 Release 2026-07-16 17:27:34 +08:00
zhengxuan.zhang 7202817a0c 按建议完成四层目录统一,并同步调整命名空间和所有引用。
主要结果:
Cnc/Matrix 已统一。
Inspection/{Archive, Documentation, Results, Pool} 已统一。
Main/{Viewport, Overlay, Recording} 已统一。
Hardware/{Camera, Coordinate} 已统一。
权限、账户、登录统一归入 Security。
2026-07-16 17:10:29 +08:00
zhengxuan.zhang cea810d4bd 删除重复的 ImagePersistenceService、旧图像结果模型及过时测试。
图像保存统一交由检测归档服务处理。
清除 CncExecutionService 中无实际用途的 PositionResult 汇总逻辑。
新增 IInspectionArchiveReader,报表视图只依赖归档读取能力,降低耦合。
同步清理和调整相关单元测试、属性测试。
已确认旧持久化服务相关引用为 0。
2026-07-16 16:45:35 +08:00
zhengxuan.zhang 19468d58ec 移除 CncExecutionService 对旧 IImagePersistenceService 的构造依赖及 DI 注册。[CncExecutionService.cs (line 93)](/D:/XplorePlane/XplorePlane/Services/Cnc/CncExecutionService.cs:93)
保留旧实现作为独立兼容工具,不再进入 CNC 运行链路。
删除 MatrixOrchestrationService 未使用的 IInspectionResultStore 依赖。[MatrixOrchestrationService.cs (line 45)](/D:/XplorePlane/XplorePlane/Services/Matrix/MatrixOrchestrationService.cs:45)
报告查看器改为通过统一归档门面查询结果。[InspectionReportViewerViewModel.cs (line 25)](/D:/XplorePlane/XplorePlane/ViewModels/Cnc/InspectionReportViewerViewModel.cs:25)
检查图运行上下文也统一使用 IInspectionArchiveService。[InspectionRunDocumentationContext.cs (line 28)](/D:/XplorePlane/XplorePlane/Services/InspectionDocumentation/InspectionRunDocumentationContext.cs:28)
同步调整相关测试构造代码。
2026-07-16 16:31:57 +08:00
zhengxuan.zhang 08aecdd039 清理完成,编译通过。ViewModel 从约 1566 行精简到 1305 行,移除了所有与已删除 ROI 面板相关的死代码:
11 个字段(_previewImage、_selectedEditableRegion、_isDrawingPolygon 等)
9 个属性(PreviewImage、IsDrawingPolygon、RegionInstruction、ResultOverallStatus 等)
3 个集合(EditableRegions、ResultRows、VisibleResultRows)
5 个命令(CaptureReferenceCommand、AddRectangleRegionCommand 等)
10+ 个方法(CaptureReferenceAsync、AddRectangleRegion、StartPolygonRegion、AddPolygonPoint、ApplyResultFilter 等)
2 个 using 引用(System.Windows.Media.Imaging、XP.ImageProcessing.RoiControl.Models)
2026-07-16 16:23:34 +08:00
zhengxuan.zhang a276d71da7 已完成 XplorePlane/Models 模块化整理:
Cnc:CNC、矩阵、图像采集、测量模型
Debug:调试面板模型
ImageProcessing:流水线模型
Inspection:检测定义模型
InspectionDocumentation:检测结果、文档与追溯模型
Main:导航及全局状态模型
Recipe:配方模型
Setting:用户、权限、密码及认证模型
2026-07-16 16:12:16 +08:00
zhengxuan.zhang f996798560 feat(matrix): 优化矩阵示教与位置管理
- 将 2×2 矩阵推荐示教点调整为对角位置 1、4
- 根据对角示教坐标自动推算其余位置
- 支持右键记录任意矩阵位置的实时坐标
- 支持通过右键菜单启用或禁用指定位置
- 使用不同颜色区分已示教、当前、自动生成和禁用状态
- 持久化补充示教点并完善矩阵专项测试
2026-07-16 16:06:15 +08:00
zhengxuan.zhang e03affe868 CNC编码窗体名称不统一,保持与右侧属性面板中算子名称 2026-07-16 15:55:23 +08:00
zhengxuan.zhang a9e4415276 feat(matrix): 统一示教坐标单位并优化默认布局
- 将矩阵编排默认布局调整为 2×2
- 记录位置时实时读取运动控制 StageX/StageY 坐标
- 统一示教、预览和自动推算坐标单位为 mm
- 坐标与偏移统一保留小数点后 3 位
- 增加矩阵布局、实时坐标记录及单位换算测试
2026-07-16 15:48:59 +08:00
ZHANG Zhengxuan 71cbf8f765 已合并 PR 176: 累计功能更新
1、各模块启用耗时的分析,启动优化 — Lazy<T> 延迟加载图像处理服务;增加启动页面
2、复位,双击移动功能;
3、CNC存储结构的升级,增加了一些变量
4、矩阵编排逻辑的调整,引入了手动交互部分
5、主界面图像预览区 鼠标左键事件重合的问题的修复
6、CNC移除监控页面和相关逻辑,运行时也显示 编排的窗体;移除运行监控页面
7、移除标记图的标记的图像和备注按钮
2026-07-16 15:35:51 +08:00
zhengxuan.zhang 8ef120bd9d Merge branch 'Feature/TURBO-002-Cnc' into Feature/TURBO-002-Cnc 2026-07-16 15:27:02 +08:00
zhengxuan.zhang 915af508a4 Merge branch 'temp' into Feature/TURBO-002-Cnc 2026-07-16 15:26:21 +08:00
zhengxuan.zhang 5e0d9ee38d Merge branch 'Feature/TURBO-002-Cnc' 2026-07-16 15:24:32 +08:00
zhengxuan.zhang 9fec3d233e Merge branch 'Feature/TURBO-002-Cnc' into Feature/TURBO-002-Cnc 2026-07-16 15:02:54 +08:00
zhengxuan.zhang e352bd61aa 简化显示:CNC 树仅展示已启用的流水线步骤,未启用(停用)的算子不再列出 2026-07-16 14:53:27 +08:00
zhengxuan.zhang fccb9022b4 Merge branch 'Develop/XP' into Feature/TURBO-002-Cnc
# Conflicts:
#	XplorePlane/App.config
2026-07-16 14:43:44 +08:00
LI Wei.lw d463a42641 已合并 PR 174: 排除检测区域及修复画中画
1.空隙检测增加排除检测区域
2.修复导航相机PiP青框显示异常及载物台运动超限问题
2026-07-16 14:39:36 +08:00
zhengxuan.zhang 9c8310e769 在 CNC 树里选中一个锚点节点(或不选,插入到末尾),点击"模板对齐"按钮,会新建一个默认命名为"对齐N"的节点。
选中该节点后,右侧会显示专属编辑器(TemplateMatchAlignmentNodeEditorView),可以:
选择模板来源图 → 框选模板区域 → 学习模板(自动保存模板文件与模型)
在示教图上圈定检测 ROI 多边形(右键完成,至少 3 个顶点)
做一次自匹配确定基准位姿,或者用"使用模板中心作为基准"降级方案
配置匹配阈值/模式/角度容差/最大匹配数
配置校正策略:ROI 补偿模式 / 置信度下限 / 平移旋转容差 / 失败处理策略(中止、暂停等待、跳过继续)
运行 CNC 时,该节点会自动对当前采集图做模板匹配,算出与基准位姿的偏差,并把变换后的 ROI 自动写入其后紧跟的检测模块节点参数里,实现工件位姿自动校正
2026-07-16 13:52:48 +08:00
zhengxuan.zhang 850acc0095 fix(inspection-pool): 修复 BGA Tile 配置与主界面预览不同步
- 将检测类型、BGA 行列、Pitch、编号方式及生成步距改为即时绑定
- BGA 网格参数变化后提示重新生成 Tile,避免沿用旧映射
- 生成 2×2 Tile 后立即发布检测池预览并刷新主界面图层
- 增加四块 Tile 预览发布与旧映射提示的回归测试
- 将本地调试射线源切换为 Simulated 全仿真模式
2026-07-16 13:06:20 +08:00
zhengxuan.zhang 5c769ac9ce feat(inspection): add main viewport visualization for inspection pool
- 保留检测池参数配置独立弹窗
- 在主界面实时显示 2×2 Tile 检测图层
- 增加主界面“开始检测”和“设置”入口
- 显示待检测、检测中、PASS、FAIL、MISS、ERROR 状态
- 实时同步 Overview、Tile 检测和 Restore Position 进度
- 检测完成后恢复全局图并显示聚合统计
- 补充检测池运行进度事件及序列测试
- 更新矩阵池使用操作文档
2026-07-16 11:30:52 +08:00
zhengxuan.zhang afc3d9d345 docs(inspection): describe main viewport pool workflow 2026-07-16 11:27:36 +08:00
zhengxuan.zhang 7eae3794ff feat(inspection): visualize pool execution in main viewport 2026-07-16 11:26:52 +08:00
TANG Haowei 143f9327ae Merged PR 175: 合并Develop:CT扫描界面更改;增加面内偏转
1:CT扫描界面更改,新建/加载/编辑;用户控件模式
2:增加面内偏转;俯仰;偏摆检测
2026-07-16 11:09:27 +08:00
zhengxuan.zhang 23dfd10c3e refactor(inspection): reorganize pool workflow layout 2026-07-16 10:57:03 +08:00
Tanghaowei c8ef7e1a04 #T:ini文件增加记录扫描位置 2026-07-16 10:46:20 +08:00
Tanghaowei 52ac91f790 #T:提交测试编码问题。 2026-07-16 10:42:23 +08:00
zhengxuan.zhang 2ce1d8bd16 fix(inspection): use one-way result summary bindings 2026-07-16 10:37:22 +08:00
zhengxuan.zhang 2a761a2548 docs(inspection): update remediation checklist 2026-07-16 10:33:15 +08:00