高斯坐标自然值计算_高斯卷积的可分离性(六十八)

1、什么是高斯滤波器

81e7081456386f3efceb40479972c194.png

其中(x,y)" role="presentation" style=" box-sizing: border-box; outline: 0px; display: inline; line-height: normal; word-spacing: normal; overflow-wrap: break-word; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">(x,y)为点坐标,在图像处理中可认为是整数;σσ" role="presentation" style=" box-sizing: border-box; outline: 0px; display: inline; line-height: normal; word-spacing: normal; overflow-wrap: break-word; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; ">σ是标准差。要想得到一个高斯滤波器的模板,可以对高斯函数进行离散化,得到的高斯函数值作为模板的系数。例如:要产生一个3x3的高斯滤波器模板,以模板的中心位置为坐标原点进行取样。模板在各个位置的坐标,如下所示(x轴水平向右,y轴竖直向下)

313432df34e4347c1b819510cedf06fc.png

这样,将各个位置的坐标带入到高斯函数中,得到的值就是模板的系数。对于窗口模板的大小为 (2k+1)x(2k+1),模板中各个元素值的计算公式如下:

225805158659dfea107d3ab231275274.png

2、高斯卷积的可分离性

对图像?(?, ?)与ℎ(?, ?)进行卷积与运算,记边界索引? = (? − 1)/2,即:

0e63b7904ba20fe13d7d3eaf984e2c78.png

c8b889421a15b2eedb51a668d82f05f8.png

3、运算量分析

3.1 直接进行二维卷积

3d1aa5677a5525c0097b628f54dbd049.png396f0b4d36c5b678add24210f00ddb8d.png237bb774f3fe6aa34ca4ce8a2fc53ed0.png28b679046060df82a7b92b0d42e5f9c6.png

3.2 两次一维卷积

f47d6c26d979d281cf7a7d75c29fa324.png081096427cdfd984cf67f41fa259a4f0.png39ee21793d08ed6506249f96d16a60e5.png

3.3、关于减少运算量的解释

8a198610c4fa8b62f0512c5000918681.png
相比于直接使用二维卷积,虽然当卷积函数具有一定对称性时,也具有简化的空间,但是一般而言,直接进行二维卷积是无法进行计算值复用的,这使得二维可分离卷积分离后的运算量更小。

4、高斯滤波器的使用

4.1

int main(void){
        // [1] src读入图片    cv::Mat src = cv::imread("Gaussian_pic.jpg");    // [2] dst目标图片    cv::Mat dst;    cv::Mat dst2 = src.clone();    // [3] 高斯滤波  sigma越大越平越模糊    myGaussianFilterFast(&src, &dst, 53, 2.0f, 2.0f);    // [4] 窗体显示    cv::imshow("src", src);    cv::imshow("dst", dst);    cv::waitKey(0);    cv::destroyAllWindows();    return 0;}
void myGaussianFilterFast(cv::Mat *src, cv::Mat *dst, int n, double sigmaX, double sigmaY){
        // [1] 初始化    *dst = (*src).clone();    // [2] 彩色图片通道分离    std::vector<:mat> channels;    cv::split(*src, channels);  
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值