绘制高斯卷积图

时间:2016-11-27 11:06:58

标签: plot gnuplot gaussian convolution tikz

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

1 个答案:

答案 0 :(得分: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