3. 客观评测工具
做图像质量调优,光靠眼睛看肯定不行。你得有数据说话。
这一章,我带你过一遍我们日常最常用的几款客观评测工具。从商业软件Imatest,到我们自己撸的Python脚本,再到瑞芯微内部的工具链。说白了,就是告诉你「怎么测」、「用什么测」、「测完怎么看结果」。
3.1 Imatest软件操作入门
Imatest是图像质量评测领域的「老大哥」。我入行那会儿,公司花了好几万美金买License,肉疼得很。但用下来确实值,它的算法库很成熟,ISO 12233、ISO 15739这些标准都直接支持。
核心模块速览:
- SFRplus —— 测MTF(锐度),最常用。拍一张斜边图卡,直接出MTF50、MTF50P。
- Colorcheck —— 测色彩精度。用24色卡,输出ΔE、饱和度、色相偏差。
- Stepchart —— 测动态范围(DR)。拍灰阶卡,算信噪比和DR。
- Uniformity —— 测均匀性。拍一张均匀白板,看四角亮度衰减。
我的操作习惯:
- 先拍图卡。注意光照要均匀,图卡要占画面1/3以上。
- 打开Imatest,选对应模块。比如测锐度,点SFRplus。
- 加载图片,软件会自动识别ROI。如果识别不准,手动拉一下框。
- 点Run,等几秒出结果。看MTF50曲线,中心值一般要>0.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 | 记录调优过程,回放参数 | 方便复现问题 |
我的工作流:
- 用RKIQTool连上开发板,实时调ISP参数。调完一版,拍RAW存下来。
- 用RKIQAnalyzer批量跑RAW,看MTF、SNR、色彩偏差。如果指标不达标,回RKIQTool继续调。
- 调得差不多了,用RKIQBench跑一轮竞品对比。看看我们比海思、安霸差在哪。
- 所有调优过程用RKIQLogger记录下来。万一后面出问题,能回溯是哪一步改坏了。
注意: 内部工具链的算法和Imatest不完全一致。比如MTF计算,Imatest用ISO 12233标准,RKIQAnalyzer用简化版。所以同一个RAW,两个工具出的MTF50可能差0.05。我建议以Imatest为准,内部工具只做快速筛选。
下面这张图,是我自己总结的评测工具选择逻辑:
嗯,这张图其实是我自己踩坑踩出来的。刚开始我不管三七二十一,全用Imatest。后来发现批量处理时,Imatest的License限制并发数,跑500张图要开5个实例,慢得要死。换成Python脚本后,速度提升了10倍。
总结一下我的建议:
- 调优阶段:用RKIQTool实时调,配合Imatest做精确验证。
- 批量验证阶段:用Python脚本自动化跑,RKIQAnalyzer做快速筛选。
- 竞品对比阶段:用RKIQBench,它内置了竞品数据库。
工具没有的好坏,关键看你怎么用。我见过有人用Imatest也能玩出花来,也有人用Python脚本写出比商业软件还准的算法。核心是理解每个工具的优缺点,然后组合起来用。