borderType= None)函数
此函数利用高斯滤波器平滑一张图像.该函数将源图像与指定的高斯核进行卷积.
src:输入图像
ksize:(核的宽度,核的高度),输入高斯核的尺寸,核的宽高都必须是正奇数.否则,将会从参数sigma中计算得到.
dst:输出图像,尺寸与输入图像一致.
sigmaX:高斯核在X方向上的标准差.
sigmaY:高斯核在Y方向上的标准差.默认为None,如果sigmaY=0,则它将被设置为与sigmaX相等的值.如果这两者都为0,则它们的值会从ksize中计算得到.计算公式为:
borderType:像素外推法,默认为None(参考官方文档 BorderTypes
)
在图像处理中,高斯滤波主要有两种方式:
①窗口滑动卷积
在此主要利用窗口滑动卷积.其中二维高斯函数公式为:
从图像的角度来说,高斯核的标准差 越大,平滑效果越不明显.高斯核的标准差 越小,平滑效果越明显.
可见,标准差 越大,图像平滑程度越大
参考博客1:关于GaussianBlur函数
本文翻译自
上一节中探讨的k-means聚类模型简单易懂,但其简单性导致其应用中存在实际挑战.具体而言,k-means的非概率特性及简单地计算点与类蔟中心的欧式距离来判定归属,会导致其在许多真实的场景中性能较差.本节,我们将探讨高斯混合模型(GMMs),其可以看成k-means的延伸,更可以看成一个强有力的估计工具,而不仅仅是聚类.
我们将以一个标准的import开始
我们看下k-means的缺陷,思考下如何提高聚类模型.正如上一节所示,给定简单,易于分类的数据,k-means能找到合适的聚类结果.
举例而言,假设我们有些简单的数据点,k-means算法能以某种方式很快地将它们聚类,跟我们肉眼分辨的结果很接近:
从直观的角度来看,我可能期望聚类分配时,某些点比其他的更确定:举例而言,中间两个聚类之间似乎存在非常轻微的重叠,这样我们可能对这些数据点的分配没有完全的信心.不幸的是,k-means模型没有聚类分配的概率或不确定性的内在度量(尽管可能使用bootstrap 的方式来估计这种不确定性).为此,我们必须考虑泛化这种模型.
k-means模型的一种理解思路是,它在每个类蔟的中心放置了一个圈(或者,更高维度超球面),其半径由聚类中最远的点确定.该半径充当训练集中聚类分配的一个硬截断:任何圈外的数据点不被视为该类的成员.我们可以使用以下函数可视化这个聚类模型:
观察k-means的一个重要发现,这些聚类模式必须是圆形的.k-means没有内置的方法来计算椭圆形或椭圆形的簇.所以呢,举例而言,假设我们将相同的数据点作变换,这种聚类分配方式最终变得混乱:
高斯混合模型(GMM)试图找到一个多维高斯概率分布的混合,以模拟任何输入数据集.在最简单的情况下,GMM可用于以与k-means相同的方式聚类.
但因为GMM包含概率模型,所以呢可以找到聚类分配的概率方式 - 在Scikit-Learn中,通过调用predict_proba方法实现.它将返回一个大小为[n_samples, n_clusters]的矩阵,用于衡量每个点属于给定类别的概率:
我们可以可视化这种不确定性,比如每个点的大小与预测的确定性成比例;如下图,我们可以看到正是群集之间边界处的点反映了群集分配的不确定性:
本质上说,高斯混合模型与k-means非常相似:它使用期望-最大化的方式,定性地执行以下操作:
有了这个,我们可以看看四成分的GMM为我们的初始数据提供了什么:
同样,我们可以使用GMM方法来拟合我们的拉伸数据集;允许full的协方差,该模型甚至可以适应非常椭圆形,伸展的聚类模式:
这清楚地表明GMM解决了以前遇到的k-means的两个主要实际问题.
如果看了之前拟合的细节,你将看到covariance_type选项在每个中都设置不同.该超参数控制每个类簇的形状的自由度;对于任意给定的问题,必须仔细设置.默认值为covariance_type ="diag",这意味着可以独立设置沿每个维度的类蔟大小,并将得到的椭圆约束为与轴对齐.一个稍微简单和快速的模型是covariance_type ="spherical",它约束了类簇的形状,使得所有维度都相等.尽管它并不完全等效,其产生的聚类将具有与k均值相似的特征.更复杂且计算量更大的模型(特别是随着维数的增长)是使用covariance_type ="full",这允许将每个簇建模为具有任意方向的椭圆.
对于一个类蔟,下图我们可以看到这三个选项的可视化表示:
尽管GMM通常被归类为聚类算法,但从根本上说它是一种密度估算算法.也就是说,GMM适合某些数据的结果在技术上不是聚类模型,而是描述数据分布的生成概率模型.
例如,考虑一下Scikit-Learn的make_moons函数生成的一些数据:
如果我们尝试用视为聚类模型的双成分的GMM模拟数据,则结果不是特别有用:
但是如果我们使用更多成分的GMM模型,并忽视聚类的类别,我们会发现更接近输入数据的拟合:
GMM非常方便,可以灵活地建模任意多维数据分布.
GMM是一种生成模型这一事实为我们提供了一种确定给定数据集的最佳组件数的自然方法.生成模型本质上是数据集的概率分布,所以呢我们可以简单地评估模型下数据的可能性,使用交叉验证来避免过度拟合.校正过度拟合的另一种方法是使用一些分析标准来调整模型可能性,例如 Akaike information criterion (AIC) 或 Bayesian information criterion (BIC) .Scikit-Learn的GMM估计器实际上包含计算这两者的内置方法,所以呢在这种方法上操作非常容易.
让我们看看在moon数据集中,使用AIC和BIC函数确定GMM组件数量:
注意重点:这个组件数量的选择衡量GMM作为密度估算器的效果,而不是它作为聚类算法的效果.我鼓励您将GMM主要视为密度估算器,并且只有在简单数据集中保证时才将其用于聚类.
我们刚刚看到了一个使用GMM作为数据生成模型的简单示例,以便根据输入数据定义的分布创建新样本.今天这一节,我们将运行这个想法,并从我们以前使用过的标准数字语料库中生成新的手写数字.
首先,让我们使用Scikit-Learn的数据工具加载数字数据:
此时此刻呢让我们绘制前100个,以准确回忆我们正在看的内容:
似乎大约110个components最小化了AIC;我们将使用这个模型.我们迅速将其与数据拟合并确保它已收敛合:
最后,我们可以使用PCA对象的逆变换来构造新的数字:
大部分结果看起来像数据集中合理的数字!
考虑一下我们今天这一节做了什么:给定一个手写数字的样本,我们已经模拟了数据的分布,这样我们就可以从数据中生成全新的数字样本:这些是"手写数字",不是单独的出现在原始数据集中,而是捕获混合模型建模的输入数据的一般特征.这种数字生成模型可以证明作为贝叶斯生成分类器的一个组成部分非常有用,我们将在下一节中看到.
clear?
close?all
%%%%%%%%%%%%%%%%%%%%%%%%%生成实验数据集
rand('state',0)
u1=[0,0];
m1=100;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sm1数据集
Y1=multivrandn(u1,m1,sigma_matrix1);
hold?on
title('SM1数据集')
u11=[0,0];
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;
clc;clear
all;
x=0:0.1:10;
t=1;
plot(x,y);
不知道t的具体含义,你在计算的时候改一下
如何用python实现图像的一维高斯滤波器
import numpy as np
import matplotlib.pyplot as plt
temp_x = np.random.randint(0,img.shape[0])
temp_y = np.random.randint(0,img.shape[1])
在图像处理以及图像特效中,经常会用到一种成高斯分布的蒙版,蒙版可以用来做图像融合,将不同内容的两张图像结合蒙版,可以营造不同的艺术效果.
I=M?F+(1?M)?B
这里I?表示合成后的图像,F?表示前景图,B?表示背景图,M?表示蒙版,或者直接用 蒙版与图像相乘, 形成一种渐变映射的效果.如下所示.
I=M?F
这里介绍一下高斯分布蒙版的特性,并且用Python实现.
高斯分布的蒙版,简单来说,就是一个从中心扩散的亮度分布图,如下所示:
亮度的范围从 1 到 0, 从中心到边缘逐渐减弱,中心的亮度值最高为1,边缘的亮度值最低为 0. 图像上任何一点的亮度值为:
其中?i,j?表示图像上任何一点的坐标,以左上角为坐标原点,d?表示 图像上任何一点 到图像中心点的距离,R?表示图像的半径.假设图像的高为?H?宽为?W
for j in range(IMAGE_WIDTH):
plt.imshow(Gauss_map, plt.cm.gray)
plt.show()
以上就是土嘎嘎小编为大家整理的python画高斯函数的简单介绍python画高斯函数的简单介绍相关咨询咨询主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!