Commit Graph

80 Commits

Author SHA1 Message Date
wei.lw.li bbb3bf5326 fix: 修复算子代码审查发现的关键问题
1. 资源泄漏:HighPass/LowPass滤波器Image对象未dispose(改用using+Clone)
2. 线程安全:GammaProcessor LUT从实例字段改为方法局部变量
3. 资源泄漏:BandPassFilter补充floatImage和mask的Dispose
4. 边界情况:ThresholdProcessor Otsu16初始阈值改为中值(防全黑/全白)
5. 异常安全:RemoveOutliers的medianImage用try-finally保证释放
6. 空引用:SuperResolution InputMetadata空检查
2026-08-17 09:40:31 +08:00
wei.lw.li 3ffcb2452a refactor: 移除'其他'分类,算子按功能归类
- FilmEffectProcessor → 图像增强(窗宽窗位本质是增强/显示调整)
- PseudoColorProcessor → 图像变换(伪色彩映射是可视化变换)
- 删除空的'其他'文件夹
2026-08-12 09:32:32 +08:00
wei.lw.li 7768c086ea feat: 图像增强/变换算子标记高级参数+默认值优化
高级参数标记:Contrast(Contrast,Brightness,UseCLAHE,ClipLimit)、
Gamma(Gain)、Sharpen(Method,KernelSize)、Emboss(BlendRatio,GrayOffset)、
HistogramEq(Method,TileSize)、HDR(Method,Saturation,SigmaSpace,SigmaColor,Bias)、
Hierarchical(BaseGain,ClipLimit)、Retinex(Method,Sigma1/2/3,Offset)、
Rotate(ExpandCanvas,BackgroundValue,Interpolation)

默认值优化(适配平面CT DR图像):
- Sharpen: Laplacian→UnsharpMask(对噪声更温和)
- HistogramEq: Global→CLAHE(局部对比度更优)
- Contrast: AutoContrast默认开启
2026-08-12 09:25:34 +08:00
wei.lw.li d5d964d115 feat: 滤波/边缘检测算子标记高级参数
滤波类:GaussianBlur(Sigma)、Bilateral(SigmaSpace)、
BandPass(FilterType,Order)、ShockFilter(Dt)
边缘检测:Sobel(Direction,KernelSize,Scale)、
HorizontalEdge(Method,Sensitivity)、Kirsch(Scale)
2026-08-12 09:25:08 +08:00
wei.lw.li 3677bb85a4 feat: 新增高级参数折叠面板(IsAdvanced)框架支持
- ProcessorParameter新增IsAdvanced属性
- ProcessorParameterVM导出IsAdvanced供XAML绑定
- PipelineNodeViewModel新增HasAdvancedParameters
- PipelineEditorView增加'高级参数'Expander(默认折叠)
- 修复Expander内FontWeight继承导致的字体样式不一致
2026-08-12 09:24:36 +08:00
wei.lw.li d4bd69fb1f fix: 中值滤波16位支持-转float+限制kernel最大值为5
OpenCV MedianBlur不支持CV_16U,CV_32F仅支持kernel 3和5。
修复:16位图像转32F再执行MedianBlur;KernelSize最大值限制为5。
2026-08-11 16:47:00 +08:00
wei.lw.li 561d1dd477 fix: 修复中值滤波和去离群点算子在16位图像+大核时的崩溃
OpenCV MedianBlur在kernel>5时仅支持CV_8U,不支持CV_16U。
修复方式:16位图像且kernel>5时,先转float执行MedianBlur再转回。
涉及文件:MedianFilterProcessor、RemoveOutliersProcessor。
2026-08-11 16:34:59 +08:00
wei.lw.li bd7c8e422a fix: 修复双边滤波对16位图像执行失败的问题
OpenCV BilateralFilter仅支持8U和32F格式,16位图像(CV_16U)直接传入会抛异常。
修复方式:16位图像先转换为32F执行滤波,再转回原始位深。
2026-08-11 16:29:46 +08:00
zhengxuan.zhang 219263cd0e 升级16位阈值参数并完善算子多语言支持 2026-08-05 17:01:35 +08:00
zhengxuan.zhang 0ec969da9b 完善灰度波峰分层着色算子 2026-08-05 16:53:47 +08:00
zhengxuan.zhang 5962717ded Merge branch 'Feature/TURBO-003-Cnc' Feature/TURBO-002-Cnc
Please enter a commit message to explain why this merge is necessary,
2026-08-05 10:19:25 +08:00
LI Wei.lw 2e1075c6c2 Merged PR 216: 修复部分算子中英文显示问题,新增离群点去除算子
1.16位→8位图像显示转换改为固定0-65535线性映射,保证输入输出可横向对比真实灰度变化
2.删除已废弃的旧资源文件(XP.ImageProcessing.Processors/Resources)
3.新增RemoveOutliersProcessor(去除离群点算子),支持中英文,用于修复探测器坏点/坏线
2026-08-05 09:47:01 +08:00
zhengxuan.zhang fd9d863494 feat: add automatic bga ball detection 2026-08-04 14:39:59 +08:00
wei.lw.li c197c19e26 merge: 合并 Feature/LanguageSupport 到 Develop/XP(所有冲突使用Development版本) 2026-08-03 11:10:26 +08:00
zhengxuan.zhang 82de9bbf7d feat: BGA空洞率 RoiMode=None 添加全图检测日志 2026-07-29 11:47:19 +08:00
XplorePlane Developer 22b5421937 fix: 修复检测池向导重构引入的编译错误 2026-07-27 16:25:28 +08:00
wei.lw.li 5501952156 feat: 新增RemoveOutliersProcessor(去除离群点算子),支持中英文,用于修复探测器坏点/坏线 2026-07-27 15:50:15 +08:00
wei.lw.li 56669c28dd 删除已废弃的旧资源文件(XP.ImageProcessing.Processors/Resources) 2026-07-27 15:26:44 +08:00
wei.lw.li c87f1cbafb fix: 将16位→8位显示转换从自适应min-max拉伸改为固定0-65535线性映射,保证输入输出可横向对比真实灰度变化 2026-07-27 13:13:35 +08:00
wei.lw.li 8cedbf51cb Revert "fix(i18n): QFN一体化检测参数本地化 + 清理未使用资源"
This reverts commit 37fd75033d.
2026-07-27 11:34:11 +08:00
wei.lw.li 37fd75033d fix(i18n): QFN一体化检测参数本地化 + 清理未使用资源 2026-07-27 10:59:24 +08:00
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