亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++圖像處理之雙邊濾波

 更新時間:2021年10月11日 10:22:13   作者:Asimov_Liu  
這篇文章主要為大家詳細介紹了C++圖像處理之雙邊濾波,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++圖像處理之雙邊濾波的具體代碼,供大家參考,具體內(nèi)容如下

1、 近期在學習雙邊濾波相關(guān)知識,其原理如下(以后補上):

2 、灰度圖雙邊濾波實現(xiàn)C++代碼如下,網(wǎng)上大多數(shù)是基于8位灰度圖和彩色圖像的。(此次代碼未經(jīng)優(yōu)化,可去除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))

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)之數(shù)組Array實例詳解

    數(shù)據(jù)結(jié)構(gòu)之數(shù)組Array實例詳解

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之數(shù)組Array實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 最新評論