包含python二维高斯函数的词条

如何生成二维高斯与 Python

在图像处理以及图像特效中,经常会用到一种成高斯分布的蒙版,蒙版可以用来做图像融合,将不同内容的两张图像结合蒙版,可以营造不同的艺术效果。

创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的苏尼特右网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

I=M∗F+(1−M)∗B

这里I 表示合成后的图像,F 表示前景图,B 表示背景图,M 表示蒙版,或者直接用 蒙版与图像相乘, 形成一种渐变映射的效果。如下所示。

I=M∗F

这里介绍一下高斯分布蒙版的特性,并且用Python实现。

高斯分布的蒙版,简单来说,就是一个从中心扩散的亮度分布图,如下所示:

亮度的范围从 1 到 0, 从中心到边缘逐渐减弱,中心的亮度值最高为1,边缘的亮度值最低为 0. 图像上任何一点的亮度值为:

G(i,j)=exp−d2R

其中 i,j 表示图像上任何一点的坐标,以左上角为坐标原点,d 表示 图像上任何一点 到图像中心点的距离,R 表示图像的半径。假设图像的高为 H 宽为 W

R=(H/2)2+(W/2)2−−−−−−−−−−−−−−√=12H2+W2−−−−−−−−√

d=(i−H/2)2+(j−W/2)2−−−−−−−−−−−−−−−−−−−√

IMAGE_WIDTH = 512IMAGE_HEIGHT = 392center_x = IMAGE_WIDTH/2center_y = IMAGE_HEIGHT/2R = np.sqrt(center_x**2 + center_y**2)Gauss_map = np.zeros((IMAGE_HEIGHT, IMAGE_WIDTH))# 利用 for 循环 实现for i in range(IMAGE_HEIGHT):

for j in range(IMAGE_WIDTH):

dis = np.sqrt((i-center_y)**2+(j-center_x)**2)

Gauss_map[i, j] = np.exp(-0.5*dis/R)# 直接利用矩阵运算实现mask_x = np.matlib.repmat(center_x, IMAGE_HEIGHT, IMAGE_WIDTH)mask_y = np.matlib.repmat(center_y, IMAGE_HEIGHT, IMAGE_WIDTH)x1 = np.arange(IMAGE_WIDTH)x_map = np.matlib.repmat(x1, IMAGE_HEIGHT, 1)y1 = np.arange(IMAGE_HEIGHT)y_map = np.matlib.repmat(y1, IMAGE_WIDTH, 1)y_map = np.transpose(y_map)Gauss_map = np.sqrt((x_map-mask_x)**2+(y_map-mask_y)**2)Gauss_map = np.exp(-0.5*Gauss_map/R)# 显示和保存生成的图像plt.figure()

plt.imshow(Gauss_map, plt.cm.gray)

plt.imsave('out_2.jpg', Gauss_map, cmap=plt.cm.gray)

plt.show()

高斯核函数的计算机视觉中的作用

在计算机视觉中,有时也简称为高斯函数。高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:

(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.

(2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.

(3)高斯函数的傅立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数傅里叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.

(4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.

(5)由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.

高斯函数、高斯积分和正态分布

正态分布是高斯概率分布。高斯概率分布是反映中心极限定理原理的函数,该定理指出当随机样本足够大时,总体样本将趋向于期望值并且远离期望值的值将不太频繁地出现。高斯积分是高斯函数在整条实数线上的定积分。这三个主题,高斯函数、高斯积分和高斯概率分布是这样交织在一起的,所以我认为最好尝试一次性解决这三个主题(但是我错了,这是本篇文章的不同主题)。本篇文章我们首先将研究高斯函数的一般定义是什么,然后将看一下高斯积分,其结果对于确定正态分布的归一化常数是非常必要的。最后我们将使用收集的信息理解,推导出正态分布方程。

首先,让我们了解高斯函数实际上是什么。高斯函数是将指数函数 exp(x) 与凹二次函数(例如 -(ax^2+bx+c) 或 -(ax^2+bx) 或只是-ax^2组成的函数。结果是一系列呈现“钟形曲线”的形状的函数。

两个高斯函数的图。第一个高斯(绿色)的λ=1和a=1。第二个(橙色)λ=2和a=1.5。两个函数都不是标准化的。也就是说,曲线下的面积不等于1。

大多数人都熟悉这类曲线是因为它们在概率和统计中被广泛使用,尤其是作为正态分布随机变量的概率密度函数。在这些情况下,函数具有的系数和参数既可以缩放“钟形”的振幅,改变其标准差(宽度),又可以平移平均值,所有这一切都是在曲线下的面积进行归一化(缩放钟形,使曲线下的面积总是等于1)的同时进行的。结果是一个高斯函数包含了一大堆的参数来影响这些结果。

如果将其认为是均值 = μ 且标准差 = σ 的正态分布方程。将其与高斯 λ exp(-ax^2) 的一般形式进行比较,我们可以看到:

前导系数 λ 有时表示为 1/Z,其中 Z=√2πσ 2,正是这样的一个结果将我们带到了本文的主要观点之一:√2πσ 2有时被称为一个自变量的正态分布的归一化常数,而1/√2πσ2则被称为归一化常数。在这两种情况下,公式中都有 π,它是从哪里来的?它通常与圆、径向对称和/或极坐标相关联。单个变量的函数如何以 π 作为其在前导系数中的归一化参数之一呢?

可以参考我们以前的文章,里面有非常详细的描述

不定积分 ∫ exp(x^2) dx 不可能用初等函数求解。有没有任何积分方法可以用来求解不定积分?

可以计算定积分,如上所述,首先对高斯函数求平方从而在 x 和 y 中产生一个具有径向对称二维图的两个变量函数。这样能够将直角坐标系转换为极坐标,在此基础上就可以使用更熟悉的积分方法(例如置换)进行积分。然后,简单地取结果的平方根(因为我们在开始时对积分进行平方) 就得到了我们的答案,顺便说一句,结果是是√π。

方法的第一步是对积分求平方——也就是说,我们将一维转换为二维,这样就可以使用多变量微积分的技术来求解积分

可以重写为:

这两个积分用x和y表示是等价的;所以它等同于x的单个积分的平方。因为变量x和y是独立的,所以可以把它们移进或移出第二个积分符号,可以这样写:

如果你不熟悉如何解二重积分也不用担心。只需先使用内部变量进行积分得到单个积分。然后用左边的变量和外面的变量积分。但现在还不需要这么做。这里需要注意的是当我们对积分进行平方时,得到了一个二维的图形化的径向对称的高斯函数。用x和y来表示积分e的指数是- (x 2+y 2)给了我们下一步应该做什么的线索。

这里棘手的部分是,我们必须将直角坐标下的二重积分转换成极坐标下的二重积分。

为了在极坐标中对整个无限区域进行积分,我们首先对 exp(−r²) 相对于从 x=0 开始并延伸到无穷大的半径 r 进行积分。结果是一个无限薄的楔形,看起来像我们原始一维高斯曲线的一半。然后我们围绕旋转轴 Z 轴旋转楔形,并累积无限数量的这些极薄的楔形。也就是说——我们在 π 从 0 到 2π 时积分。

我们现在的二重积分看起来像这样:

我们可以用 r^2 替换指数中的 −(x 2+y 2),这要感谢毕达哥拉斯。但是我们仍然需要将我们的微分从矩形转换为极坐标。

微分的转换简单的表示如下:

在任何情况下,我们的二重积分现在看起来像这样:

添加适当的积分边界:

如果我们设u=r^2,那么du=2r,我们可以写成(对于内积分)

然后求出外积分:

所以:

我们在下一节求解标准化常数时,这个结果很重要。

现在我们有了推导正态分布函数的所有前提。下面将分两步来做:首先确定我们需要的概率密度函数。这意味着以λ为单位重新转换-a-产生的函数,无论为λ选择什么值,曲线下的面积总是1。然后用随机变量的方差σ^2来转换λ。对整个实数线上的方差进行积分 从而得到我们在前导系数 √2πσ^2 中需要归一化常数的项,也是我们在分母中需要的项指数 2σ^2。我们将使用分部积分来求解方差积分。

我们将从广义高斯函数f(x)=λ exp(−ax^2)开始,正态分布下的面积必须等于1所以我们首先设置广义高斯函数的值,对整个实数线积分等于1

这里将 -a- 替换为 a^2 稍微修改了高斯分布。为什么要这样做?因为它可以使用 换元积分 U-substitution 来解决这个积分。为什么我们可以这样做?因为 -a- 是一个任意常数,所以a^2 也只是一个任意常数,可以使用 U-substitution 求解。让 u=ax 和 du=a dx 这意味着 dx=du/a, 由于 λ 和 1/a 是常数,我们可以将它们移到积分符号之外,得到:

我们从上面关于高斯积分的讨论中知道,右边积分的值等于√π。这样就可以改成:

求解 -a- 可以这样写:

根据已经发现的λ 和 -a- 之间的关系,修改后的高斯下的面积总是等于 1 也是必须的,所以我们可以进一步修改,用 πλ^2 代替 a^2 并写:

无论 λ 的值如何,该曲线下的面积始终为 1。这是我们的概率密度函数。

在获得归一化概率分布函数之前还需要做一件事:必须将 λ 重写为随机变量方差 σ^2 的函数。这将涉及对整个实数线的方差表达式进行积分所以需要采用按分部积分来完成此操作。

如果给定一个概率密度函数 f(x) 和一个均值 μ,则方差定义为从均值平方(x - μ)^2的偏差乘以整个实数线的概率密度函数f(x)的积分:

假设μ=0,因为已经有了概率密度函数h(x),所以可以写成

用分部积分法求解这个积分有:

第一项归零是因为指数中的x^2项比前一项分子中的- x项趋近于∞的速度快得多所以我们得到

右边的被积函数是概率密度函数,已经知道当对整个实数线进行积分时它的值是1 :

求解 λ 得到:

将 λ 的 1/√2πσ^2 代入我们的修改后的公式(即我们的概率密度函数),我们得到:

剩下要做的就是将平均值 μ 放入指数的分子中,以便可以根据 μ 的值沿 x 轴平移图形:

这样就完成了方程推导

作者 :Manin Bocss

怎么用python表示出二维高斯分布函数,mu表示均值,sigma表示协方差矩阵,x表示数据点

clear 

close all

%%%%%%%%%%%%%%%%%%%%%%%%%生成实验数据集

rand('state',0)

sigma_matrix1=eye(2);

sigma_matrix2=50*eye(2);

u1=[0,0];

u2=[30,30];

m1=100;

m2=300;%样本数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sm1数据集

Y1=multivrandn(u1,m1,sigma_matrix1);

Y2=multivrandn(u2,m2,sigma_matrix2);

scatter(Y1(:,1),Y1(:,2),'bo')

hold on

scatter(Y2(:,1),Y2(:,2),'r*')

title('SM1数据集')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sm2数据集

u11=[0,0];

u22=[5,5];

u33=[10,10];

u44=[15,15];

m=600;

sigma_matrix3=2*eye(2);

Y11=multivrandn(u11,m,sigma_matrix3);

Y22=multivrandn(u22,m,sigma_matrix3);

Y33=multivrandn(u33,m,sigma_matrix3);

Y44=multivrandn(u44,m,sigma_matrix3);

figure(2)

scatter(Y11(:,1),Y11(:,2),'bo')

hold on

scatter(Y22(:,1),Y22(:,2),'r*')

scatter(Y33(:,1),Y33(:,2),'go')

scatter(Y44(:,1),Y44(:,2),'c*')

title('SM2数据集')

end

function Y = multivrandn(u,m,sigma_matrix)

%%生成指定均值和协方差矩阵的高斯数据

n=length(u);

c = chol(sigma_matrix);

X=randn(m,n);

Y=X*c+ones(m,1)*u;

end

怎么用MATLAB产生2维或者多维的高斯分布数据

x=randn(m,n)就是二维的高斯分布函数,例如:

x=randn(5,6)便产生5行6列的二维的 高斯分布函数:

ans =

-0.4326 1.1909 -0.1867 0.1139 0.2944 0.8580

-1.6656 1.1892 0.7258 1.0668 -1.3362 1.2540

0.1253 -0.0376 -0.5883 0.0593 0.7143 -1.5937

0.2877 0.3273 2.1832 -0.0956 1.6236 -1.4410

-1.1465 0.1746 -0.1364 -0.8323 -0.6918 0.5711

三维的:randn(m,n,p);依此类推。

例如randn(2,3,4):

ans(:,:,1) =

-0.3999 0.8156 1.2902

0.6900 0.7119 0.6686

ans(:,:,2) =

1.1908 -0.0198 -1.6041

-1.2025 -0.1567 0.2573

ans(:,:,3) =

-1.0565 -0.8051 0.2193

1.4151 0.5287 -0.9219

ans(:,:,4) =

-2.1707 -1.0106 0.5077

-0.0592 0.6145 1.6924

当然也可以自己构造两个一维的数据,再自己把之相乘,合成一个二维的数据,但是最简单的方法,还是直接用函数randn(),

给出的是均值为0,方差为1的高斯正态函数的分布的数值。


网站名称:包含python二维高斯函数的词条
本文地址:http://myzitong.com/article/dsssdjc.html