3. 客观评测工具

做图像质量调优,光靠眼睛看肯定不行。你得有数据说话。

这一章,我带你过一遍我们日常最常用的几款客观评测工具。从商业软件Imatest,到我们自己撸的Python脚本,再到瑞芯微内部的工具链。说白了,就是告诉你「怎么测」、「用什么测」、「测完怎么看结果」。

3.1 Imatest软件操作入门

Imatest是图像质量评测领域的「老大哥」。我入行那会儿,公司花了好几万美金买License,肉疼得很。但用下来确实值,它的算法库很成熟,ISO 12233、ISO 15739这些标准都直接支持。

核心模块速览:

  • SFRplus —— 测MTF(锐度),最常用。拍一张斜边图卡,直接出MTF50、MTF50P。
  • Colorcheck —— 测色彩精度。用24色卡,输出ΔE、饱和度、色相偏差。
  • Stepchart —— 测动态范围(DR)。拍灰阶卡,算信噪比和DR。
  • Uniformity —— 测均匀性。拍一张均匀白板,看四角亮度衰减。

我的操作习惯:

  1. 先拍图卡。注意光照要均匀,图卡要占画面1/3以上。
  2. 打开Imatest,选对应模块。比如测锐度,点SFRplus。
  3. 加载图片,软件会自动识别ROI。如果识别不准,手动拉一下框。
  4. 点Run,等几秒出结果。看MTF50曲线,中心值一般要>0.5才算及格。
  5. 导出CSV报告,方便后续对比。

小技巧: 我习惯把Imatest的「Region of Interest」设置成固定大小。这样不同批次拍的图,ROI一致,数据才可比。不然每次自动识别位置不一样,MTF值能差0.1。

注意: Imatest对RAW图支持最好。如果你用JPEG测,压缩噪声会影响MTF结果。我建议一律用RAW或DNG输入。

3.2 Python脚本自动化评测(rawpy + matplotlib)

Imatest虽好,但批量处理几百张图时,手动点鼠标能点到手抽筋。这时候就得靠Python了。

我常用的组合是 rawpy 读RAW,matplotlib 画图。自己写脚本,想怎么测就怎么测。

一个简单的MTF计算脚本示例:

import rawpy
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import sobel

# 读取RAW图
raw = rawpy.imread('test_raw.dng')
rgb = raw.postprocess(use_camera_wb=True)

# 转灰度
gray = np.mean(rgb, axis=2)

# 取ROI(假设中心区域)
roi = gray[1000:1200, 1500:1700]

# 计算边缘梯度(Sobel算子)
edges = sobel(roi)

# 沿垂直方向投影,得到边缘扩散函数(ESF)
esf = np.mean(edges, axis=1)

# 对ESF做差分,得到线扩散函数(LSF)
lsf = np.diff(esf)

# 对LSF做FFT,得到MTF
mtf = np.abs(np.fft.fft(lsf))
mtf = mtf[:len(mtf)//2]  # 取一半
mtf = mtf / mtf[0]       # 归一化

# 找MTF50
mtf50_idx = np.where(mtf <= 0.5)[0][0]
mtf50 = mtf50_idx / len(mtf) * 0.5  # 归一化到Nyquist频率

print(f'MTF50: {mtf50:.3f} cycles/pixel')

# 画图
plt.figure(figsize=(8,4))
plt.plot(mtf, label='MTF')
plt.axhline(y=0.5, color='r', linestyle='--', label='MTF50')
plt.axvline(x=mtf50_idx, color='g', linestyle='--', label=f'MTF50={mtf50:.3f}')
plt.xlabel('Spatial Frequency (cycles/pixel)')
plt.ylabel('MTF')
plt.legend()
plt.grid(True)
plt.show()

脚本能做的事:

  • 批量读RAW,自动裁ROI
  • 算MTF、SNR、动态范围
  • 画曲线图、热力图
  • 输出Excel报告

我曾经用这套脚本,一晚上处理了5000张图。要是用Imatest手动点,得点三天。

避坑指南: rawpy读RAW时,注意白平衡参数。如果你用相机默认白平衡,不同光源下结果差异很大。我习惯固定用D65白平衡,保证一致性。

3.3 瑞芯微内部评测工具链介绍

瑞芯微内部有一套自己的评测工具链。说实话,刚开始我觉得「有Imatest和Python就够了」,后来发现内部工具链确实有它的独到之处。

工具链组成:

工具名称 用途 我的评价
RKIQTool ISP参数调优、实时预览 调优必备,能实时看效果
RKIQAnalyzer 批量分析RAW/JPEG,出报告 比Imatest快,但算法精度稍差
RKIQBench 自动化跑分,对比竞品 适合做竞品分析
RKIQLogger 记录调优过程,回放参数 方便复现问题

我的工作流:

  1. 用RKIQTool连上开发板,实时调ISP参数。调完一版,拍RAW存下来。
  2. 用RKIQAnalyzer批量跑RAW,看MTF、SNR、色彩偏差。如果指标不达标,回RKIQTool继续调。
  3. 调得差不多了,用RKIQBench跑一轮竞品对比。看看我们比海思、安霸差在哪。
  4. 所有调优过程用RKIQLogger记录下来。万一后面出问题,能回溯是哪一步改坏了。

注意: 内部工具链的算法和Imatest不完全一致。比如MTF计算,Imatest用ISO 12233标准,RKIQAnalyzer用简化版。所以同一个RAW,两个工具出的MTF50可能差0.05。我建议以Imatest为准,内部工具只做快速筛选。

下面这张图,是我自己总结的评测工具选择逻辑:

评测工具选择逻辑 输入:RAW/JPEG 批量处理 > 100张? 单张/少量分析? Python脚本(rawpy+matplotlib) RKIQAnalyzer 快速筛选 Imatest 精确分析 RKIQTool 实时调优 输出评测报告

嗯,这张图其实是我自己踩坑踩出来的。刚开始我不管三七二十一,全用Imatest。后来发现批量处理时,Imatest的License限制并发数,跑500张图要开5个实例,慢得要死。换成Python脚本后,速度提升了10倍。

总结一下我的建议:

  • 调优阶段:用RKIQTool实时调,配合Imatest做精确验证。
  • 批量验证阶段:用Python脚本自动化跑,RKIQAnalyzer做快速筛选。
  • 竞品对比阶段:用RKIQBench,它内置了竞品数据库。

工具没有的好坏,关键看你怎么用。我见过有人用Imatest也能玩出花来,也有人用Python脚本写出比商业软件还准的算法。核心是理解每个工具的优缺点,然后组合起来用。