高斯核原理详解+生成高斯核的Python代码

要搞清楚高斯核的原理的话,把下面这篇博文认认真真看一遍就可以了,链接如下:
https://blog.csdn.net/u013066730/article/details/123112159

下面是我认为值得注意和需要补充说明的几点:
1 为什么高斯滤波能够让图像实现模糊化?
答:高斯滤波本质是低通滤通(有兴趣的同学可以查阅高斯滤波器的频率响应函数),即让信号(数据集)的低频部分通过,高频部分滤除。图像的细节其实主要体现在高频部分,所以经过高斯滤波,图像看起来就变模糊了。

2 为什么很多文章中说生成高斯核时,我们通常取的范围就是-3个标准差到+3个标准差的范围。
答:因为高斯分布中变量值取-3个标准差到+3个标准差时,即-3sigma到3sigma区间内时,就占整个分布的99.8%了,我们就大致认为该段分布已经包含了所有的情况。
高斯核原理详解+生成高斯核的Python代码_第1张图片
在这里插入图片描述

3 下面两幅截图中的159、273是怎么来的?
高斯核原理详解+生成高斯核的Python代码_第2张图片
高斯核原理详解+生成高斯核的Python代码_第3张图片
答:其实就是把矩阵中所有元素相加,咱们先验证下,再说为什么。

>> 2+4+5+4+2+4+9+12+9+4+5+12+15+12+5+4+9+12+9+4+2+4+5+4+2

ans =

   159

>> 

高斯核原理详解+生成高斯核的Python代码_第4张图片

>> 1+4+7+4+1+4+16+26+16+4+7+26+41+26+7+4+16+26+16+4+1+4+7+4+1

ans =

   273

>> 

高斯核原理详解+生成高斯核的Python代码_第5张图片
为什么矩阵中的每个元素都要除以一个常数呢?
答:这其实是做归一化操作,这里的归一化其实是权重归一化,如果我们不对核做权重归一化的操作话,那么我们做了相关运算或卷积运算之后像素值就有可能不在0~255的范围内,这是我们不希望出现的,所以要对核做权重归一化操作;另外,我们也不希望做了相关运算或卷积运算之后像素的值被线性压缩在一个小范围内,所我们也要对核做权重归一化操作。
PS:什么是相关运算、什么又是卷积运算?答:看下面这篇博文就能搞清楚了。
https://blog.csdn.net/zhuwei0710/article/details/68169317
实际上博文https://blog.csdn.net/u013066730/article/details/123112159从下面的内容开始,以实际例子回答了这个问题:
高斯核原理详解+生成高斯核的Python代码_第6张图片
4 是否需要仔细分析博文https://blog.csdn.net/u013066730/article/details/123112159对高斯核分离的原理介绍?
答:通常情况下不需要, 只需要知道高斯核分离的作用是加快运算速度。目前我们使用的图像处理工具MATLAB和OpenCV都自带高斯滤波函数,这些函数的内部是作了高斯核分离优化的。

5 标准差、均值相同,那么3阶高斯核、5阶高斯是否是惟一的?
答:不是惟一的。因为这还与我们在-3个标准差到+3个标准差的范围内取哪些变量值有关,比如我既可取-2,-1,0,1,2这五个点,也可以取-2.1,-1.1,0.1,1.1,2.1这五个点,显然,取值不一样,高斯核也不一样。

6 下面是自己用Python写的生成高斯核的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#作者微信/QQ 2487872782
#有问题可以联系作者交流
# 代码中涉及到函数meshgrid()的使用,不清楚地可以参考我的博文
# https://blog.csdn.net/wenhao_ir/article/details/124124717

import numpy as np
import sys

kernel_size = 5
sigma = 1

if sigma == 0:
    print('Error!The value of sigma cannot be zero.')
    sys.exit()
else:
    sigma_3 = 3 * sigma
    X = np.linspace(-sigma_3, sigma_3, kernel_size)
    Y = np.linspace(-sigma_3, sigma_3, kernel_size)
    x, y = np.meshgrid(X, Y)
    gauss_1 = 1 / (2 * np.pi * sigma ** 2) * np.exp(- (x ** 2 + y ** 2) / (2 * sigma ** 2))
    Z = gauss_1.sum() #计算归一化系数
    gauss_2 = (1/Z)*gauss_1
    

代码运行结果如下:
高斯核原理详解+生成高斯核的Python代码_第7张图片
高斯核原理详解+生成高斯核的Python代码_第8张图片

你可能感兴趣的:(图像处理原理,工具,代码,高斯核)