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

OpenCV计算摄影学(3)CUDA 图像去噪函数fastNlMeansDenoising()

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

算法描述

使用非局部均值去噪算法(Non-local Means Denoising algorithm)执行图像去噪,该算法来源于 http://www.ipol.im/pub/algo/bcm_non_local_means_denoising,并包含了若干计算优化。预期噪声为高斯白噪声。

cv::cuda::fastNlMeansDenoising 是 OpenCV 的 CUDA 模块中用于图像去噪的一个函数。此函数实现了快速非局部均值去噪算法,旨在减少图像中的噪声同时尽可能保留边缘细节。

函数原型


void cv::cuda::fastNlMeansDenoising	
(	
	InputArray 	src,
	OutputArray 	dst,
	float 	h,
	int 	search_window = 21,
	int 	block_size = 7,
	Stream & 	stream = Stream::Null() 
)	

参数

  • 参数src 输入8位1通道、2通道或3通道的图像。
  • 参数sdst 与 src 具有相同大小和类型的输出图像。
  • 参数sh 调节滤波强度的参数。较大的 h 值能完美地去除噪声,但也会去除图像细节;较小的 h 值则会保留细节,但也会保留一些噪声。
  • 参数ssearch_window 用于计算给定像素加权平均值的窗口大小(以像素为单位)。应该是奇数。性能受其影响呈线性关系:更大的 search_window 意味着更长的去噪时间。推荐值为21像素。
  • 参数sblock_size 用于计算权重的模板块大小(以像素为单位)。应该是奇数。推荐值为7像素。
  • 参数sstream 用于异步调用的流。 该函数预期应用于灰度图像。对于彩色图像,请参阅 FastNonLocalMeansDenoising::labMethod。

代码示例

电脑没有Nvidia的显卡,程序编译不了,opencv不支持cuda的也编译不了。

#include <opencv2/opencv.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/core/cuda.hpp>

int main() {
    // 加载输入图像
    cv::Mat src = cv::imread("noisy_image.jpg", cv::IMREAD_COLOR);
    if (src.empty()) {
        std::cerr << "无法加载图像文件" << std::endl;
        return -1;
    }

    // 创建与src相同大小和类型的输出图像dst
    cv::Mat dst;

    // 将输入图像上传到GPU
    cv::cuda::GpuMat gpu_src, gpu_dst;
    gpu_src.upload(src);

    // 创建CUDA流(可选)
    cv::cuda::Stream stream;

    // 应用快速非局部均值去噪算法
    cv::cuda::fastNlMeansDenoising(gpu_src, gpu_dst, 3.0f /* h */, 21 /* search_window */, 7 /* block_size */, stream);

    // 将去噪后的图像从GPU下载到CPU
    gpu_dst.download(dst);

    // 保存去噪后的图像
    cv::imwrite("denoised_image.jpg", dst);

    // 显示原始图像和去噪后的图像
    cv::imshow("Noisy Image", src);
    cv::imshow("Denoised Image", dst);
    cv::waitKey();

    return 0;
}

相关文章:

  • Kubernetes (K8S) 高效使用技巧与实践指南
  • PyTorch 的 nn.NLLLoss:负对数似然损失全解析
  • 在 ASP.NET Core 中压缩并减少图像的文件大小
  • lqb官方题单-速成刷题清单(上) - python版
  • AI 实战2 - face -detect
  • Open3D解决SceneWidget加入布局中消失的问题
  • composer 错误汇总
  • 排序算法(3):
  • Dify Workflows MCP Server (TypeScript)设计与实战
  • 人工智能之数学基础:线性代数中矩阵的运算
  • 极简本地体验deepseek大模型教程
  • 蓝牙接近开关模块感应开锁手机靠近解锁支持HID低功耗
  • Window下Redis的安装和部署详细图文教程(Redis的安装和可视化工具的使用)
  • 爱普生可编程晶振 SG-8101CE 在智能家居领域展现出的优势
  • 【机器学习】逻辑回归(Logistic Regression)
  • 散户如何实现自动化交易下单——篇1:体系介绍与获取同花顺资金账户和持仓信息
  • mysql安装教程,超详细图文教程(附安装包)MySQL8.0安装教程
  • virtualbox安装ubuntu,配置静态ip
  • UnrealEngine UE5 可视化 从地球观察火星 金星 土星 运动轨迹
  • 【Android】安卓付款密码输入框、支付密码输入框
  • 制作移动网站公司/关键词指数
  • 用axure怎么做h5网站/今天最新新闻报道
  • 凡科做网站需要备案吗/中文域名交易网站
  • 网站海外推广平台/搜索引擎优化指的是
  • 一级a做爰片迅雷网站/网销平台排名
  • php网站如何做特效/打广告在哪里打最有效