{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# let's make a test for subpixel localization" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from openpiv.pyprocess import find_first_peak" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 1., ..., 0., 0., 0.],\n", " ...,\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.]])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N = 64\n", "\n", "corr = np.zeros((N,N))\n", "\n", "corr[2:5,2:5] = 1\n", "corr[3,3] = 2\n", "corr[3,4] = 3\n", "corr[3,5] = 1\n", "corr" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "pos,height = find_first_peak(corr)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((3, 4), 3.0)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pos,height" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "from openpiv.pyprocess import find_subpixel_peak_position" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3.0, 3.769577293545741)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## let's find some corner cases" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[2., 1., 3., ..., 0., 0., 0.],\n", " [1., 1., 1., ..., 0., 0., 0.],\n", " [1., 1., 1., ..., 0., 0., 0.],\n", " ...,\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# peak on the border \n", "corr = np.zeros((N,N))\n", "\n", "corr[:3,:3] = 1\n", "corr[0,0] = 2\n", "corr[0,2] = 3\n", "corr[0,3] = 1\n", "corr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Corner case 1: peak on the border\n", "\n", "it is disregarded in our function because we cannot define well the subpixel\n", "position. Or do we? " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(32.0, 32.0)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " ...,\n", " [1., 1., 1., ..., 0., 0., 0.],\n", " [1., 1., 1., ..., 0., 0., 0.],\n", " [2., 1., 3., ..., 0., 0., 0.]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# peak on the border \n", "corr = np.flipud(corr)\n", "corr" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(32.0, 32.0)" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " ...,\n", " [0., 0., 0., ..., 1., 1., 1.],\n", " [0., 0., 0., ..., 1., 1., 5.],\n", " [0., 0., 0., ..., 3., 1., 2.]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corr = np.fliplr(corr)\n", "corr[-2,-1]=5\n", "corr" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(32.0, 32.0)" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "## Corner case 2: zero next to the peak - the log(0) fails" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 1., ..., 0., 0., 0.],\n", " ...,\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.],\n", " [0., 0., 0., ..., 0., 0., 0.]])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corr = np.zeros((N,N))\n", "\n", "corr[2:5,2:5] = 1\n", "corr[3,3] = 2\n", "corr[3,4] = 3\n", "# corr[3,5] = 1\n", "corr" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3.0, 3.5230088020336483)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(12,12))\n", "ax.pcolor(corr[:8,:8])\n", "for eps in np.logspace(-15,5):\n", " i,j = find_subpixel_peak_position(corr+eps)\n", " # print(i,j)\n", " ax.plot(i,j,'rx')" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.pcolor(corr[:8,:8])\n", "plt.plot(i,j,'ro')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.0 3.5239508804084627\n", "3.0 3.7499981250225445\n", "3.0 3.75\n", "3.0 3.75\n", "3.0 3.600000095999977\n", "3.0 3.9999933334444426\n" ] } ], "source": [ "for method in ['gaussian','parabolic','centroid']:\n", " i,j = find_subpixel_peak_position(corr,method)\n", " print(i,j)\n", " i,j = find_subpixel_peak_position(corr+eps,method)\n", " print(i,j)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:openpiv] *", "language": "python", "name": "conda-env-openpiv-py" }, "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }