{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Testing spatial frequency component" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "np.set_printoptions(precision=5, suppress=True)\n", "import pylab\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "#!rm -fr ../files/radial*" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function envelope_radial in module MotionClouds:\n", "\n", "envelope_radial(fx, fy, ft, sf_0=0.125, B_sf=0.1, ft_0=inf, loggabor=True)\n", " Returns the radial frequency envelope:\n", " \n", " Selects a preferred spatial frequency ``sf_0`` and a bandwidth ``B_sf``.\n", " \n", " Run the 'test_radial' notebook to see the explore the effect of ``sf_0`` and ``B_sf``, see\n", " http://motionclouds.invibe.net/posts/testing-radial.html\n", "\n" ] } ], "source": [ "import MotionClouds as mc\n", "import os\n", "fx, fy, ft = mc.get_grids(mc.N_X, mc.N_Y, mc.N_frame)\n", "help(mc.envelope_radial)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "name = 'radial'\n", "#initialize\n", "fx, fy, ft = mc.get_grids(mc.N_X, mc.N_Y, mc.N_frame)\n", "\n", "mc.figures_MC(fx, fy, ft, name)\n", "verbose = False\n", "mc.in_show_video(name)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.03125, 0.05568, 0.09921, 0.17678, 0.31498, 0.56123, 1. ])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N = 5\n", "np.logspace(-5, 0., 7, base=2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## exploring different frequency bandwidths" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for B_sf in np.logspace(-4, 0., N, base=2):\n", " name_ = name + '-B_sf-' + str(B_sf).replace('.', '_')\n", " mc.figures_MC(fx, fy, ft, name_, B_sf=B_sf, verbose=verbose)\n", " mc.in_show_video(name_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## exploring different (median) central frequencies" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for sf_0 in [0.01, 0.05, 0.1, 0.2, 0.4, 0.8]:\n", " name_ = name + '-sf_0-' + str(sf_0).replace('.', '_')\n", " mc.figures_MC(fx, fy, ft, name_, sf_0=sf_0, verbose=verbose)\n", " mc.in_show_video(name_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that some information is lost in the last case as $f_0$ exceeds the Nyquist frequency.\n", "\n", "## exploring different speed bandwidths" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for B_V in [0, 0.001, 0.01, 0.05, 0.1, 0.5, 1.0, 10.0]:\n", " name_ = name + '-B_V-' + str(B_V).replace('.', '_')\n", " mc.figures_MC(fx, fy, ft, name_, B_V=B_V, verbose=verbose)\n", " mc.in_show_video(name_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Testing without using a log-normal distribution" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for B_sf in np.logspace(-4, 0., N, base=2):\n", " name_ = name + '-B_sf_nologgabor-' + str(B_sf).replace('.', '_')\n", " mc.figures_MC(fx, fy, ft, name_, B_sf=B_sf, loggabor=False, verbose=verbose)\n", " mc.in_show_video(name_) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## checking that sf_0 is consistant with the number of cycles per period\n", "\n", "By design, MotionClouds are created to be characterized by a given frequency range. Let's check on the raw image that this is correct." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "downscale = 4\n", "fx, fy, ft = mc.get_grids(mc.N_X/downscale, mc.N_Y/downscale, mc.N_frame/downscale)\n", "N_X, N_Y, N_frame = fx.shape\n", "\n", "def spatial_xcorr(im):\n", " import scipy.ndimage as nd\n", " N_X, N_Y, N_frame = im.shape\n", " Xcorr = np.zeros((N_X, N_Y))\n", " for t in range(N_frame):\n", " Xcorr += nd.correlate(im[:, :, t], im[:, :, t], mode='wrap')\n", " return Xcorr\n", "\n", "mc_i = mc.envelope_gabor(fx, fy, ft, \n", " V_X=0., V_Y=0., \n", " sf_0=0.15, B_sf=0.03)\n", "im = mc.random_cloud(mc_i)\n", "Xcorr = spatial_xcorr(im)\n", "plt.imshow(Xcorr)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "First maximum reached at index 32 - that is normal as we plot the autocorrelation\n", "Max = 1.0\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xcorr = Xcorr.sum(axis=1)\n", "xcorr /= xcorr.max()\n", "plt.plot(np.arange(-N_X/2, N_X/2), xcorr)\n", "print('First maximum reached at index ' + str(np.argmax(xcorr)) + ' - that is normal as we plot the autocorrelation')\n", "print('Max = ', xcorr[np.argmax(xcorr)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To find the period, intuitively, one could just find the zero of the gradient:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "First zero gradient reached at index 4 - at the minimum of the xcorr\n", "-0.210252703916 0.435683947279\n" ] }, { "data": { "image/png": "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\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "half_xcorr = xcorr[N_X//2:]\n", "half_xcorr_gradient = np.gradient(xcorr)[N_X//2:]\n", "plt.plot(half_xcorr)\n", "plt.plot(half_xcorr_gradient, 'g')\n", "idx = np.argmax(half_xcorr_gradient>0)\n", "print('First zero gradient reached at index ' + str(idx) + ' - at the minimum of the xcorr')\n", "print (half_xcorr_gradient[idx-1], half_xcorr_gradient[idx])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We thus get in pixels half of the width of a period.\n", "\n", "More precisely, let's fit with a sinusoid (that's yet another FFT...):" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Max auto correlation reached at frequency 9\n", "Max auto correlation reached with a period 7.11111111111\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xcorr_MC = np.absolute(mc_i**2).sum(axis=-1).sum(axis=-1)\n", "half_xcorr_MC = xcorr_MC[N_X//2:]\n", "half_xcorr_MC /= half_xcorr_MC.max()\n", "plt.plot(half_xcorr_MC, 'r--')\n", "\n", "half_xcorr_FT = np.absolute(np.fft.fft(xcorr))[:N_X//2]\n", "half_xcorr_FT /= half_xcorr_FT.max()\n", "plt.plot(half_xcorr_FT)\n", "idx = np.argmax(half_xcorr_FT)\n", "print('Max auto correlation reached at frequency ' + str(idx))\n", "print('Max auto correlation reached with a period ' + str(1.*N_X/idx))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wrapping things up:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAELCAYAAAA2mZrgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHntJREFUeJzt3Xt0VIW5/vHvSxRRAfGCiEDkFtsqSqARD1atFLVULWC1\nQm3Pqm0tXgvoaVe7qgcttr+2+quCFUS0euzlFKyXRbT2eNSCl6qVAAEEqwTkklARIdwhkuQ9f8yQ\njjGZ2QmzZ8/l+azlavbMnpl3N8jj7GdfzN0REREB6BD1ACIikj0UCiIi0kShICIiTRQKIiLSRKEg\nIiJNFAoiItJEoSAiIk0UCiIi0kShICIiTQ4J883NbBQwHSgCHnL3XzR7/irgLqAm/tB97v5Qsvc8\n7rjjvG/fvukfVkQkjy1atOhDd++ear3QQsHMioAZwAVANbDQzMrdfWWzVee6+41B37dv375UVFSk\ncVIRkfxnZuuCrBfm7qNhQJW7r3H3j4A5wJgQP09ERA5SmKHQC9iQsFwdf6y5y8xsmZk9bmZ9QpxH\nRERSiLpofhro6+6nA88Dj7a0kplNMLMKM6vYvHlzRgcUESkkYYZCDZD4X/69+VehDIC7b3H3uvji\nQ8BnW3ojd5/t7mXuXta9e8qeRERE2inMUFgIlJhZPzPrCIwHyhNXMLOeCYujgbdDnEdERFII7egj\nd683sxuB54gdkvqwu68ws6lAhbuXAxPNbDRQD2wFrgprHhERSc1y7c5rZWVlrkNSRUTaxswWuXtZ\nqvWiLppFRCSFffsbePS1tWzctjf0zwr1jGYREWm/Hfv287vX1/HI397jw10fsb+hkavP6R/qZyoU\nRESyzJZddTz8t/f47Wvr2FlXz+dP7s4NIwYyrN8xoX+2QkFEJEts3LaX2S+vYc7C9dTVN/KlQSdw\n/XkDGdTrqIzNoFAQEYnYms27mPXSap5aUoM7jB3Si2s/P4CBx3fO+CwKBRGRiKzYuJ2ZC1bz7PJ/\n0rGoA1cOK+a75/an99FHRDaTQkFEJMMq1m5lxvwq5r+zmc6HHcK1nx/Atz/Xj+5dDot6NIWCiEgm\nuDsvr/qQGfOrePO9rRxzZEe+f+HJ/Pvwvhx1+KFRj9dEoSAiEqLGRue5Fe8zY0EVb9XsoOdRnbjt\ny6cw7ow+HNEx+/4Kzr6JRETywP6GRuZVbuT+BVWs3rybfscdyZ2Xnc7YIb3oeEj2njesUBARSaN9\n+xt4rGIDD7y0hppte/lMz67cd+UQvjSoJ0UdLOrxUlIoiIikwY59+/n9G+t4+NXY2cefPelofjp2\nEOd9qjtm2R8GBygUREQOwpZddTzyt7U8+vpadu6r59yTu3PDeQMY1u+YnAqDAxQKIiLtsGnHPma9\ntJo/vhk7+3jUqbGzj0/rnbmzj8OgUBARaaN5lTXc+tRb7NnfwNjSXlx3Xn8GHt8l6rHSQqEgIhLQ\nzn37uW3eCp5cUsPQ4m7cfUUpfY87Muqx0kqhICISwKJ1tUyeu4Sa2r1MGlnC974wkEOKsvfQ0vZS\nKIiIJNHQ6MyYX8X0F1fR86hOPHbNcMr6hn8J66goFEREWrFh6x5ufqyShWtrGVt6IlPHDqJrp+y5\nJEUYFAoiIi04UCY7cM+4wVw6pHfUI2WEQkFEJEHzMnn6+CH0OSa6S1lnmkJBRCSuUMrkZBQKIlLw\nEsvkE7rmf5mcjEJBRApaYpk8pvRE7iiAMjkZhYKIFKxCLZOTUSiISMFpXiZPGzeE4mMLp0xORqEg\nIgVl8fpaJs+ppLp2T8GWyckoFESkIKhMDkahICJ5r7p2DzfNVZkchEJBRPJa+dKN3PLUctxVJgeh\nUBCRvKQyuX0UCiKSdxLL5IkjS5ioMjkwhYKI5A2VyQcv1Og0s1Fm9o6ZVZnZj5Ksd5mZuZmVhTmP\niOSv6to9jJ/9Onc//y6XnN6Tv0w+R4HQDqF9UzCzImAGcAFQDSw0s3J3X9lsvS7AJODvYc0iIvlN\nZXL6hLn7aBhQ5e5rAMxsDjAGWNlsvTuAXwI/CHEWEclDO/ft57byFTy5WGVyuoQZCr2ADQnL1cCZ\niSuY2VCgj7v/2cwUCiISmMrkcERWNJtZB+Bu4KoA604AJgAUFxeHO5iIZLXmZfLca4ZzhrqDtAkz\nFGqAPgnLveOPHdAFGAQsMDOAE4ByMxvt7hWJb+Tus4HZAGVlZR7izCKSxRLPTB49OHZm8lGH68zk\ndAozFBYCJWbWj1gYjAeuPPCku28HjjuwbGYLgO83DwQREVCZnCmhhYK715vZjcBzQBHwsLuvMLOp\nQIW7l4f12SKSP3bV1TNl3ls8ubiGIcXdmK4yOVShdgru/izwbLPHprSy7nlhziIiuUdlcubpjGYR\nyToqk6OjUBCRrKIyOVoKBRHJGs3L5LGlvYgfnSgZolAQkcipTM4eCgURidSS9bVMUpmcNRQKIhKJ\nhkZn5vwqpqlMzioKBRHJOJXJ2UuhICIZpTI5uykURCQjVCbnhlZDwcyWBXj9ZncfmcZ5RCQPqUzO\nHcm+KRQBFyV53gBdv0hEWqUyOfckC4Vr3H1dsheb2fVpnkdE8kR17R5unruUN9duVZmcQ1oNBXd/\nNdWLg6wjIoUnsUy++4rBXDpEZXKuaFfRbGa3u/vtaZ5FRHLcrrp6bpu3gicWV6tMzlHtPfpoUVqn\nEJGcpzI5P7QrFNz96XQPIiK5SWVyfkkZCmb2CPCJ+yK7+7dDmUhEckbNtr3cNKdSZXIeCfJN4ZmE\nnzsBlwIbwxlHRHLF00s38mOVyXknZSi4+xOJy2b2R0BHHYkUKJXJ+a09nUIJcHy6BxGR7LdkfS2T\n51ayYavK5HwVpFPYycc7hfeBH4Y2kYhknYZG5/4FVdzzgsrkfBdk91GXTAwiItlJZXJh0VVSRaRV\nKpMLj0JBRD5BZXLhUiiIyMeoTC5sCgURAVQmS0x7L4j3jLtfku5hRCQaKpPlgPZ+U/huWqcQkcio\nTJZE7b0g3j/TPYiIZJbKZGlJkJPXSoCfA6cQu/YRAO7eP8S5RCREKpOlNUG+KTwC3AbcA4wAvgXo\nT49IDlKZLKkECYXD3f1FM7P4PZtvN7NFwJSQZxORNGlsdJ5/exP3/bWK5TXbVSZLq4KEQp2ZdQBW\nmdmNQA3QOdyxRCQd6hsaeXrZRmbOX82qD3ZRfMwRTB9fyujBJ6pMlhYFCYVJwBHAROAOYruQvhnk\nzc1sFDAdKAIecvdfNHv+WuAGoAHYBUxw95WBpxeRFu3b38Dji6p54OXVbNi6l0/16ML08aVcfFpP\ndQeSlLl/4qZq6XljsyLgXeACoBpYCHwt8S99M+vq7jviP48Grnf3Ucnet6yszCsqKkKZWSTX7aqr\n57//vo4HX3mPzTvrGNynGzeOGMjITx9Phw76ZlDIzGyRu5elWq/Vbwpmdru7357iQ5KtMwyocvc1\n8XXnAGOAplA4EAhxR9LCbT9FJLXa3R/xX6+t5b9eW8v2vfv53MBjmT6ulOEDjtVuImmTZLuPrjaz\nHUmeN2A8cHsrz/cCNiQsVwNnfuJNzG4AbgY6Al9INqyIfNymHft46JU1/OHv69nzUQMXntKD60cM\npLRPt6hHkxyVLBQeBFLdS+HBgx3A3WcAM8zsSuBWWugrzGwCMAGguLj4YD9SJOet27KbWS+t4YlF\n1TS4M3rwiVx33gBO7qHbn8jBaTUU3P0nB/neNUCfhOXe8cdaMwe4v5VZZgOzIdYpHORcIjnrnfd3\nMnNBFU8v3cghHTrw1bLeXHPuAJ2JLGkT5lVSFwIlZtaPWBiMB65MXMHMStx9VXzxYmAVIvIJS9bX\nMmP+al54exNHdCzi6nP6c/XZ/Ti+a6fULxZpg9BCwd3r4+c1PEfskNSH3X2FmU0FKty9HLjRzM4H\n9gO1BDzUVaQQuDuvrd7CjPlVvLZ6C92OOJTJ55dw1Vl96XZEx6jHkzwV2iGpYdEhqZLvGhudF97e\nxIwFq1m6YRvHdzmMCef252vDijnyMN0CRdrnoA9JTXije5M97+4T2zKYiLSsvqGRZ5b9k5kLqnh3\nU+zs4/936Wl8ZWgvOh1aFPV4UiCC/GdHJ2JXSJ0bX/4qsXMNXg9rKJFCsm9/A08srmbWS7Gzj0/u\n0VlnH0tkgoTC6cDZ7l4PYGazgFfc/dpQJxMpAPMqa/jZn9/mg/jZx1MuOVVnH0ukgoTC0UBXYGt8\nuXP8MRFpp5379jNl3gqeWlJDaZ9uTNPZx5IlgoTCL4AlZjaf2FnM59L6WcwiksKidbVMnruEmtq9\nTD6/hBtH6AY3kj1ShoK7P2Jmf+Ffl6j4obu/H+5YIvmnvqGRGfNXc+9fV9HzqE786drhfPYk3eBG\nskuQo48MOB/o7+5TzazYzIa5+5vhjyeSHzZs3cNNcyupWFfLpUN68ZMxp9K1k25wI9knyO6jmUAj\nsYvVTQV2Ak8AZ4Q4l0jemFdZw61PvQXA9PGljCntFfFEIq0LEgpnuvtQM1sC4O61ZqbTKUVSSCyT\nP3vS0UwbV0qfY3SNIsluQUJhf/yGOQ5gZt2JfXMQkVaoTJZcFSQU7gWeAo43s58BlxO7xLWINKMy\nWXJdkKOP/mBmi4CRxA5JHevub4c+mUiOSSyTx5aeyNSxg1QmS85JGgrx3UYr3P3TwD8yM5JI7jlQ\nJjswbVwpY4eoTJbclDQU3L3BzN4xs2J3X5+poURyhcpkyTdBL3OxwszeBHYfeNDdR4c2lUgOUJks\n+ajVUDCzw9y9DvjPDM4jkvVUJks+S/ZN4XVgKHC1u/97huYRyWoqkyXfJQuFjmZ2JXCWmX2l+ZPu\n/mR4Y4lkH5XJUgiShcK1wNeBbsCXmz3ngEJBCkJimTy0uBvTxw9RmSx5q9VQcPdXgVfNrMLdf5PB\nmUSyRmKZPGlkCd/7gspkyW9BTl5TIEjBaV4mP3bNcMr6qkyW/BfkkFSRgqIyWQqZQkEkQWKZfM+4\nwVw6pHfUI4lkVLLzFIYme6G7L07/OCLRaF4mTxs3hOJjVSZL4Un2TeFX8f/tBJQBS4ldEO90oAIY\nHu5oIpmhMlnkX5IdfTQCwMyeBIa6+/L48iDg9oxMJxKixDL5hK4qk0UgWKfwqQOBAODub5nZZ0Kc\nSSR0iWXymNITuUNlsggQLBSWmdlDwO/jy18HloU3kki4VCaLtC5IKHwLuA6YFF9+Gbg/tIlEQqIy\nWSS1ICev7TOzWcCz7v5OBmYSSTuVySLBpPy3wsxGA5XA/8SXS82sPOzBRNKhvqGR6S+s4ooHXqex\nER67Zjg3XXCyAkGkFUF2H90GDAMWALh7pZn1C3MokXRQmSzSdkFCYb+7bzezxMc8pHlE0kJlskj7\nBAmFFfH7KhSZWQkwEXgt3LFE2kdlssjBCbJj9XvAqUAd8N/AdmBykDc3s1Fm9o6ZVZnZj1p4/mYz\nW2lmy8zsRTM7qS3DiyRatK6Wi+59hXmVNUwaWcJj1wxXIIi0UZBvCp9291uAW9ryxmZWBMwALgCq\ngYVmVu7uKxNWWwKUufseM7sOuBMY15bPEdGZySLpEyQUfmVmJwCPA3Pd/a2A7z0MqHL3NQBmNgcY\nAzSFgrvPT1j/DeAbAd9bBFCZLJJuQc5TGBEPhSuAB8ysK7Fw+GmKl/YCNiQsVwNnJln/O8BfWnrC\nzCYAEwCKi4tTjSwFQmWySPoFOljb3d9393uJ3be5EpiSziHM7BvErsR6VyufP9vdy9y9rHv37un8\naMlBO/ft5+a5lUyaU0lJj848O/EcBYJImqT8phC/+N044DJgCzAX+I8A710D9ElY7h1/rPn7n0+s\nr/i8u9cFeF8pYDozWSRcQTqFh4E5wBfdfWMb3nshUBI/0a0GGA9cmbiCmQ0BHgBGufsHbXhvKTAq\nk0UyI2koxI8ges/dp7f1jd293sxuBJ4DioCH3X2FmU0FKty9nNjuos7An+Inx61399Ft/SzJb9W1\ne5g8R2WySCYkDQV3bzCzPmbW0d0/auubu/uzwLPNHpuS8PP5bX1PKSwqk0UyK8juo/eAv8Uvgrf7\nwIPufndoU0nB27lvP7fNW8GTOjNZJKOChMLq+D8dgC7hjiMCi9fXMnlOJdW1e1Qmi2RYkPMUfgJg\nZke4+57wR5JC1dDozJhfxfQXVSaLRCXIIanDgd8QK4SLzWwwcI27Xx/2cFI4qmtjZyYvXKsyWSRK\nQXYfTQO+CJQDuPtSMzs31KmkoJQv3cgtTy3HXWWySNSChALuvqHZ/RQawhlHConKZJHsEyQUNpjZ\nWYCb2aHAJODtcMeSfKcyWSQ7BQmFa4HpxC5wVwP8L3BDmENJ/lKZLJLdghx99CHw9QzMInlOZbJI\n9kv5fd3M7jSzrmZ2aPzuaJvjVzUVCax86Ua+NP0V3v7nTu4ZN5jp44coEESyUJCduBe6+w7gEmAt\nMBD4QZhDSf7YVVfPzY9VMvGPSyg5Xpe5Fsl2QTqFA+tcDPzJ3bc3OxJJpEWJZfLEkSVMVJkskvWC\nhMIzZvYPYC9wnZl1B/aFO5bkMpXJIrkrSNH8IzO7E9gev2rqbmL3Whb5BJXJIrktyGUuOgFXAWeb\nmQOvAveHPJfkIJ2ZLJL7guw++i2wE/h1fPlK4HfAV8MaSnLLrrp6psx7iycX68xkkVwXJBQGufsp\nCcvzzWxlWANJblmyvpZJKpNF8kaQUFhsZv/m7m8AmNmZQEW4Y0m2a2h0Zs6vYlq8TJ57zXDOUJks\nkvNaDQUzWw44cCjwmpmtjz9VDPwjA7NJlqrZtpeb5lTy5tqtjB4cK5OPOlxlskg+SPZN4ZKMTSE5\n4+mlG/mxymSRvNVqKLj7ugM/x2+sc0588RV3Xxr2YJJddtXVc9u8FTyxuJohxd2YrjJZJC8FOSR1\nEvBd4Mn4Q783s9nu/uskL5M8ojJZpHAEKZq/A5zp7rsBzOyXwOv86xBVyVMqk0UKT5BQMD5+p7WG\n+GOSx1QmixSmIKHwCPB3M3sqvjwW+E14I0nUmpfJY0t7oYsgihSGINc+utvMFgBnxx/6lrsvCXUq\niYTKZBEJ8k0Bd18MLA55FomQymQRgYChIPlLZbKIJFIoFDCVySLSnEKhQCWWyXdfMZhLh6hMFhGF\nQsFRmSwiySgUCojKZBFJRaFQAFQmi0hQof5nopmNMrN3zKzKzH7UwvPnmtliM6s3s8vDnKVQ1Wzb\ny9dmv8Gvnn+Xi0/rybOTzlEgiEirQvumYGZFwAzgAqAaWGhm5e6eeNe29cTu//z9sOYoZCqTRaSt\nwtx9NAyocvc1AGY2BxgDNIWCu6+NP9cY4hwFR2WyiLRXmKHQC9iQsFwNnNmeNzKzCcAEgOLi4oOf\nLI99rEz+wkC+N7KEQ1Umi0hAOVE0u/tsYDZAWVmZRzxOVlKZLCLpEGYo1AB9EpZ7xx+TNEs8M/nL\ng0/kpzozWUTaKcxQWAiUmFk/YmEwHrgyxM8rSAfK5MZG51dfHcxXhqpMFpH2Cy0U3L3ezG4EngOK\ngIfdfYWZTQUq3L3czM4AngKOBr5sZj9x91PDmimfqEwWkTCE2im4+7PAs80em5Lw80Jiu5WkDZas\nr2Xy3Eo2bFWZLCLplRNFs8Q0NDr3L6jinhdiZfKcCcMZ1k9lsoikj0IhR6hMFpFMUCjkAJXJIpIp\nCoUs1rxMnjaulJOOPTLqsUQkjykUspTKZBGJgkIhy6hMFpEoKRSySM22vdw0t5I331OZLCLRUChk\niWeWbeTHTy6nQWWyiERIoRCxXXX13F6+gscXqUwWkegpFCJUuWEbk+YsUZksIllDoRABlckikq0U\nChmmMllEsplCIYNUJotItlMoZEBimVzapxvTx6tMFpHspFAImcpkEcklCoWQNDQ6s15azT3Pv0sP\nlckikiMUCmnW2Oi8+I8P+PVfV7GservKZBHJKQqFNKlvaOTPy//JzPmreWfTTvocczjTxpUypvRE\nlckikjMUCgeprr6BJxbVMOul1azfuoeTe3Rm2rhSLjm9J4eoOxCRHKNQaKfddfX88c31PPjKGjbt\nqGNwn27cevFnOP8zPejQQd8MRCQ3KRTaaNuej3j0tXU88tp7bNuzn7MGHMvdV5Ry1oBjtZtIRHKe\nQiGgD3bs46FX3+MPb6xj90cNXHBKD64/bwBDio+OejQRkbRRKKSwfsseHnh5NX9aVE19QyOjB5/I\ndecN5FMndIl6NBGRtFMotOLdTTu5f8FqypdupMiMy8t6c825/XUmsojkNYVCM5UbtjFzfhX/u3IT\nR3Qs4tuf68vV5/SnR9dOUY8mIhI6hQLg7ry+Zgsz56/m1aoPOerwQ5k0soSrzurL0Ud2jHo8EZGM\nKehQOHD28cwFVSxZv43uXQ7jlos+w9fOLKbzYQX9f42IFKiC/JuvpbOPf3bpIC4b2ptOhxZFPZ6I\nSGQKKhR09rGISHIFEwrPLNvIHc+s1NnHIiJJFEwodCzqwIDunXX2sYhIEgUTChec0oMLTz0h6jFE\nRLJawexI1zcDEZHUQg0FMxtlZu+YWZWZ/aiF5w8zs7nx5/9uZn3DnEdERJILLRTMrAiYAXwJOAX4\nmpmd0my17wC17j4QuAf4ZVjziIhIamF+UxgGVLn7Gnf/CJgDjGm2zhjg0fjPjwMjTft5REQiE2Yo\n9AI2JCxXxx9rcR13rwe2A8eGOJOIiCSRE0WzmU0wswozq9i8eXPU44iI5K0wQ6EG6JOw3Dv+WIvr\nmNkhwFHAluZv5O6z3b3M3cu6d+8e0rgiIhJmKCwESsysn5l1BMYD5c3WKQe+Gf/5cuCv7u4hziQi\nIklYmH8Hm9lFwDSgCHjY3X9mZlOBCncvN7NOwO+AIcBWYLy7r0nxnpuBdSk++jjgw4PegNyj7S4s\nhbrdULjbfjDbfZK7p9zVEmooRMXMKty9LOo5Mk3bXVgKdbuhcLc9E9udE0WziIhkhkJBRESa5Gso\nzI56gIhouwtLoW43FO62h77dedkpiIhI++TrNwUREWmHnA6FQr0Ka4DtPtfMFptZvZldHsWMYQiw\n3Teb2UozW2ZmL5rZSVHMmW4BtvtaM1tuZpVm9moLF57MSam2O2G9y8zMzSwvjkYK8Pu+ysw2x3/f\nlWZ2dVoHcPec/IfYuQ+rgf5AR2ApcEqzda4HZsV/Hg/MjXruDG13X+B04LfA5VHPnMHtHgEcEf/5\nugL6fXdN+Hk08D9Rz52J7Y6v1wV4GXgDKIt67gz9vq8C7gtrhlz+plCoV2FNud3uvtbdlwGNUQwY\nkiDbPd/d98QX3yB2aZVcF2S7dyQsHgnkQ1EY5N9vgDuIXXJ/XyaHC1HQ7Q5NLodCoV6FNch256O2\nbvd3gL+EOlFmBNpuM7vBzFYDdwITMzRbmFJut5kNBfq4+58zOVjIgv45vyy+m/RxM+vTwvPtlsuh\nINIiM/sGUAbcFfUsmeLuM9x9APBD4Nao5wmbmXUA7gb+I+pZIvA00NfdTwee5197Q9Iil0MhbVdh\nzTFBtjsfBdpuMzsfuAUY7e51GZotTG39fc8BxoY6UWak2u4uwCBggZmtBf4NKM+Dsjnl79vdtyT8\n2X4I+Gw6B8jlUCjUq7AG2e58lHK7zWwI8ACxQPggghnDEGS7SxIWLwZWZXC+sCTdbnff7u7HuXtf\nd+9LrEMa7e4V0YybNkF+3z0TFkcDb6d1gqjb9oNs6i8C3iXW1t8Sf2wqsT8cAJ2APwFVwJtA/6hn\nztB2n0FsX+RuYt+MVkQ9c4a2+wVgE1AZ/6c86pkztN3TgRXxbZ4PnBr1zJnY7mbrLiAPjj4K+Pv+\nefz3vTT++/50Oj9fZzSLiEiTXN59JCIiaaZQEBGRJgoFERFpolAQEZEmCgUREWmiUBARkSYKBSlY\nZnaOma2IX3748FbW+aaZrYr/881W1lkbv3R1qGfTmtldZva+mX0/zM+RwnZI1AOIROjrwM/d/fct\nPWlmxwC3EbuOkgOLzKzc3WtbWH2Eu38Y3qjg7j8ws91hfoaIvilI3jOzI83sz2a21MzeMrNx8RuT\nXAHcYWZ/aOWlXwSed/et8SB4HhgV4POmmNnC+GfNTnW59vhNU+5LWH7GzM4LvIEiaaRvClIIRgEb\n3f1iADM7yt23m9nZwDPu/ngrr2vvZcrvc/ep8c/6HXAJsStbimQ9fVOQQrAcuMDMfmlm57j79pA/\nb0T89q/LgS8Ap4b8eSJpo1CQvOfu7wJDiYXDT81sSsCXtvky5WbWCZhJ7DaopwEPErswYzL1fPzf\nxVTri4RGoSB5z8xOBPbEC+W7iAVEEM8BF5rZ0WZ2NHBh/LFkDvyF/qGZdSZ2yfZU1gKlZtYhfhet\nYQHnE0k7dQpSCE4D7jKzRmA/cF2QF7n7VjO7g9g17gGmuvvWFK/ZZmYPAm8B7ye8FjO7Nr7OrGYv\n+xvwHrCS2LXxFye85iFgluf+fQIkR+jS2SIHKX7nr7KwD0mNf9btwC53//9hf5YUJu0+Ejl4m4EX\nM3HyGvANYjdPEgmFvilIwTOz04DfNXu4zt3PjGIekSgpFEREpIl2H4mISBOFgoiINFEoiIhIE4WC\niIg0USiIiEiT/wNZcc6IcFqFKAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sf_0_ = [0.01, 0.05, 0.1, 0.2, 0.4, 0.8]\n", "sf_0_ = np.linspace(0.01, .5, 12)\n", "downscale = 4\n", "fx, fy, ft = mc.get_grids(mc.N_X//downscale, mc.N_Y//downscale, mc.N_frame//downscale)\n", "\n", "def period_px(mc_i):\n", " N_X, N_Y, N_frame = im.shape\n", " xcorr_MC = np.absolute(mc_i**2).sum(axis=-1).sum(axis=-1)\n", " half_xcorr_MC = xcorr_MC[N_X//2:]\n", " idx = np.argmax(half_xcorr_MC)\n", " return np.fft.fftfreq(N_X)[idx]\n", "\n", "ppx = np.zeros_like(sf_0_)\n", "for i, sf_0 in enumerate(sf_0_):\n", " mc_i = mc.envelope_gabor(fx, fy, ft, \n", " V_X=0., V_Y=0., \n", " sf_0=sf_0, B_sf=0.03)\n", " ppx[i] = period_px(mc_i)\n", " \n", "plt.plot(sf_0_, ppx)\n", "plt.xlabel('sf_0 [a. u.]')\n", "plt.ylabel('observed freq [a. u.]')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the range of frequencies is accessible using:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 0.01562 0.03125 0.04688 0.0625 0.07812 0.09375 0.10938\n", " 0.125 0.14062 0.15625 0.17188 0.1875 0.20312 0.21875 0.23438\n", " 0.25 0.26562 0.28125 0.29688 0.3125 0.32812 0.34375 0.35938\n", " 0.375 0.39062 0.40625 0.42188 0.4375 0.45312 0.46875 0.48438\n", " -0.5 -0.48438 -0.46875 -0.45312 -0.4375 -0.42188 -0.40625 -0.39062\n", " -0.375 -0.35938 -0.34375 -0.32812 -0.3125 -0.29688 -0.28125 -0.26562\n", " -0.25 -0.23438 -0.21875 -0.20312 -0.1875 -0.17188 -0.15625 -0.14062\n", " -0.125 -0.10938 -0.09375 -0.07812 -0.0625 -0.04688 -0.03125 -0.01562]\n" ] } ], "source": [ "print(np.fft.fftfreq(fx.shape[0]))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.1" } }, "nbformat": 4, "nbformat_minor": 1 }