扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如何用python实现图像的一维高斯滤波器
龙游网站建设公司创新互联建站,龙游网站设计制作,有大型网站制作公司丰富经验。已为龙游上千多家提供企业网站建设服务。企业网站搭建\外贸网站制作要多少钱,请找那个售后服务好的龙游做网站的公司定做!
现在把卷积模板中的值换一下,不是全1了,换成一组符合高斯分布的数值放在模板里面,比如这时中间的数值最大,往两边走越来越小,构造一个小的高斯包。实现的函数为cv2.GaussianBlur()。对于高斯模板,我们需要制定的是高斯核的高和宽(奇数),沿x与y方向的标准差(如果只给x,y=x,如果都给0,那么函数会自己计算)。高斯核可以有效的出去图像的高斯噪声。当然也可以自己构造高斯核,相关函数:cv2.GaussianKernel().
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(‘flower.jpg‘,0) #直接读为灰度图像
for i in range(2000): #添加点噪声
temp_x = np.random.randint(0,img.shape[0])
temp_y = np.random.randint(0,img.shape[1])
img[temp_x][temp_y] = 255
blur = cv2.GaussianBlur(img,(5,5),0)
plt.subplot(1,2,1),plt.imshow(img,‘gray‘)#默认彩色,另一种彩色bgr
plt.subplot(1,2,2),plt.imshow(blur,‘gray‘)
borderType= None)函数
此函数利用高斯滤波器平滑一张图像。该函数将源图像与指定的高斯核进行卷积。
src:输入图像
ksize:(核的宽度,核的高度),输入高斯核的尺寸,核的宽高都必须是正奇数。否则,将会从参数sigma中计算得到。
dst:输出图像,尺寸与输入图像一致。
sigmaX:高斯核在X方向上的标准差。
sigmaY:高斯核在Y方向上的标准差。默认为None,如果sigmaY=0,则它将被设置为与sigmaX相等的值。如果这两者都为0,则它们的值会从ksize中计算得到。计算公式为:
borderType:像素外推法,默认为None(参考官方文档 BorderTypes
)
在图像处理中,高斯滤波主要有两种方式:
1.窗口滑动卷积
2.傅里叶变换
在此主要利用窗口滑动卷积。其中二维高斯函数公式为:
根据上述公式,生成一个3x3的高斯核,其中最重要的参数就是标准差 ,标准差 越大,核中心的值与周围的值差距越小,曲线越平滑。标准差 越小,核中心的值与周围的值差距越大,曲线越陡峭。
从图像的角度来说,高斯核的标准差 越大,平滑效果越不明显。高斯核的标准差 越小,平滑效果越明显。
可见,标准差 越大,图像平滑程度越大
参考博客1:关于GaussianBlur函数
参考博客2:关于高斯核运算
高斯函数的形式为:
其中a、b与c为实数常数,且a 0。
c= 2的高斯函数是傅立叶变换的特征函数。这就意味着高斯函数的傅立叶变换不仅仅是另一个高斯函数,而且是进行傅立叶变换的函数的标量倍。
高斯函数属于初等函数,但它没有初等不定积分。但是仍然可以在整个实数轴上计算它的广义积分:
扩展资料
高斯函数的应用:
高斯函数的不定积分是误差函数。在自然科学、社会科学、数学以及工程学等领域都有高斯函数的身影,这方面的例子包括:
在统计学与机率论中,高斯函数是正态分布的密度函数,根据中心极限定理它是复杂总和的有限机率分布。
高斯函数是量子谐振子基态的波函数。
高斯函数与量子场论中的真空态相关。
在光学以及微波系统中有高斯波束的应用。
设x∈R , 用 [x]或int(x)表示不超过x 的最大整数,并用{χ}表示x的非负纯小数,则 y= [x] 称为高斯(Guass)函数,也叫取整函数。(其中y={x}叫做小数部分函数,表示x的小数部分)
任意一个实数都能写成整数与非负纯小数之和,即:x= [x] + {χ}(0≤{x}1)
参考资料:百度百科-高斯函数
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
python做科学计算的特点:1. 科学库很全。(推荐学习:Python视频教程)
科学库:numpy,scipy。作图:matplotpb。并行:mpi4py。调试:pdb。
2. 效率高。
如果你能学好numpy(array特性,f2py),那么你代码执行效率不会比fortran,C差太多。但如果你用不好array,那样写出来的程序效率就只能呵呵了。所以入门后,请一定花足够多的时间去了解numpy的array类。
3. 易于调试。
pdb是我见过最好的调试工具,没有之一。直接在程序断点处给你一个截面,这只有文本解释语言才能办到。毫不夸张的说,你用python开发程序只要fortran的1/10时间。
4. 其他。
它丰富而且统一,不像C++的库那么杂(好比pnux的各种发行版),python学好numpy就可以做科学计算了。python的第三方库很全,但是不杂。python基于类的语言特性让它比起fortran等更加容易规模化开发。
数值分析中,龙格-库塔法(Runge-Kutta methods)是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家卡尔·龙格和马丁·威尔海姆·库塔于1900年左右发明。
龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法,其中包括著名的欧拉法,用于数值求解微分方程。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。
高斯积分是在概率论和连续傅里叶变换等的统一化等计算中有广泛的应用。在误差函数的定义中它也出现。虽然误差函数没有初等函数,但是高斯积分可以通过微积分学的手段解析求解。高斯积分(Gaussian integral),有时也被称为概率积分,是高斯函数的积分。它是依德国数学家兼物理学家卡尔·弗里德里希·高斯之姓氏所命名。
洛伦茨吸引子及其导出的方程组是由爱德华·诺顿·洛伦茨于1963年发表,最初是发表在《大气科学杂志》(Journal of the Atmospheric Sciences)杂志的论文《Deterministic Nonperiodic Flow》中提出的,是由大气方程中出现的对流卷方程简化得到的。
这一洛伦茨模型不只对非线性数学有重要性,对于气候和天气预报来说也有着重要的含义。行星和恒星大气可能会表现出多种不同的准周期状态,这些准周期状态虽然是完全确定的,但却容易发生突变,看起来似乎是随机变化的,而模型对此现象有明确的表述。
更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于python能做什么科学计算的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# -*- coding: utf-8 -*-
"""
Created on Tue Mar 08 16:16:36 2016
@author: SumaiWong
"""
import numpy as np
import pandas as pd
from numpy import dot
from numpy.linalg import inv
iris = pd.read_csv('D:\iris.csv')
dummy = pd.get_dummies(iris['Species']) # 对Species生成哑变量
iris = pd.concat([iris, dummy], axis =1 )
iris = iris.iloc[0:100, :] # 截取前一百行样本
X = iris.ix[:, 0:4]
Y = iris['setosa'].reshape(len(iris), 1) #整理出X矩阵 和 Y矩阵
def GDA(Y, X):
theta1 = Y.mean() #类别1的比例
theta0 = 1-Y.mean() #类别2的比例
mu1 = X[Y==1].mean() #类别1特征的均值向量
mu0 = X[Y==0].mean() #类别2特征的均值向量
X_1 = X[Y==1]
X_0 = X[Y==0]
A = dot(X_1.T, X_1) - len(Y[Y==1])*dot(mu1.reshape(4,1), mu1.reshape(4,1).T)
B = dot(X_0.T, X_0) - len(Y[Y==0])*dot(mu0.reshape(4,1), mu0.reshape(4,1).T)
sigma = (A+B)/len(X) #sigma = X'X-n(X.bar)X.bar'=X'[I-1/n 1 1]X
return theta1, theta0, mu1, mu0, sigma
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流