图像处理

图像处理功能已被Simatest取代,后者功能更强大——它可以模拟完整的相机系统。以下是关键链接。 [我们不打算弃用图像处理功能。]

Simatest:概述– Simatest 的简要介绍。推荐给初学者。

Simatest ISP/摄像头模拟器——使用说明和参考——非常详细

Simatest 示例– Simatest 的使用示例。对比模拟结果和测量结果。比这篇长文更易于阅读。

图像传感器噪声——测量与建模——使用原始文件进行图像传感器动态范围和Simatest 分析

Imatest图像处理模块模拟多种图像处理操作,包括

您可以通过切换处理前后的图像,立即观察这些操作的可见效果,并了解处理如何影响包括SSIM 、 PSNR和MTF在内的多项指标。您还可以执行光学字符识别 (OCR)以及人脸和人物检测。此外,还提供了一些实用工具,例如,您可以将图像保存为未去马赛克(模拟拜耳 RAW)格式,用于测试去马赛克算法。

图像处理适用于任何图像(测试图表或其他图像)或相同大小和场景内容的成对图像(通常源自同一图像捕获)。

图像处理还可以批量处理图像,自动读取、处理和保存批量图像。

图像处理最初是作为一款教育应用而设计的,旨在帮助用户了解常见的图像退化和处理方式如何影响测量结果和图像外观。它的灵感来源于Majid Rabbani在图像传感器和电子成像会议上讲授的图像处理短期课程。

Imatest 5.0 的增强功能

运行图像处理

从“实用工具”菜单打开“图像处理” 。这将打开初始图像处理窗口,其中包含基本说明,并且许多按钮呈灰色显示(以避免混淆)。这些说明可能会定期更新。

图像处理窗口打开。点击图片查看完整尺寸。

读取输入图像文件。可以使用任何类型的图像,不一定是测试图表。 (1)位于按钮上,因为它是第一步。您可以现在或稍后裁剪图像——裁剪设置将被保留。

批量读取和处理文件。如果选择了多个文件,程序将读取、处理这些文件,并使用已保存的设置自动将它们保存为一个批次。(大多数输出结果将不可见,但您当然可以打开已保存的文件进行查看。)选择文件后,将打开右侧所示的对话框。名为root_file_name.ext的文件将保存为root_file_name - ext -improc.png。

在批量处理图像之前,您应该先处理单个图像以确保设置正确。请注意,批量计算并未针对速度进行优化,因此批量处理通常每个图像需要几秒钟,不适用于处理大量图像。

接下来,要么

完成上述任一操作后,所有按钮均会启用。您可以快速切换原始图像和处理后的图像,显示两者的对比测量结果,或保存处理后的图像。准备就绪后,您可以从原始图像或处理后的图像开始,运行另一组图像处理操作。

这里展示的是散落硬币图表(已裁剪)的图像处理界面。图中显示的是输入图像(质量良好,但有一些可见噪点)。

图像处理_洒落的硬币_输入图像处理窗口显示散落的硬币输入图像
放大显示(仅供显示)

裁剪和缩放——裁剪/缩放操作有两种不同的类型:仅用于显示的缩放和用于计算(以及显示)的裁剪。

图像处理模块

如前所述,按下“更新计算”按钮后,图像处理会从左侧列的顶部向下进行。一些增强步骤,特别是锐化掩蔽,通常会在相机处理 JPEG 图像时执行。但在Imatest中使用dcraw或通用读取原始图像进行原始图像去马赛克时,不会执行这些步骤。

以下列出了当前可用的处理函数。大多数是标准的 Matlab 函数;其中一个是用户从 Mathworks 文件交换中心提供的函数。非均匀性或非线性操作以粗体蓝色标出。不建议在图像信息度量计算中使用非均匀性或非线性操作。

处理块描述功能:
链接中描述
线性化在计算开始时对图像进行线性化(移除伽马编码)。对线性化后的图像进行运算,然后重新应用伽马编码。此方法最适用于标准锐化(锐化页面中描述的一维锐化的二维版本)。不适用于USM。 
伽马(并非严格意义上的降级)对图像进行伽马编码的添加或移除。有时您可能需要移除伽马编码,应用滤镜,然后再重新应用伽马编码(在第二次处理中)。伽马值是相对于假定的输入伽马值 1 而言的。输出图像 = 输入图像的伽马值 
消极的将图像反转,即将其转换为负片(5.0.4 版本新增)。
图像劣化:常见于处理前的图像中。处理过程通常是线性的。
雾(闪光)给图像添加雾化效果:相当于添加耀斑光或遮蔽眩光。
图像输出= sqrt(fog + (1-fog)*handles.image in 2 )
高斯滤波器 1 (在添加噪点之前)先模糊图像。这可以模拟镜头模糊效果。 imgaussfilt :参数为 sigma 的二维高斯图像滤波。
噪声(高斯噪声)给图像添加噪声。将使用高斯滤波器 2 进行滤波。 imnoise :向 HSV V 通道添加噪声。参数 sigma [] 和 Luma noise []。
高斯滤波器 2对图像进行模糊处理并添加噪声(在添加噪声之后)。这会影响噪声频谱。当 σ = 0.5 时,频谱与去马赛克(原始转换)的输出相似,去马赛克会将奈奎斯特频率处的噪声从 1 降低到 0.5。 imgaussfilt :参数为 sigma 的二维高斯图像滤波。
色调增强:校正颜色或应用三种色调映射算法之一,用于显示高动态范围 (HDR) 图像。色调响应可能具有高度非线性。
颜色校正矩阵(CCM) 应用颜色校正矩阵 (CCM) ,该矩阵可在Multicharts中计算并保存。保存的值会在打开图像处理时输入。CCM 复选框右侧的“设置 CCM”按钮会打开一个窗口(显示在右侧;单击缩略图可查看完整尺寸),您可以在其中设置矩阵(从文件中读取或从剪贴板粘贴,并选择选项(线性化等))。颜色校正矩阵描述了 CCM,它是在Multicharts中计算的。
色调映射渲染高动态范围 (HDR) 图像以供观看:使用称为色调映射的过程,将高动态范围图像转换为适合显示的低动态范围图像。色调映射是一种用于在动态范围更有限的显示器上近似呈现高动态范围图像外观的技术。非均匀和非线性色调映射:渲染高动态范围图像以供查看
本地色调映射一种使用拉普拉斯滤波的HDR图像替代色调映射算法。它具有不同的调整参数,产生不同的结果(图像饱和度更高)。该算法具有非均匀性和非线性特征。 局部色调图
对比度受限直方图均衡化CLAHE 处理的是图像中的小区域,称为图块,而不是整幅图像。每个图块的对比度都会被增强,使得输出区域的直方图与“分布”参数指定的直方图近似匹配。然后,使用双线性插值将相邻图块合并,以消除人为引入的边界。对比度,尤其是在均匀区域中,可以进行限制,以避免放大图像中可能存在的任何噪声。非均匀和非线性adapthisteq :对比度受限自适应直方图均衡化 (CLAHE)
空间增强:锐化和/或降噪。输出结果取决于图像内容——可能具有高度非线性。
锐化 USM(USM 反色蒙版)

使用非锐化掩模(USM) 方法锐化灰度或 RGB 输入图像。边缘锐化效果最为明显。USM 的工作原理是从原始图像中减去高斯模糊函数。如果阈值大于 0,则低对比度区域可能不会被锐化。参见维基百科。

此函数并非线性函数,导致图像信息指标出现一些不一致的情况。它设计用于直接处理图像,而图像不应进行线性化处理。非线性(令人意外;MATLAB 文档中未提及)。

imsharpen :USM锐化

锐化
标准

(新增)
Imatest 24.1
)

使用二维版本(类似于“锐化”页面中描述的一维锐化方法)锐化灰度或 RGB 输入图像。锐化效果在边缘最为明显。其工作原理是从原始图像中减去一个振幅降低的原始图像副本(该副本位于半径为R 的圆形轨迹上)。

为保持线性,应勾选“线性化”选项。这将使图像在计算开始时进行线性化处理(移除伽马编码)。然后对线性化后的图像进行锐化,最后重新应用伽马编码。建议用于测试锐化对 图像信息指标(例如信噪比增强或边缘信噪比增强)的影响。

由于标准锐化不是 MATLAB 函数,我们在下面的框中包含更多解释。

自定义功能。

可以使用 USM 或标准磨削方式(但不能同时使用)。

双边滤波器
  • 双边滤波由Tomasi 和 Manduchi 于 1998 年提出,是一种用于保持边缘平滑的非迭代方法。速度可能较慢。(Mathworks 文件交换中心还有其他双边滤波器,其中一些可能速度更快,但稳定性较差。)参数:
  1. 半宽度 w 是高斯双边滤波器窗口的一半大小。
  2. sigma(范围)是空间域标准差。
  3. sigma(域)是强度域标准偏差。

非均匀性

bfilter2 (来自 Mathworks 文件交换中心):

可以通过读取原始图像或经过最少处理的图像(通过ReadRaw进行去马赛克处理),然后应用诸如颜色校正矩阵(它还会应用伽马曲线)、锐化和双边滤波器等操作来模拟一个完整的(尽管是基本的)图像处理流程(一个简单的例子——有很多选项)。

锐化(标准;非USM)是 Imatest(非 MATLAB)的一个函数,旨在保持线性。

正如我们前面提到的,这是锐化页面中描述的一维锐化方法的二维版本。它是在我们尝试确定使用MATLAB实现的 USM 方法是否适用于二维锐化时创建的。 滤波函数是非线性的(确实如此)。它也比计算量更大的超声波磨削(USM)更接近典型的相机锐化。

对于锐化半径R和锐化量A ,定义k sharp = A /( A +1)。滤波器核是一个 2 R +1×2 R +1 矩阵H (单位为像素),计算方法如下:(1)将距离中心r的每个元素设置为 H( r ) = max(|Rr|,0);(2)设置 H = H/∑H,然后将中心元素设置为 H(R+1,R+1) = 1。

对于半径为 2、强度为 3(强锐化)的滤波器,5×5 核为

-0.0092 -0.0409 -0.0535 -0.0409 -0.0092
-0.0409 -0.0222 0 -0.0222 -0.0409
-0.0535 0 1.0000 0 -0.0535
-0.0409 -0.0222 0 -0.0222 -0.0409
-0.0092 -0.0409 -0.0535 -0.0409 -0.0092

对于伽马编码图像,应使用标准锐化和线性化γ功能。这是一个线性操作(只要过度锐化不会导致图像饱和)。

公用事业

图像处理窗口顶部的下拉菜单中提供了多种实用工具。(窗口中几乎没有空间添加其他按钮。)

文件显示和/或保存屏幕在图像查看器(推荐使用Irfanview )中显示屏幕,并可选择保存。此功能存在于多个交互式模块中。
保存图片保存处理后的图像。通常情况下,图像将以全精度保存(除非选中“8 位最大值(如下)”选项)。
保存伪原始/重新镶嵌图像可将图像保存为伪RAW(重新马赛克)格式或特殊格式,包括拜耳阵列、RCCC格式,也可选择特定通道。选项众多。请参阅“合成RAW图像” 。
保存图像为单色将图像(可能是彩色图像)另存为单色图像。
交换字节序(16 位、32 位输入)交换像素内字节的顺序(在极少数情况下字节顺序错误时很有用)
以 8 位最大精度保存图像文件默认情况下未选中(关闭)。如果选中,图像将以 8 位精度保存。(通常应取消选中此项)。
将图像保存为 HDR 格式将图像保存为HDR (高动态范围)格式
看法颜色条(灰度或彩色)灰度或彩色:用于 SSIM 和 PSNR 显示。颜色条中的颜色可在“选项 II”中更改。
庄稼允许您选择图像分析操作(MTF、SSIM 等)的裁剪区域。与分析和查看区域中的“裁剪”按钮相同。
分析大多数功能与“分析和查看”部分中的按钮重复,但也有一些新增功能。
图像统计调用图像统计模块,查看图像统计信息,例如直方图和横截面轮廓。
径向几何调用径向几何模块,该模块可以返回添加或校正光学畸变、横向色差和/或旋转的图像。
OCR使用Matlab 的 OCR 函数进行光学字符识别
人脸检测使用下面描述的 Matlab CAMShift例程。
探测人员使用下文所述的 Matlab detectPeopleACF例程。效果不如人脸检测。
帮助打开包含各种图像处理模块描述的网页。

结果展示与分析

显示方式可通过图像下方的按钮或“分析”下拉菜单进行控制。您可以选择以可视化方式显示输入图像或处理后的图像,也可以选择以计算结果显示(对输入图像和处理后的图像进行分析比较)。

结果显示摘要:可通过图像下方的按钮或“分析”下拉菜单选择。
输入显示输入图像(1)
已处理显示处理后的图像(2)
MTF将处理后/输入图像的MTF显示为空间频率的函数。对裁剪敏感。
MTFnn显示 MTF70-MTF10 的极坐标图(空间频率,其中 MTF 为低频值的nn %)
MTFnnP显示 MTF70P-MTF10P 的极坐标图(空间频率,其中 MTF 为峰值的nn %)
SSIM显示结构相似性指数(SSIM) ,该指数在SSIM模块页面中有详细介绍。与 PSNR 相比,SSIM 与视觉差异(退化)的相关性更高。
PSNR 和差异显示峰值信噪比和图像之间的差异。
OCR使用Matlab 的 OCR 函数进行光学字符识别的结果
人脸检测使用 Matlab CAMShift程序进行人脸检测的结果。
探测人员使用下文所述的 Matlab detectPeopleACF例程进行人员检测的结果。效果不如人脸检测。

image_processing_displays

左侧图像下方的“查看输入”按钮可在“查看输入” (选中处理后的图像)和“查看处理后的图像”(选中输入图像)之间切换。这样可以快速直观地比较两幅图像。切换图像时,缩放设置将保持不变。 “查看输入/处理后的图像”按钮的功能与“分析和查看”区域中的“输入”和“处理后的图像”按钮相同。该区域中的其他按钮用于显示计算结果。

SSIM显示的是结构相似性指数, SSIM模块页面对此有详细介绍。它的主要用途是衡量图像压缩对文件保存(例如,不同质量的 JPEG 文件)和数据传输造成的可见影响(即图像质量下降)。

MTF (调制传递函数)使用二维傅里叶变换计算处理后图像和输入图像之间的传递函数,其计算方法与随机模块类似,但有一个重要的区别。随机模块会从活动区域的总功率谱密度中减去活动区域左右两侧灰色区域的缩放功率谱密度(随机/散落的硬币/枯叶图案),从而去除大部分噪声,而 MTF 则不进行降噪处理。因此,MTF 测量对噪声极其敏感。

图像处理_MTF_噪声非锐化掩蔽后噪声高斯滤波图像的MTF

高频滚降是高斯滤波器 2的效果,它是在添加噪声之后应用的(因此可以改变噪声的频谱功率)。

您可以通过取消选中图像左侧“图像处理”区域中的“噪声(高斯)”和“高斯滤波器 2” ,然后点击“更新计算” ,来查看仅使用锐化掩模 (USM) 的 MTF(本例中半径 = 1.5,强度 = 2.5)。锐化掩模的频谱响应与“锐化”页面中描述的锐化类型不同:它的响应不是周期性的。它会上升到强度 + 1 的渐近水平并保持较高水平。

这是一个很好的例子,说明如何使用图像处理来探索处理块对外观和测量结果的影响。

图像处理_MTF_USM USM 的 MTF(锐化掩模:半径 = 1.5;数量 = 2.5)

并排视图

并排视图允许您并排比较输入图像和处理后的图像,即它们紧挨着显示。点击“查看输入”或“查看处理后”(位于图像左侧下方)下方的“并排视图”复选框。首次选中该复选框时,两张图像将完整显示。如果您裁剪其中一张图像,另一张图像也会被裁剪得完全相同。这样可以进行更有意义的比较。

图像处理并排枯叶图的并排视图。右侧添加了噪声、双边滤波器和USM。

启用并排视图后,底部的“分析和视图”部分(包含 MTF、SSIM 等)将被禁用。取消选中即可重新启用。

重新镶嵌(取消镶嵌)

点击“文件”菜单,选择“保存伪原始(未去马赛克)图像” (在读取文件后),即可将图像保存为合成的拜耳RAW格式以及其他几种格式之一。输出可以是标准图像文件格式或纯二进制文件。此时会弹出一个对话框,提供多种选项。

马赛克或通道选择:无(普通彩色文件输出)、重新马赛克(拜耳格式)、RCCC(红-清-清-清):R 亮、RCCC(红-清-清-清):R = C/3、单色(Y = 亮度)、单色(均值:等权重)、红、绿、蓝。对于重新马赛克(创建拜耳 RAW 文件),应选择重新马赛克(拜耳格式)。

RmCn 中的红色图标允许您选择四种拜耳配置之一。

Gamma 调整功能允许您调整输出曲线的 Gamma 值。将其设置为 1 表示不做任何更改。使用 2(或 2.2)可将典型的色彩空间 Gamma 值转换为线性 Gamma 值(Gamma = 1)。

保存文件格式允许您选择标准图像文件格式(PNG、JPG(90% 质量)、TIF(大尺寸)、BMP、8 位二进制或 16 位二进制)。二进制文件可以读入通用读取原始数据。

绿色通道增强功能允许您增强绿色通道,使合成的 RAW 图像更接近真实的 RAW 图像,而真实的 RAW 图像通常绿色最强。提供多种蓝/红通道级别可供选择。

选择“保存”后,会弹出一个对话框,允许您选择保存位置和文件名。默认文件名是root_file_name_png (带有所选扩展名)。

光学字符识别(OCR)

Imatest 5.0中新增了 OCR 功能,它使用Matlab 的 OCR 函数,该函数是Tesseract-OCR的一个实现。使用方法如下:

  • 阅读包含感兴趣文字的图片。
  • 如有需要,对图像进行处理。处理方法包括对图像进行降级处理(例如模糊、噪声等),以观察其对检测的影响;或者进行图像增强处理(例如锐化掩模、双边滤波等),以观察是否可以提高检测效果。
  • 将图像裁剪到文本区域(如果图像的大部分区域包含除文本以外的其他元素,强烈建议这样做),然后
  • 点击OCR 。

这将打开 OCR 窗口,并对图像的裁剪区域执行文本识别操作。下方显示了右侧示例图像(噪声(高斯)= 0.002;高斯滤波器 2 = 0.7,图像略有劣化)的识别结果。您可以下载此图像并进行实验,以了解各种劣化和增强处理如何影响 OCR 性能。

请注意,Matlab 的 OCR 性能并不出色。即使是看起来清晰易读的文本,识别效果也很差,尤其是在字体小于 12 磅的情况下。其性能与一些免费或低成本的 OCR 程序(例如gImageReader ( Tesseract-ocr 的图形用户界面前端)和TopOCR )相当。

示例图片:点击查看
可供下载的完整版本。

左侧示例图像包含一组字符(QWERTYUIOPASDFGHJKLZXCVBNM1234567890),字号从 20 磅到 7 磅不等,字体为 Calibri 常规、粗体和负粗体。这些字符用于汽车牌照。该文件(此处)使用 Microsoft Word 创建。图像的其余部分是增强型 eSFR ISO图表的一部分,包含楔形区域和两个高对比度正方形。这些区域可用于将 MTF 测量值与 OCR 性能关联起来。

OCR窗口,显示样本图像轻微降级裁剪后的识别结果。

OCR设置

可以通过输入字符子集来限制有效输出字符(如果字符子集为空,则允许所有字符),然后按“计算 OCR”按钮,从而提高字符子集结果。对于示例图像,子集包含拉丁字母大写和数字(汽车牌照上的常见字符)。但改进效果甚微。

QWERTYUIOPASDFGHJKLZXCVBNM1234567890

标准OCR对车牌识别效果不佳。Matlab文件交换中心提供了一些车牌识别程序。如果这些程序效果良好且许可允许,我们可能会添加其中一两个。

默认显示文本(如图所示)。您也可以选择“置信度及单词” ,该选项会显示单词置信度和单个单词。以下是显示内容的几行示例。

0.8545 QWERTYUIOPASDFGHJKLZXCVBNM1234567890
0.8361 QWERTYUIOPASDFGHJKLZXCVBNM123456789O
0.9018 18
0.7842 QWERTVU|OPASDF6HJKLZX(VBNM1234567890
0.8339 16
0.7468 QWEKTYUIOPASDFGHJKLZXCVBNM1234567B90
0.8254 14
0.7252 QWERYYUIOPASDFGI-1JKLZX(\/ENM1Z34567E9(!
0.7784 12
0.5777 QWERTYUWDDASDFGHJI(LZXCVBNM113A567E9u
0.6549 11
0.6276 uwEuHu\onAsur:.r<n<.zxn'aNM:23-4ss7s9u
0.7658 米

复制到剪贴板您可以将当前显示内容复制到剪贴板,以便在文本编辑器或其他应用程序中使用。

保存结果会保存当前显示内容。

可以在“设置”下拉菜单中选择可变宽度或固定宽度字体。

人脸和人物检测

人脸和人物检测功能可从“分析”下拉菜单中调用。目前两者都使用 Matlab 的默认设置。(我们将来可能会添加选项窗口。)参见

使用 CAMShift和detectPeopleACF进行人脸检测和跟踪

人脸检测的效果比人物检测略好。这里有一个例子,图片是从http://epaperpress.com/portfolio/columbia.html盗用的。Imatest 的作者(他看起来有点狼狈)在左边。点击“更新计算”即可移除标注(重置图像)。

人脸检测示例(左侧为Imatest作者)

人脸识别功能大部分时间都运行良好,但说真的……你怎么能漏掉保罗和约翰呢?