当前位置: 首页 > news >正文

OpenCV计算摄影学(5)处理一系列图像(例如视频帧)的非局部均值去噪的函数fastNlMeansDenoisingColoredMulti()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

对用于彩色图像序列的 fastNlMeansDenoisingMulti 函数的修改。
cv::fastNlMeansDenoisingColoredMulti 函数是 OpenCV 中用于处理一系列图像(例如视频帧)的非局部均值去噪的一个版本。它特别适用于对连续帧之间具有相似内容的图像序列进行去噪,如视频去噪

函数原型

void cv::fastNlMeansDenoisingColoredMulti
(
	InputArrayOfArrays 	srcImgs,
	OutputArray 	dst,
	int 	imgToDenoiseIndex,
	int 	temporalWindowSize,
	float 	h = 3,
	float 	hColor = 3,
	int 	templateWindowSize = 7,
	int 	searchWindowSize = 21 
)		

参数

  • 参数srcImgs 输入8位3通道图像序列。所有图像应具有相同的类型和大小。
  • 参数imgToDenoiseIndex 在 srcImgs 序列中要进行去噪处理的目标图像的索引。
  • 参数temporalWindowSize 用于目标图像去噪的周围图像数量。应该是奇数。将使用从 srcImgs 中 imgToDenoiseIndex - temporalWindowSize / 2 到 imgToDenoiseIndex + temporalWindowSize / 2 的图像来对 srcImgs[imgToDenoiseIndex] 图像进行去噪处理。
  • 参数dst 输出图像,与 srcImgs 图像具有相同的大小和类型。
  • 参数templateWindowSize 用于计算权重的模板块大小(以像素为单位)。应该是奇数。推荐值为7像素。
  • 参数searchWindowSize 用于计算给定像素加权平均值的窗口大小(以像素为单位)。应该是奇数。性能受其影响呈线性关系:更大的 searchWindowSize 意味着更长的去噪时间。推荐值为21像素。
  • 参数h 调节亮度组件滤波强度的参数。较大的 h 值能完美地去除噪声,但也会去除图像细节;较小的 h 值则会保留细节,但也会保留一些噪声。
  • 参数hColor 与 h 相同,但是对于颜色组件。

该函数将图像转换到 CIELAB 色彩空间,然后使用 fastNlMeansDenoisingMulti 函数分别对 L 和 AB 分量用给定的 h 参数进行去噪处理。

代码示例

#include <opencv2/opencv.hpp>

int main() {
    // 假设我们有一系列连续帧存储在一个向量中
    std::vector<cv::Mat> srcImgs;
    for(int i = 1; i <= 5; ++i) { // 加载5张连续帧作为例子
        std::string filename = "frame" + std::to_string(i) + ".jpg";
        cv::Mat img = cv::imread(filename);
        if(img.empty()) {
            std::cerr << "无法加载图像文件: " << filename << std::endl;
            return -1;
        }
        srcImgs.push_back(img);
    }

    cv::Mat dst;

    // 要去噪的图像索引和时间窗口大小
    int imgToDenoiseIndex = 2; // 第三张图像(索引从0开始)
    int temporalWindowSize = 3; // 使用当前帧及前后各一帧

    // 应用快速非局部均值彩色去噪算法到多帧
    cv::fastNlMeansDenoisingColoredMulti(srcImgs, dst, imgToDenoiseIndex, temporalWindowSize);

    // 保存或显示去噪后的图像
    cv::imwrite("denoised_image.jpg", dst);
    cv::imshow("Denoised Image", dst);
    cv::waitKey();

    return 0;
}

相关文章:

  • 接触式电子体温计方案研发pcba设计
  • 大白话JavaScript闭包在实际项目中有哪些应用场景?
  • Unity XR-XR Interaction Toolkit开发使用方法(十)组件介绍(XR Interaction Group)
  • 减速机的工作原理具体是如何实现的?
  • 手机放兜里,支付宝“碰一下”被盗刷?
  • ALM研发管理:全新甘特图,让项目管理更高效
  • 信号系统篇---欧拉公式角度表示方法
  • 期权帮|股指期货基差和价差有什么区别?
  • HC32F460_SCI驱动(一)
  • Ubutu部署WordPress
  • 数据中心设备故障难预测?智能预警系统为您排忧解难!
  • C++ Qt常见面试题(2):QT中的文件流(QTextStream)和数据流(QDataStream)的区别
  • EB-Cable许可分析的定义和目的
  • 机试刷题_1614. 括号的最大嵌套深度【python】
  • 跟着 Lua 5.1 官方参考文档学习 Lua (9)
  • 《操作系统 - 清华大学》 8 -10:进程管理:线程的实现
  • 营销过程乌龟图模版
  • Linux中的UDP编程接口基本使用
  • 流匹配(Flow Matching)的生成过程:求解反向常微分方程(ODE)
  • 单例模式——c++
  • 国防部:正告菲方停止以任何方式冲撞中方核心利益
  • 深入贯彻中央八项规定精神学习教育中央第六指导组指导督导中国工商银行见面会召开
  • 一季度全国消协组织为消费者挽回经济损失23723万元
  • 小米回应SU7Ultra排位模式限制车辆动力:暂停推送更新
  • 美联储主席:美联储工作方式不会受特朗普影响,从未寻求与总统会面
  • 秦洪看盘|受阻回落,蓄积新做多能量