opencv基础篇 ——(十)非真实感渲染

19 篇文章 0 订阅

        非真实感渲染(Non-Photorealistic Rendering, NPR)是指通过一系列图像处理技术,将真实感图像转换为具有特定艺术风格或视觉效果的图像,模拟绘画、素描、卡通等非现实主义表现手法。OpenCV 提供了一些内置函数来实现非真实感渲染,这些函数可以帮助开发者快速实现各种艺术风格化效果。以下是 OpenCV 中与非真实感渲染相关的几个关键函数及其介绍:

  1. cv::detailEnhance:

    • 用于增强图像的细节表现,通过结合空间域和平滑以及频率域滤波,选择性地增强特定频率范围内的图像成分,从而突出细节。适用于医学影像、遥感图像、艺术图像的细节增强,也可作为图像分析、识别、分割等后续算法的预处理步骤。
  2. cv::pencilSketch:

    • 将彩色图像转换为素描风格(铅笔画效果),生成包含线条图和着色图的双输出图像。通过色彩空间转换、亮度处理、色彩信息处理、色调映射和混合线条图与着色图等步骤,模拟铅笔素描的质感和阴影层次。适用于艺术效果生成、教育与演示、视觉特效等场景。
  3. cv::edgePreservingFilter:

    • 对图像进行边缘保持滤波处理,能够在平滑图像、减少噪声的同时,有效保护图像中的边缘信息不受破坏。支持基于递归或归一化卷积的滤波器,通过边缘检测、空间域平滑、频率域滤波、边缘恢复和逆变换等步骤实现。应用于图像降噪、图像美化、视频处理等场景,保持图像重要边缘特征的同时提升视觉质量。
  4. cv::stylization:

    • 将彩色图像转换为艺术风格化图像,模仿特定艺术风格(如油画、水彩画、素描等)。通过色彩空间转换、亮度处理、对比度与亮度调整、色彩信息处理和后处理等步骤,生成具有艺术风格的输出图像。常用于艺术效果生成、教育与演示、视觉特效,为用户提供一键转换照片为艺术风格的功能。

        除了上述直接相关的非真实感渲染函数外,OpenCV 还提供了众多基础图像处理功能,如滤波、形态学操作、色彩空间转换、直方图均衡化等,这些都可以作为非真实感渲染算法的组成部分或辅助手段。开发者可以根据实际需求,结合这些基础功能和特定的非真实感渲染函数,设计和实现复杂的图像风格转换算法。

        通过调用诸如 cv::detailEnhancecv::pencilSketchcv::edgePreservingFilter 和 cv::stylization 等函数,结合适当的参数调整,可以将普通照片或视频转化为具有绘画、素描、艺术风格等多种非真实感效果的图像,满足不同应用场景的需求。

detailEnhance

        用于增强图像的细节表现。

函数原型:

void cv::detailEnhance(
    InputArray src,
    OutputArray dst,
    float sigma_s,
    float sigma_r
);
  • float sigma_s: 空间高斯核的标准差。该参数控制对图像进行局部平滑处理的程度。较大的值会使图像更加平滑,减少噪声影响,但可能降低细节增强效果;较小的值则会保留更多细节,但可能导致噪声增加。通常选择在 1.0 到 5.0 的范围内。

  • float sigma_r: 频率域高斯核的标准差。该参数控制在频率域中对图像进行滤波的尺度。它决定了增强图像细节的频率范围。较小的值会增强低频细节,较大的值则会增强高频细节。通常选择在 0.0 到 1.0 的范围内。

功能描述:

cv::detailEnhance 函数通过结合空间域和频率域的处理来实现图像细节的增强。具体步骤如下:

  1. 空间域平滑:首先,对输入图像 src 进行局部平滑处理,通常使用高斯滤波器,其标准差由参数 sigma_s 控制。平滑操作有助于消除图像中的噪声和不相关细节,同时保留主要结构信息。

  2. 频率域处理:将平滑后的图像转换到频域(通常使用傅立叶变换),然后应用一个中心对称的高斯滤波器,其标准差由参数 sigma_r 控制。此步骤旨在选择性地增强特定频率范围内的图像成分,从而突出细节。低频部分通常对应图像的大尺度结构,而高频部分对应边缘、纹理等细微特征。

  3. 逆傅立叶变换:将处理后的频域图像转换回空间域,得到增强细节的中间结果。

  4. 细节对比度增强:最后,通过对原始图像 src 与增强细节的中间结果进行适当的组合(如相减、相除等操作),生成最终的细节增强输出图像 dst。这一过程增强了原始图像中被选择频率范围内的细节对比度,使得这些细节在输出图像中更为明显。

应用场景:

  • 图像增强:在医学影像、遥感图像、艺术图像等领域,通过提高图像细节清晰度,帮助观察者更好地识别和分析图像内容。

  • 图像预处理:作为图像分析、识别、分割等后续算法的预处理步骤,提升算法对图像细节特征的敏感度。

  • 视觉效果优化:在数字摄影、图像编辑、视频后期制作中,用于改善图像的整体观感,使图像看起来更清晰、细腻。

pencilSketch 

        用于将彩色图像转换为素描风格(铅笔画效果)的函数。

函数原型:

void cv::pencilSketch(
    InputArray src,
    OutputArray dst1,
    OutputArray dst2,
    float sigma_s,
    float sigma_r,
    float shade_factor
);

参数说明:

  • OutputArray dst1: 输出的素描线条图。通常是单通道 8-bit 灰度图像,表示铅笔线条的分布。

  • OutputArray dst2: 输出的素描着色图。表示铅笔着色的效果。

  • float sigma_s: 空间高斯核的标准差,用于控制线条图生成过程中的空间平滑程度。较大的值会导致更平滑的线条,较小的值则会产生更锐利、细节丰富的线条。通常取值范围为 0.0 到 10.0。

  • float sigma_r: 频率域高斯核的标准差,用于控制线条图生成过程中的频率域滤波尺度。它决定了保留哪些频率成分来形成线条。较小的值强调低频信息(大尺度结构),较大的值强调高频信息(细节)。通常取值范围为 0.0 到 0.5。

  • float shade_factor: 着色图的阴影因子,控制着色图的对比度和深浅。较大的值会使着色图更暗、对比度更高,模拟铅笔较重的涂抹效果;较小的值则会使着色图更亮、对比度更低,模拟轻柔的着色效果。通常取值范围为 0.0 到 1.0。

功能描述:

cv::pencilSketch 函数通过一系列图像处理步骤将输入的彩色图像转换为具有铅笔画风格的双输出图像:

  1. 色彩空间转换:将输入的彩色图像从 BGR(或 RGB)色彩空间转换到 LAB 色彩空间,以便分离颜色信息和亮度信息。

  2. 亮度处理

    • 线条图生成:对 LAB 色彩空间中的亮度分量 L 使用双边滤波器进行处理,以模拟铅笔线条的质感。双边滤波器结合了空间域和平滑以及像素相似性的考虑,能够在保持边缘的同时去除噪声。滤波参数由 sigma_s 和 sigma_r 控制。
    • 着色图生成:对亮度分量 L 进行对比度调整,使用 shade_factor 参数控制调整程度,生成具有不同阴影层次的着色图。
  3. 色彩信息处理:将处理后的亮度分量与原始色彩空间中的色彩信息(A、B 分量)重新组合,生成初步的素描着色图。

  4. 色调映射:对初步的素描着色图进行色调映射处理,进一步模拟铅笔画特有的色彩风格。

  5. 混合线条图与着色图:最后,将生成的线条图(dst1)与着色图(dst2)按一定方式叠加(如透明度混合),得到最终的铅笔素描效果图像。

应用场景:

  • 艺术效果生成:在图像编辑软件、社交媒体滤镜、艺术创作工具中,为用户提供一键转换照片为素描风格的功能。

  • 教育与演示:在绘画教学、设计草图展示、概念设计交流中,利用铅笔画风格简化复杂图像,突出轮廓和明暗关系。

  • 视觉特效:在电影、动画、游戏等多媒体制作中,为场景添加独特视觉风格或过渡效果。

edgePreservingFilter 

        用于对图像进行边缘保持滤波处理的函数。这种滤波方法能够在平滑图像并减少噪声的同时,有效地保护图像中的边缘信息不受破坏。

函数原型:

void cv::edgePreservingFilter(
    InputArray src,
    OutputArray dst,
    int flags = 1,
    float sigma_s = 60,
    float sigma_r = 0.4f
);

参数说明:

  • OutputArray dst: 输出图像,与输入图像具有相同的尺寸和类型。

  • int flags: 滤波器类型标志,可选值包括:

    • cv::RECURS_FILTER: 使用基于递归的滤波器。
    • cv::NORMCONV_FILTER: 使用基于归一化卷积的滤波器。
  • float sigma_s: 空间高斯核的标准差,控制在空间域上进行平滑的程度。较大的值会带来更强的平滑效果,但可能会牺牲一些边缘细节;较小的值则倾向于保留更多的细节,但可能无法充分抑制噪声。通常取值范围为 0.0 到几百之间。

  • float sigma_r: 频率域高斯核的标准差,控制在频率域上进行滤波的尺度。它决定了保留哪些频率成分来保护边缘。较小的值保留更多的高频成分,有利于边缘保持;较大的值保留更多的低频成分,有利于平滑图像。通常取值范围为 0.0 到 1.0。

功能描述:

cv::edgePreservingFilter 函数通过结合空间域和频率域的处理,实现对图像的平滑滤波,同时保持图像边缘的清晰度。具体流程可能因所选滤波器类型(由 flags 参数决定)而略有差异,但总体思路是:

  1. 边缘检测:计算输入图像的梯度或边缘强度,确定图像中潜在的边缘位置。

  2. 空间域平滑:对图像进行一定程度的空间域平滑处理,如使用高斯滤波器,参数由 sigma_s 控制。平滑操作旨在减少图像噪声和不必要的细节,但需避免模糊边缘。

  3. 频率域滤波:在频率域中对图像进行滤波,保留与边缘相关的高频成分,抑制其他非边缘区域的高频噪声。这一步通常涉及计算图像的傅立叶变换,然后应用一个中心对称的高斯滤波器,其标准差由参数 sigma_r 控制。

  4. 边缘恢复:根据之前计算的边缘信息,将平滑后的图像在边缘处进行修正,确保边缘保持清晰。具体方法取决于所选滤波器类型。

  5. 逆变换与输出:将处理后的频域图像转换回空间域,得到最终的边缘保持滤波输出图像 dst

应用场景:

  • 图像降噪:在图像预处理阶段,对含有噪声的图像进行平滑处理,同时保持图像的重要边缘特征,为后续的图像分析、识别或显示提供更高质量的数据。

  • 图像美化:在摄影后期、艺术渲染、用户界面设计等场景下,对图像进行平滑处理以获得更柔和的视觉效果,同时保持图像边缘的清晰度,避免过度模糊导致的失真。

  • 视频处理:在视频流处理中,对连续帧进行边缘保持滤波,既能平滑帧间噪声,又能保持动态边缘的连贯性,提升视频质量。

stylization 

        用于将彩色图像转换为艺术风格化图像的函数。它基于一种称为“图像风格化”的计算机视觉技术,旨在模仿特定艺术风格(如油画、水彩画、素描等)对输入图像进行非真实感渲染。

函数原型:

void cv::stylization(
    InputArray src,
    OutputArray dst,
    float sigma_s = 60,
    float sigma_r = 0.4f
);

参数说明:

  • OutputArray dst: 输出的艺术风格化图像,与输入图像具有相同的尺寸和类型。

  • float sigma_s: 空间高斯核的标准差,用于控制在空间域上进行平滑的程度。较大的值会带来更强的平滑效果,可能导致图像更抽象;较小的值则倾向于保留更多的细节,使风格化图像更接近原图。通常取值范围为 0.0 到几百之间。

  • float sigma_r: 频率域高斯核的标准差,控制在频率域上进行滤波的尺度。它决定了保留哪些频率成分来形成风格化效果。较小的值保留更多的高频成分,使图像边缘更锐利;较大的值保留更多的低频成分,使图像更平滑。通常取值范围为 0.0 到 1.0。

功能描述:

cv::stylization 函数通过一系列图像处理步骤将输入的彩色图像转换为具有艺术风格的输出图像:

  1. 色彩空间转换:将输入的彩色图像从 BGR(或 RGB)色彩空间转换到 LAB 色彩空间,以便分离颜色信息和亮度信息。

  2. 亮度处理

    • 空间域平滑:对 LAB 色彩空间中的亮度分量 L 使用双边滤波器进行处理,以模拟艺术作品中的平滑过渡和纹理。滤波参数由 sigma_s 控制。
    • 频率域滤波:在频率域中对亮度分量 L 进行滤波,保留与艺术风格相关的频率成分。滤波参数由 sigma_r 控制。
  3. 色彩信息处理:将处理后的亮度分量与原始色彩空间中的色彩信息(A、B 分量)重新组合,生成初步的艺术风格化图像。

  4. 后处理:可能包括色调映射、饱和度调整等额外步骤,以进一步优化艺术风格效果。

应用场景:

  • 艺术效果生成:在图像编辑软件、社交媒体滤镜、艺术创作工具中,为用户提供一键转换照片为艺术风格的功能。

  • 教育与演示:在绘画教学、设计草图展示、概念设计交流中,利用艺术风格化图像简化复杂图像,突出特定艺术手法或风格特征。

  • 视觉特效:在电影、动画、游戏等多媒体制作中,为场景添加独特视觉风格或过渡效果。

效果展示

  • 光线偏暗场景效果对比

  • 人物处理效果对比

  • 人像处理效果对比

总结:

        根据效果可以看出,detailEnhance对图像细节的突显比较明显,edgePreservingFilter 对人物的美白效果非常明显,pencilSketch生成素描画,stylization生成油画效果。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值