2016-11-27 150 views
0

我正在撰写关于SIFT算法的研究论文,并且我想在描述离散过程之前创建一个图形以帮助解释连续函数环境中高斯模糊的概念。我想要创建的图形是一个标准高斯卷积与正弦函数的图形。我可以绘制高斯曲线,我可以绘制正弦曲线,但我不知道如何绘制它们的卷积曲线。我不知道如何计算它们的卷积来绘制它,并且我不知道任何允许我在图中使用卷积算子的软件。我对tikz和gnuplot很熟悉,但我不知道如何与他们中的任何一个做这个。任何建议,如何我可以去这个将不胜感激。谢谢。绘制高斯卷积图

+1

对于卷积使用程序(如“八度”)的数值计算。或者将您的案例中的分析解决方案作为函数进行绘制 – Christoph

回答

0

你可以使用Python matplotlib和np.convolve

请参见下面的代码

__author__ = 'kgeorge' 
import os 
import numpy as np 
import math 
import matplotlib.pyplot as plt 
from matplotlib import gridspec 

#create gaussian for the x values in x-axis 
def create_gaussian(x_axis): 
    sigma = 1.0 
    denom = math.sqrt(2 * math.pi) * sigma 
    twoSigmaSq = 2.0*sigma**2 
    e=np.zeros_like(x_axis) 
    for i,x in enumerate(x_axis): 
     e[i]=math.exp (-(x*x)/twoSigmaSq) 
    e = e/denom 
    return e 


def main(): 
    #x_axis 
    sz=100 
    halfW = int(sz/2) 
    x_axis=np.linspace(-halfW, halfW, 1000) 

    #cos fun 
    cos_f=np.cos(x_axis) 
    #gaussian 
    gaussian_f=create_gaussian(x_axis) 

    fig = plt.figure() 
    gs = gridspec.GridSpec(3, 1) 

    ax1 = fig.add_subplot(gs[0,0]) 
    ax1.plot(x_axis, cos_f) 
    ax1.set_title('cos') 

    ax2 = fig.add_subplot(gs[1,0]) 
    ax2.plot(x_axis, gaussian_f) 
    ax2.set_title('gaussian') 

    ax3 = fig.add_subplot(gs[2,0]) 
    convolved_ret=np.convolve(cos_f, gaussian_f, mode='same') 
    ax3.plot(x_axis, convolved_ret) 
    ax3.set_title('cos convolved with gaussian') 

    gs.update(wspace=0.5, hspace=0.5) 

    plt.show() 

请在这里看到的输出。 output of convolustion of cos and gaussian