文章目录
前言
- 需要下载安装OpenCV工具包的朋友,请前往 此处 ;
- 系统要求:Windows系统,LabVIEW>=2018,兼容32位和64位。
photo 模块
OpenCV 的 photo 模块主要用于图像编辑和修复,包括颜色校正、图像去噪、修补、HDR等功能。选板如下:
1. 色调与风格
下面介绍photo模块下,几种颜色调整与风格转换的OpenCV函数。
参考范例:examples/Molitec/OpenCV/photo/photo_1(color and style).vi
1.1 变色(colorChange)
使用 colorChange 函数可对一张图片的全部或部分区域进行颜色调整。
输入参数 red_mul、green_mul、blue_mul 分别代表3个颜色通道的乘积因子。
另外还必须指定一个掩码Mask,当Mask为空矩阵Mat()时,代表源图像“全图”进行颜色调整;当Mask非空时,其尺寸必须与源图像相同,Mask白色(255)区域对应的源图像素参与颜色调整。
1.2 去色(decolor)
decolor 函数可以实现 “对比度保留去色”,将原始彩色图像变为灰度图(grayscale),同时生成一个颜色增强图(color_boost),以保持原始图像的对比度信息。
1.3 铅笔素描(pencilSketch)
pencilSketch 函数用于将彩色图像转换为素描风格的图像,模拟铅笔素描的质感和阴影层次。
输入参数:
sigma_s 控制邻域大小,范围0 - 200;
sigma_r 控制线条锐度,范围0 - 1;
shade_factor 控制阴影效果,范围0 - 0.1;
输出两张图像,一张是灰度素描,另一张是彩色素描。
1.4 细节增强(detailEnhance)
detailEnhance 函数可以用来增强图像细节,从而突出显示图像中某些重要特征。
输入参数:
sigma_s 空间域的标准差,用于模糊操作,以减少噪声,范围0 - 200;
sigma_r 频率域的标准差,用于调整像素值的对比度,范围0 - 1;
1.5 风格化(stylization)
stylization 函数用于将彩色图像转换为具有艺术风格化的图像,模仿如油画、卡通等艺术风格。
输入参数:
sigma_s 空间域的标准差,较大的值会使图像更加模糊,适用于需要弱化细节的情况,范围0 - 200;
sigma_r 频率域的标准差,较小的值会增加图像的对比度,使图像更加鲜明,范围0 - 1;
2. 修补
下面介绍photo模块下,几种图像修补的OpenCV函数。
参考范例:examples/Molitec/OpenCV/photo/photo_3(repair).vi
2.1 去高亮(illuminationChange)
去除照片上的 “高亮” 区域,可以使用 illuminationChange 函数。
输入参数:
Mask 掩码,需要进行去高亮的区域为白色(255),其余为黑色(0);
alpha 全局光照调整因子,控制整体图像亮度的增益,范围0 - 1;
beta 局部光照调整因子,影响图像中对比度较低区域(暗区)的亮度提升程度,范围0 - 1;
下图范例,通过Mask设置两个白色矩形ROI,将原图片上红球、黄球上的两个高亮反射点去除。
2.2 去污点(inpaint)
inpaint 函数可以去除照片上的水印、划痕、污渍、标志等瑕疵,并且尽量保持背景融合良好。
输入参数:
Mask 掩码,需要进行去污点的区域为白色(255),其余为黑色(0);
inpaintRadius 修复半径,表示在寻找相似像素时考虑的邻域范围;
flags 算法标志,可选 INPAINT_NS 或 INPAINT_TELEA;
下图范例,通过Mask设置左上方白色矩形ROI,将图片左上方的 “Molitec” 水印去除。
2.3 无缝克隆(seamlessClone)
seamlessClone 函数用于执行图像中的无缝克隆。可以从一个图像中将一部分内容复制到另一图像中,或者复制到本图像的另一区域,同时背景无缝融合。
输入参数:
Src 原图像;
Dst 目标图像,当 Src 与 Dst 相同时,代表同图克隆;
Mask 掩码,指定原图像中需要被复制的区域为白色(255),其余为黑色(0);
p 中心点,代表在目标图像中,进行粘贴的中心位置坐标,注意不可以让复制的ROI超出目标图像的范围;
flags 克隆类型标志,可选 NORMAL_CLONE、MIXED_CLONE 或 MONOCHROME_TRANSFER;
下图范例,将红色球无缝克隆到原图片的另一位置。
3. 降噪
下面介绍photo模块下,几种照片降噪的OpenCV函数。
降噪函数 | 功能 |
---|---|
edgePreservingFilter | 边缘保留滤波器,用于在平滑图像的同时保留边缘细节,常用于 “磨皮” 美颜 |
fastNIMeansDenoising | 快速非局部均值去噪算法,有效减少图像中的噪声,同时尽可能保留图像的细节 |
fastNIMeansDenoisingMulti | 处理多帧图像的 fastNIMeansDenoising 算法,适合视频降噪 |
fastNIMeansDenoisingColored | 专门为彩色图像设计的快速非局部均值去噪算法,通过考虑颜色空间中的相关性来增强去噪效果,更适合处理彩色图像中的噪声 |
fastNIMeansDenoisingColoredMulti | 处理多帧图像的 fastNIMeansDenoisingColored 算法,适合视频降噪 |
textureFlattening | 平滑图像中的纹理区域,同时保留边缘信息 |
denoise_TVL1 | TV-L1 去噪算法,处理多帧单通道图像,适合视频降噪 |
参考范例:examples/Molitec/OpenCV/photo/photo_2(denoising).vi
4. HDR 处理
我们平时常见的图片,基本都采用 SDR(Standard Dynamic Range)处理技术。SDR图片的动态范围较窄,通常只能捕捉和显示有限的亮度范围,无法完美还原现实世界中极端明亮或暗淡的场景。
HDR(High Dynamic Range)是一种提高影像亮度、对比度范围的处理技术,旨在提供更广泛的亮度范围和更丰富的色彩细节。HDR与SDR的核心区别在于动态范围、色彩表现和细节还原能力。
4.1 SDR转HDR
实现 SDR 转 HDR,需要 photo 模块下的三个类配合完成:AlignMTB、CalibrateCRF、MergeExposures。
- 第1步:图像对齐
- AlignMTB 的作用是将一组不同曝光度的图像进行对齐处理,减少由于相机移动或场景中物体移动导致的图像间的位移;
- 通过 createAlignMTB 创建对象,使用 process 方法传入多帧图像Src,运行得到对齐后的多帧图像Dst;
- 第2步:估计相机响应函数
- CalibrateCRF 的作用是从一组不同曝光度的图像中估计相机的响应函数;
- CalibrateCRF是一个抽象基类,可以使用两个子类:CalibrateDebevec 和 CalibrateRobertson;
- 插入 CalibrateCRF 选板的 create 函数,切换模式到 “CalibrateDebevec”,设置必要的参数;
- 插入 CalibrateCRF 选板的 process 函数,将第1步对齐后的多帧图像作为输入,再传入曝光时间times,运行后得到相机响应函数response,此过程耗时较长;
(times是个向量矩阵,其长度等于图像帧数,元素依次代表每一张照片的曝光时间) - 第3步:转化为HDR
- MergeExposures 用于HDR图像的创建,可以将一组不同曝光度的图像合并成一个高动态范围的图像;
- MergeExposures 是一个抽象基类,可以使用三个子类:MergeDebevec、MergeMertens、MergeRobertson;
- 插入 MergeExposures 选板的 create 函数,切换模式到 “MergeDebevec”;
- 插入 MergeExposures 选板的 process 函数,传入对齐后的多帧图像、times和第2步得到的response,运行后得到合并成的HDR图像;
- 将得到的HDR图像,通过 imwrite 函数保存到拓展名为 .hdr 文件中,以备后用。
- 完整流程如下图:
4.2 HDR处理并转SDR
调整HDR图像,并转化成SDR格式,需要使用 Tonemap 类。
Tonemap 包含三个子类:TonemapDrago、TonemapMantiuk、TonemapReinhard。
- 使用 imread 函数读取之前保存的HDR图片,注意 flags 要选 IMREAD_UNCHANGED;
- 插入 Tonemap 选板的 create 函数,切换模式到 “TonemapMantiuk”,设置必要的参数;
- 插入一个或多个 TonemapMantiuk 子类的私有函数 TM_set,可以再次修改参数;
- 插入 Tonemap 选板的 process 函数,传入HDR图像,运行后得到经过参数处理的SDR输出;
- 但 process 直接输出的SDR是归一化的 32F 格式图像,为了方便观察和存储,可以乘255并转成 8U 格式;
- 如果图像太暗,可以乘以大于255的因子以提高亮度。不必担心溢出,因为经过covertTo后,大于255的元素一律切平成255;
- 完整流程及转化效果:
总结
- 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
- 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
- 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。