- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
对用于彩色图像序列的 fastNlMeansDenoisingMulti 函数的修改。
cv::fastNlMeansDenoisingColoredMulti 函数是 OpenCV 中用于处理一系列图像(例如视频帧)的非局部均值去噪的一个版本。它特别适用于对连续帧之间具有相似内容的图像序列进行去噪,如视频去噪
函数原型
cpp
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 参数进行去噪处理。
代码示例
cpp
#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;
}