Skip to content

Repository files navigation

图片对比软件 (ImageComparison)

一款基于 WPF (.NET 9) 的桌面级像素级图片对比工具,采用 odiffYIQ 感知色彩差异算法,按人眼视觉敏感度判定图片差异,适用于 UI 回归测试、设计稿比对、截图审查等场景。

功能特性

对比核心

  • YIQ 感知色彩空间对比 —— 按人眼对亮度最敏感的特性加权判定差异,过滤肉眼无感的微小变化
  • 差异阈值调节(0~1.00),实时重新计算
  • 忽略抗锯齿 —— 智能排除图像边缘的平滑过渡像素,减少误报(移植自 pixelmatch 算法)
  • 忽略区域 —— 在图上框选任意矩形区域,排除时间戳、广告位等动态内容后再对比

视图模式

模式 说明
并排对比 左右两个独立查看器,同步缩放与拖拽
叠加混合 两图半透明叠加,错位处即差异
差异高亮 灰度底图 + 红色标记差异像素
擦除对比 可拖动分界线,左看图1、右看图2

辅助分析

  • 差异热力图 —— 按严重程度着色:黄(轻微) → 橙 → 红 → 深红(严重)
  • 差异导航 —— 自动检测差异块,◀ 3/17 ▶ 逐处跳转并居中显示
  • 实时像素信息 —— 鼠标悬停同时显示两图同一坐标的 X/Y、灰度、RGB 值
  • 放大镜 —— 圆形放大镜跟随光标,左右半区分别显示两图同位置细节

操作体验

  • 同步缩放(以鼠标位置为锚点)+ 同步拖拽平移
  • 尺寸不同的两图自动缩放对齐后对比
  • 最近 10 对图片记录,下拉快速重载
  • 窗口置顶、现代化扁平 UI

输出

  • 导出差异图 —— PNG 格式
  • 导出对比报告 —— 单张 PNG 拼合原图1 + 原图2 + 差异图 + 统计信息

快捷键

按键 功能
Tab 切换视图模式
F 适合窗口
+ / - 缩放
方向键 平移(按住 Ctrl 加速)
PageUp / PageDown 上/下一处差异

构建与运行

环境要求:Windows 10 及以上、.NET 9 SDK

git clone https://github.com/Mike-CD-Csharp/ImageCompare.git
cd ImageCompare
dotnet run --project ImageComparison

发布单文件版本:

dotnet publish ImageComparison -c Release -r win-x64 --self-contained false

算法说明

两图的每个像素转换到 NTSC YIQ 色彩空间后计算加权平方距离:

Δ = 0.5053·Δy² + 0.299·Δi² + 0.1957·Δq²

判定不同像素的条件:

Δ > 35215 × threshold²

其中亮度分量 Y 权重最高(0.5053),符合人眼对明度变化远比色度敏感的视觉特性——因此灰度上的细微改动更容易被检出,而肉眼难辨的色度抖动会被阈值自然过滤。

半透明像素先按 alpha 与白色混合后再比较。

项目结构

ImageComparison/
├── MainWindow.xaml          # 界面布局与样式(现代扁平化设计系统)
├── MainWindow.xaml.cs       # 交互逻辑:视图模式、同步缩放平移、区域选择等
├── PerceptualDiffEngine.cs  # 核心算法:YIQ 差异、抗锯齿检测、差异区域提取
├── app.ico                  # 应用图标
└── ImageComparison.csproj   # 项目配置 (net9.0-windows)

致谢

  • odiff(MIT License)—— YIQ 差异算法与常数来源
  • pixelmatch(ISC License)—— 抗锯齿检测思路来源

License

MIT

About

基于 WPF 的像素级图片对比工具(YIQ 感知算法),免安装单文件版可用

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages