C++图像处理之双边滤波

 更新时间:2021年10月11日 10:22:13   作者:Asimov_Liu  
这篇文章主要为大家详细介绍了C++图像处理之双边滤波,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++图像处理之双边滤波的具体代码,供大家参考,具体内容如下

1、 近期在学习双边滤波相关知识,其原理如下(以后补上):

2 、灰度图双边滤波实现C++代码如下,网上大多数是基于8位灰度图和彩色图像的。(此次代码未经优化,可去除opencv依赖):

//灰度图双边滤波
void m_bilateralFilter(cv::Mat src,cv::Mat& dst,int radius,float sigma_r,float sigma_d)
{
 if (src.empty())
  return;
 if (dst.empty())
 {
  dst = src.clone();
 }
 if (src.depth() == CV_16U){
  for (int i = radius; i < src.rows - radius; i++)
   for (int j = radius; j < src.cols - radius; j++)
   {
    float sum_1 = .0f, sum_2 = .0f;
    for (int k = 0; k < 2 * radius - 1; k++)
     for (int l = 0; l < 2 * radius - 1; l++)
     {
      int dis_x = radius - k;
      int dis_y = radius - l;
      int coord_x_image = i - radius + k;
      int coord_y_image = j - radius + l;
      float dis_spatial = dis_x*dis_x + dis_y*dis_y;
      float dis_range = (src.at<unsigned short>(i, j)
       - src.at<unsigned short>(coord_x_image, coord_y_image))*(src.at<unsigned short>(i, j)
       - src.at<unsigned short>(coord_x_image, coord_y_image));
      float c_tmp = exp(-dis_spatial /
       (2 * sigma_d * sigma_d));
      float s_tmp = exp(-dis_range /
       (2 * sigma_r * sigma_r));
      sum_1 += c_tmp*s_tmp*src.at<unsigned short>(coord_x_image, coord_y_image);
      sum_2 += c_tmp*s_tmp;
 
     }
    dst.at<unsigned short>(i, j) = sum_1 / sum_2;
   }
 }
 else if (src.depth() == CV_8U)
 {
  for (int i = radius; i < src.rows - radius; i++)
   for (int j = radius; j < src.cols - radius; j++)
   {
    float sum_1 = .0f, sum_2 = .0f;
    for (int k = 0; k < 2 * radius - 1; k++)
     for (int l = 0; l < 2 * radius - 1; l++)
     {
      int dis_x = radius - k;
      int dis_y = radius - l;
      int coord_x_image = i - radius + k;
      int coord_y_image = j - radius + l;
      float dis_spatial = dis_x*dis_x + dis_y*dis_y;
      float dis_range = (src.at<unsigned char>(i, j)
       - src.at<unsigned char>(coord_x_image, coord_y_image))*(src.at<unsigned char>(i, j)
       - src.at<unsigned char>(coord_x_image, coord_y_image));
      float c_tmp = exp(-dis_spatial /
       (2 * sigma_d * sigma_d));
      float s_tmp = exp(-dis_range /
       (2 * sigma_r * sigma_r));
      sum_1 += c_tmp*s_tmp*src.at<unsigned char>(coord_x_image, coord_y_image);
      sum_2 += c_tmp*s_tmp;
 
     }
    dst.at<unsigned char>(i, j) = sum_1 / sum_2;
   }
 }
}

3、目前是基于单通道图像,效果如下:

原图:

opencv 库的效果(cv::bilateralFilter(img_src, img_dst, 10,10 * 2, 10 / 2))

该程序的效果(m_bilateralFilter(img_src, img_dst, 5, 10 * 2, 10 / 2))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++静态库与动态库文件的生成和使用教程

    C++静态库与动态库文件的生成和使用教程

    库文件是计算机上的一类文件,可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数和类,下面这篇文章主要给大家介绍了关于C++静态库与动态库文件的生成和使用的相关资料,需要的朋友可以参考下
    2023-03-03
  • C++ sqlite3数据库配置使用教程

    C++ sqlite3数据库配置使用教程

    SQLite 是一种嵌入式的关系型数据库管理系统,它是一个开源项目,已经被广泛应用于各种应用程序和操作系统中,这篇文章主要介绍了C++ sqlite3数据库配置使用,需要的朋友可以参考下
    2023-08-08
  • C语言进阶教程之预处理

    C语言进阶教程之预处理

    C语言提供了多种预处理功能,如宏定义、文件包含、条件编译等,下面这篇文章主要给大家介绍了关于C语言进阶教程之预处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • C++ 打开选择文件夹对话框选择目录的操作

    C++ 打开选择文件夹对话框选择目录的操作

    这篇文章主要介绍了C++ 打开选择文件夹对话框选择目录的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • C语言从txt文件中逐行读入数据存到数组中的实现方法

    C语言从txt文件中逐行读入数据存到数组中的实现方法

    下面小编就为大家带来一篇C语言从txt文件中逐行读入数据存到数组中的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 浅析结束程序函数exit, _exit,atexit的区别

    浅析结束程序函数exit, _exit,atexit的区别

    在一个程序中最多可以用atexit()注册32个处理函数,这些处理函数的调用顺序与其注册的顺序相反,也即最先注册的最后调用,最后注册的最先调用
    2013-09-09
  • C语言 递归实现排雷游戏

    C语言 递归实现排雷游戏

    扫雷是电脑上很经典很经典的传统老游戏,从小编第一次摸到计算机开始就玩过扫雷,虽然当时并不理解玩法原理,但终是第一次玩电脑游戏,下面来从扫雷的前世今生讲起
    2021-11-11
  • C++关键字typename的深入理解

    C++关键字typename的深入理解

    本篇文章是对C++中的关键字typename进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • c++实现一个简易的网络缓冲区的实践

    c++实现一个简易的网络缓冲区的实践

    这篇文章主要介绍了c++实现一个简易的网络缓冲区的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • C++关键字mutable学习笔记

    C++关键字mutable学习笔记

    这篇文章主要为大家介绍了C++关键字mutable学习笔记,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论