博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gaussBlur
阅读量:5039 次
发布时间:2019-06-12

本文共 1924 字,大约阅读时间需要 6 分钟。

 

The key is: double t = fixed_kernel ? (double)fixed_kernel[i] : std::exp(scale2X*x*x);

Gaussian formula: std::exp(scale2X*x*x);

 

cv::Mat cv::getGaussianKernel( int n, double sigma, int ktype ){    const int SMALL_GAUSSIAN_SIZE = 7;    static const float small_gaussian_tab[][SMALL_GAUSSIAN_SIZE] =    {        {1.f},        {0.25f, 0.5f, 0.25f},        {0.0625f, 0.25f, 0.375f, 0.25f, 0.0625f},        {0.03125f, 0.109375f, 0.21875f, 0.28125f, 0.21875f, 0.109375f, 0.03125f}    };          /*如果sigma小于0,且n为不大于7的奇整数,则核的滤波系数固定了,其固定在数组        small_gaussian_tab中,根据其n的长度来选择具体的值 ,如果不满足上面的,则固定核为0        固定核为0表示自己计算其核*/             const float* fixed_kernel = n % 2 == 1 && n <= SMALL_GAUSSIAN_SIZE && sigma <= 0 ?        small_gaussian_tab[n>>1] : 0;    CV_Assert( ktype == CV_32F || ktype == CV_64F );//确保核元素为32位浮点数或者64位浮点数    Mat kernel(n, 1, ktype);//建立一个n*1的数组kernel,一个Mat矩阵包括一个矩阵头和一个指向矩阵元素的指针    float* cf = (float*)kernel.data;//定义指针cf指向kernel单精度浮点型数据    double* cd = (double*)kernel.data;//定义指针cd指向kernerl双精度浮点型数据    double sigmaX = sigma > 0 ? sigma : ((n-1)*0.5 - 1)*0.3 + 0.8;//当sigma小于0时,采用公式得到sigma(只与n有关)    double scale2X = -0.5/(sigmaX*sigmaX);//高斯表达式后面要用到    double sum = 0;    int i;    for( i = 0; i < n; i++ )    {        double x = i - (n-1)*0.5;        //如果自己算其核的话,就常用公式exp(scale2X*x*x)计算,否则就用固定系数的核        double t = fixed_kernel ? (double)fixed_kernel[i] : std::exp(scale2X*x*x);        if( ktype == CV_32F )        {            cf[i] = (float)t;//单精度要求时存入cf数组中            sum += cf[i];//进行归一化时要用到        }        else        {            cd[i] = t;//双精度时存入cd数组中            sum += cd[i];        }    }    sum = 1./sum;//归一化时核中各元素之和为1    for( i = 0; i < n; i++ )    {        if( ktype == CV_32F )            cf[i] = (float)(cf[i]*sum);//归一化后的单精度核元素        else            cd[i] *= sum;//归一化后的双精度核元素    }    return kernel;//返回n*1的数组,其元素或是单精度或是双精度,且符合高斯分布}

 

转载于:https://www.cnblogs.com/stevenxiu/p/5591005.html

你可能感兴趣的文章
HDU 1017[A Mathematical Curiosity]暴力,格式
查看>>
[算法之美] KMP算法的直观理解
查看>>
EntityFramework 性能优化
查看>>
【ASP.NET开发】菜鸟时期的ADO.NET使用笔记
查看>>
self introduction
查看>>
jquery获取select标签被选中的值
查看>>
maven的安装与配置
查看>>
程序员应该读的书
查看>>
find
查看>>
jquery - 2
查看>>
【待整理】python 关键字
查看>>
Codeforces Round #424 E. Cards Sorting 线段树/数据结构瞎搞/模拟
查看>>
依赖注入 批量注册
查看>>
[AWDwR4] Getting AJAX to work in Rails 3 with jQuery
查看>>
CentOS 安装配置TFTP
查看>>
VMware中ubuntu忘记密码的解决办法
查看>>
navicat for mysql快捷键
查看>>
OI再见
查看>>
自定义单选框或者复选框
查看>>
xml知识点
查看>>