gauss_test.png

如图,需要对数据集生成对应的 HeatMap 数据,中心点值为1,向四周生成一个高斯分布。

高斯分布又叫正态分布,最近武汉新型冠状病毒的确诊人数应该就是一个很类似正态分布的图,虽然还不知道什么时候会是高峰期。

正态分布的概率密度函数为 $$f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^\frac{(x-\mu)^2}{2\sigma^2}$$,对应图像如下:

Normal Distribution PDF

根据这个公式,就可以写出生成一维高斯分布的函数:

def get_gauss(n):
    u = 0  # 均值μ
    sig = math.sqrt(1)  # 标准差δ
    x = np.linspace(u - 3*sig, u + 3*sig, n)
    y = np.exp(-(x - u) ** 2 / (2 * sig ** 2))/(math.sqrt(2*math.pi)*sig)
    y = normalize(y)
    return y

注意此时生成的高斯分布数据还需要进行归一化:

def normalize(x):
    max = x.max()
    min = x.min()
    return (x - min) / (max - min)

最后将两个一维的高斯分布矩阵相乘即可,完整代码如下:

import numpy as np
import math
import cv2


def normalize(x):
    max = x.max()
    min = x.min()
    return (x - min) / (max - min)


def get_gauss(n):
    u = 0  # 均值μ
    sig = math.sqrt(1)  # 标准差δ
    x = np.linspace(u - 3*sig, u + 3*sig, n)
    y = np.exp(-(x - u) ** 2 / (2 * sig ** 2))/(math.sqrt(2*math.pi)*sig)
    y = normalize(y)
    return y


if __name__ == "__main__":
    WIDTH = 64
    HEIGHT = 128
    gauss1 = get_gauss(WIDTH).reshape(WIDTH, 1)
    gauss2 = get_gauss(HEIGHT).reshape(1, HEIGHT)
    # print(gauss1.shape, gauss2.shape)
    gauss_matrix = gauss1 * gauss2
    gauss_matrix = gauss_matrix * 255
    print(gauss_matrix.shape)
    cv2.imwrite('gauss_test.png', gauss_matrix)

标签: 深度学习, python, 图像处理, 高斯模糊, 数据处理

添加新评论