{ "cells": [ { "cell_type": "markdown", "id": "79782d85", "metadata": { "papermill": { "duration": 0.023123, "end_time": "2022-10-20T19:15:31.090183", "exception": false, "start_time": "2022-10-20T19:15:31.067060", "status": "completed" }, "tags": [] }, "source": [ "### Comparison with vectorized and original functions\n", "#### Edited by Erich Zimmer\n", "#### Created at 20210817, 2109 CTZ" ] }, { "cell_type": "code", "execution_count": 1, "id": "5db8e4ac", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:31.116768Z", "iopub.status.busy": "2022-10-20T19:15:31.116464Z", "iopub.status.idle": "2022-10-20T19:15:32.286663Z", "shell.execute_reply": "2022-10-20T19:15:32.285991Z" }, "papermill": { "duration": 1.182654, "end_time": "2022-10-20T19:15:32.288436", "exception": false, "start_time": "2022-10-20T19:15:31.105782", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from openpiv.pyprocess import find_first_peak,\\\n", " vectorized_correlation_to_displacements\n", "from openpiv.tools import imread\n", "from numpy import log\n", "from glob import glob" ] }, { "cell_type": "markdown", "id": "429dfe2c", "metadata": { "papermill": { "duration": 0.006363, "end_time": "2022-10-20T19:15:32.301461", "exception": false, "start_time": "2022-10-20T19:15:32.295098", "status": "completed" }, "tags": [] }, "source": [ "### Vectorized solution for subpixel estimation" ] }, { "cell_type": "code", "execution_count": 2, "id": "d60be221", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.314989Z", "iopub.status.busy": "2022-10-20T19:15:32.314669Z", "iopub.status.idle": "2022-10-20T19:15:32.324802Z", "shell.execute_reply": "2022-10-20T19:15:32.324287Z" }, "papermill": { "duration": 0.019484, "end_time": "2022-10-20T19:15:32.326509", "exception": false, "start_time": "2022-10-20T19:15:32.307025", "status": "completed" }, "tags": [] }, "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": 2, "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": 3, "id": "c967d238", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.342728Z", "iopub.status.busy": "2022-10-20T19:15:32.342426Z", "iopub.status.idle": "2022-10-20T19:15:32.346742Z", "shell.execute_reply": "2022-10-20T19:15:32.345544Z" }, "papermill": { "duration": 0.014086, "end_time": "2022-10-20T19:15:32.348807", "exception": false, "start_time": "2022-10-20T19:15:32.334721", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "pos,height = find_first_peak(corr)" ] }, { "cell_type": "code", "execution_count": 4, "id": "f8ee5cbe", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.367527Z", "iopub.status.busy": "2022-10-20T19:15:32.367313Z", "iopub.status.idle": "2022-10-20T19:15:32.372024Z", "shell.execute_reply": "2022-10-20T19:15:32.371292Z" }, "papermill": { "duration": 0.013843, "end_time": "2022-10-20T19:15:32.373318", "exception": false, "start_time": "2022-10-20T19:15:32.359475", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "((3, 4), 3.0)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pos,height" ] }, { "cell_type": "code", "execution_count": 5, "id": "7aaf4162", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.390893Z", "iopub.status.busy": "2022-10-20T19:15:32.390621Z", "iopub.status.idle": "2022-10-20T19:15:32.393762Z", "shell.execute_reply": "2022-10-20T19:15:32.393178Z" }, "papermill": { "duration": 0.014968, "end_time": "2022-10-20T19:15:32.395482", "exception": false, "start_time": "2022-10-20T19:15:32.380514", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "from openpiv.pyprocess import find_subpixel_peak_position" ] }, { "cell_type": "code", "execution_count": 6, "id": "d5085e5c", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.413569Z", "iopub.status.busy": "2022-10-20T19:15:32.413081Z", "iopub.status.idle": "2022-10-20T19:15:32.417788Z", "shell.execute_reply": "2022-10-20T19:15:32.417134Z" }, "papermill": { "duration": 0.013886, "end_time": "2022-10-20T19:15:32.419262", "exception": false, "start_time": "2022-10-20T19:15:32.405376", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(3.0, 3.769577293545741)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr) " ] }, { "cell_type": "code", "execution_count": 7, "id": "4a77844f", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.434837Z", "iopub.status.busy": "2022-10-20T19:15:32.434506Z", "iopub.status.idle": "2022-10-20T19:15:32.441399Z", "shell.execute_reply": "2022-10-20T19:15:32.440916Z" }, "papermill": { "duration": 0.016083, "end_time": "2022-10-20T19:15:32.442680", "exception": false, "start_time": "2022-10-20T19:15:32.426597", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 0 bad peak(s)\n" ] }, { "data": { "text/plain": [ "array([[3. ],\n", " [3.76957734]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.flip(vectorized_correlation_to_displacements(corr[np.newaxis, :, :]) + np.floor(corr.shape[0] / 2))" ] }, { "cell_type": "markdown", "id": "44327587", "metadata": { "papermill": { "duration": 0.00684, "end_time": "2022-10-20T19:15:32.456756", "exception": false, "start_time": "2022-10-20T19:15:32.449916", "status": "completed" }, "tags": [] }, "source": [ "## let's find some corner cases" ] }, { "cell_type": "code", "execution_count": 8, "id": "a0c8f9bc", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.471128Z", "iopub.status.busy": "2022-10-20T19:15:32.470909Z", "iopub.status.idle": "2022-10-20T19:15:32.475984Z", "shell.execute_reply": "2022-10-20T19:15:32.475366Z" }, "papermill": { "duration": 0.013915, "end_time": "2022-10-20T19:15:32.477376", "exception": false, "start_time": "2022-10-20T19:15:32.463461", "status": "completed" }, "tags": [] }, "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", "id": "38c409c3", "metadata": { "papermill": { "duration": 0.006859, "end_time": "2022-10-20T19:15:32.492632", "exception": false, "start_time": "2022-10-20T19:15:32.485773", "status": "completed" }, "tags": [] }, "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, "id": "635304dd", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.507214Z", "iopub.status.busy": "2022-10-20T19:15:32.507001Z", "iopub.status.idle": "2022-10-20T19:15:32.511203Z", "shell.execute_reply": "2022-10-20T19:15:32.510762Z" }, "papermill": { "duration": 0.012562, "end_time": "2022-10-20T19:15:32.512528", "exception": false, "start_time": "2022-10-20T19:15:32.499966", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(nan, nan)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr)" ] }, { "cell_type": "code", "execution_count": 10, "id": "b642593f", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.547136Z", "iopub.status.busy": "2022-10-20T19:15:32.546925Z", "iopub.status.idle": "2022-10-20T19:15:32.552012Z", "shell.execute_reply": "2022-10-20T19:15:32.551570Z" }, "papermill": { "duration": 0.033546, "end_time": "2022-10-20T19:15:32.553392", "exception": false, "start_time": "2022-10-20T19:15:32.519846", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 1 bad peak(s)\n" ] }, { "data": { "text/plain": [ "array([[nan, nan]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.flip(vectorized_correlation_to_displacements(corr[np.newaxis, :, :]) + np.floor(corr.shape[0] / 2))" ] }, { "cell_type": "code", "execution_count": 11, "id": "991f026d", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.593124Z", "iopub.status.busy": "2022-10-20T19:15:32.592895Z", "iopub.status.idle": "2022-10-20T19:15:32.597579Z", "shell.execute_reply": "2022-10-20T19:15:32.597067Z" }, "papermill": { "duration": 0.037145, "end_time": "2022-10-20T19:15:32.598979", "exception": false, "start_time": "2022-10-20T19:15:32.561834", "status": "completed" }, "tags": [] }, "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": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# peak on the border \n", "corr = np.flipud(corr)\n", "corr" ] }, { "cell_type": "code", "execution_count": 12, "id": "380f26d3", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.615184Z", "iopub.status.busy": "2022-10-20T19:15:32.614675Z", "iopub.status.idle": "2022-10-20T19:15:32.619395Z", "shell.execute_reply": "2022-10-20T19:15:32.618834Z" }, "papermill": { "duration": 0.014138, "end_time": "2022-10-20T19:15:32.620794", "exception": false, "start_time": "2022-10-20T19:15:32.606656", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(nan, nan)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr)" ] }, { "cell_type": "code", "execution_count": 13, "id": "2128b70a", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.634965Z", "iopub.status.busy": "2022-10-20T19:15:32.634761Z", "iopub.status.idle": "2022-10-20T19:15:32.640322Z", "shell.execute_reply": "2022-10-20T19:15:32.639659Z" }, "papermill": { "duration": 0.01411, "end_time": "2022-10-20T19:15:32.641673", "exception": false, "start_time": "2022-10-20T19:15:32.627563", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 1 bad peak(s)\n" ] }, { "data": { "text/plain": [ "array([[nan, nan]])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.flip(vectorized_correlation_to_displacements(corr[np.newaxis, :, :]) + np.floor(corr.shape[0] / 2))" ] }, { "cell_type": "code", "execution_count": 14, "id": "dec2efb1", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.656506Z", "iopub.status.busy": "2022-10-20T19:15:32.656258Z", "iopub.status.idle": "2022-10-20T19:15:32.662158Z", "shell.execute_reply": "2022-10-20T19:15:32.661480Z" }, "papermill": { "duration": 0.014884, "end_time": "2022-10-20T19:15:32.663508", "exception": false, "start_time": "2022-10-20T19:15:32.648624", "status": "completed" }, "tags": [] }, "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": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corr = np.fliplr(corr)\n", "corr[-2,-1]=5\n", "corr" ] }, { "cell_type": "code", "execution_count": 15, "id": "573828a6", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.680149Z", "iopub.status.busy": "2022-10-20T19:15:32.679883Z", "iopub.status.idle": "2022-10-20T19:15:32.685488Z", "shell.execute_reply": "2022-10-20T19:15:32.684689Z" }, "papermill": { "duration": 0.016191, "end_time": "2022-10-20T19:15:32.686761", "exception": false, "start_time": "2022-10-20T19:15:32.670570", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(nan, nan)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr)" ] }, { "cell_type": "code", "execution_count": 16, "id": "b8e1b889", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.703969Z", "iopub.status.busy": "2022-10-20T19:15:32.703433Z", "iopub.status.idle": "2022-10-20T19:15:32.709175Z", "shell.execute_reply": "2022-10-20T19:15:32.708317Z" }, "papermill": { "duration": 0.015636, "end_time": "2022-10-20T19:15:32.710797", "exception": false, "start_time": "2022-10-20T19:15:32.695161", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 1 bad peak(s)\n" ] }, { "data": { "text/plain": [ "array([[nan, nan]])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.flip(vectorized_correlation_to_displacements(corr[np.newaxis, :, :]) + np.floor(corr.shape[0] / 2))" ] }, { "cell_type": "code", "execution_count": 17, "id": "62707987", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.728191Z", "iopub.status.busy": "2022-10-20T19:15:32.727843Z", "iopub.status.idle": "2022-10-20T19:15:32.730844Z", "shell.execute_reply": "2022-10-20T19:15:32.730361Z" }, "papermill": { "duration": 0.01318, "end_time": "2022-10-20T19:15:32.732108", "exception": false, "start_time": "2022-10-20T19:15:32.718928", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "## Corner case 2: negative value next to peak - the log(n<0) fails" ] }, { "cell_type": "code", "execution_count": 18, "id": "33477849", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.748359Z", "iopub.status.busy": "2022-10-20T19:15:32.748149Z", "iopub.status.idle": "2022-10-20T19:15:32.753540Z", "shell.execute_reply": "2022-10-20T19:15:32.752973Z" }, "papermill": { "duration": 0.015461, "end_time": "2022-10-20T19:15:32.754791", "exception": false, "start_time": "2022-10-20T19:15:32.739330", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array([[-0.5, -0.5, -0.5, ..., -0.5, -0.5, -0.5],\n", " [-0.5, -0.5, -0.5, ..., -0.5, -0.5, -0.5],\n", " [-0.5, -0.5, 0.5, ..., -0.5, -0.5, -0.5],\n", " ...,\n", " [-0.5, -0.5, -0.5, ..., -0.5, -0.5, -0.5],\n", " [-0.5, -0.5, -0.5, ..., -0.5, -0.5, -0.5],\n", " [-0.5, -0.5, -0.5, ..., -0.5, -0.5, -0.5]])" ] }, "execution_count": 18, "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 -= 0.5\n", "corr" ] }, { "cell_type": "code", "execution_count": 19, "id": "e154cf93", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.771299Z", "iopub.status.busy": "2022-10-20T19:15:32.771035Z", "iopub.status.idle": "2022-10-20T19:15:32.776170Z", "shell.execute_reply": "2022-10-20T19:15:32.775034Z" }, "papermill": { "duration": 0.015355, "end_time": "2022-10-20T19:15:32.778225", "exception": false, "start_time": "2022-10-20T19:15:32.762870", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(3.0, 3.75)" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr) # automatically uses parabolic method" ] }, { "cell_type": "code", "execution_count": 20, "id": "37dd50f2", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.798417Z", "iopub.status.busy": "2022-10-20T19:15:32.797716Z", "iopub.status.idle": "2022-10-20T19:15:32.804879Z", "shell.execute_reply": "2022-10-20T19:15:32.804098Z" }, "papermill": { "duration": 0.018951, "end_time": "2022-10-20T19:15:32.806342", "exception": false, "start_time": "2022-10-20T19:15:32.787391", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 0 bad peak(s)\n", "Found 1 negative correlation indices resulting in NaNs\n", "Fallback for negative indices is a 3 point parabolic curve method\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/user/Documents/repos/openpiv-python/openpiv/pyprocess.py:1201: RuntimeWarning: invalid value encountered in log\n", " nom2 = log(cd) - log(cu)\n", "/home/user/Documents/repos/openpiv-python/openpiv/pyprocess.py:1202: RuntimeWarning: invalid value encountered in log\n", " den2 = 2 * log(cd) - 4 * log(c) + 2 * log(cu)\n" ] }, { "data": { "text/plain": [ "array([[3. ],\n", " [3.74999997]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.flip(vectorized_correlation_to_displacements(corr[np.newaxis, :, :]) + np.floor(corr.shape[0] / 2))" ] }, { "cell_type": "code", "execution_count": 21, "id": "cd6bacb4", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.825931Z", "iopub.status.busy": "2022-10-20T19:15:32.825323Z", "iopub.status.idle": "2022-10-20T19:15:32.829424Z", "shell.execute_reply": "2022-10-20T19:15:32.828710Z" }, "papermill": { "duration": 0.015253, "end_time": "2022-10-20T19:15:32.830931", "exception": false, "start_time": "2022-10-20T19:15:32.815678", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "## Corner case 3: zero next to the peak - the log(0) fails" ] }, { "cell_type": "code", "execution_count": 22, "id": "703609dc", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.850397Z", "iopub.status.busy": "2022-10-20T19:15:32.850177Z", "iopub.status.idle": "2022-10-20T19:15:32.855512Z", "shell.execute_reply": "2022-10-20T19:15:32.854977Z" }, "papermill": { "duration": 0.016947, "end_time": "2022-10-20T19:15:32.856734", "exception": false, "start_time": "2022-10-20T19:15:32.839787", "status": "completed" }, "tags": [] }, "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": 22, "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": 23, "id": "5a7b23fa", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.874116Z", "iopub.status.busy": "2022-10-20T19:15:32.873842Z", "iopub.status.idle": "2022-10-20T19:15:32.878988Z", "shell.execute_reply": "2022-10-20T19:15:32.878203Z" }, "papermill": { "duration": 0.015107, "end_time": "2022-10-20T19:15:32.880466", "exception": false, "start_time": "2022-10-20T19:15:32.865359", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(3.0, 3.5230088020336483)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "find_subpixel_peak_position(corr)" ] }, { "cell_type": "code", "execution_count": 24, "id": "a9c886dd", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.899022Z", "iopub.status.busy": "2022-10-20T19:15:32.898766Z", "iopub.status.idle": "2022-10-20T19:15:32.904518Z", "shell.execute_reply": "2022-10-20T19:15:32.903950Z" }, "papermill": { "duration": 0.017336, "end_time": "2022-10-20T19:15:32.905817", "exception": false, "start_time": "2022-10-20T19:15:32.888481", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 0 bad peak(s)\n" ] }, { "data": { "text/plain": [ "array([[3. ],\n", " [3.52395087]])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.flip(vectorized_correlation_to_displacements(corr[np.newaxis, :, :]) + np.floor(corr.shape[0] / 2))" ] }, { "cell_type": "code", "execution_count": 25, "id": "080d081c", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.924984Z", "iopub.status.busy": "2022-10-20T19:15:32.924590Z", "iopub.status.idle": "2022-10-20T19:15:32.930971Z", "shell.execute_reply": "2022-10-20T19:15:32.930237Z" }, "papermill": { "duration": 0.015988, "end_time": "2022-10-20T19:15:32.932294", "exception": false, "start_time": "2022-10-20T19:15:32.916306", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.0 3.5239508804084627\n", "3.0 3.5249733967346586\n", "3.0 3.75\n", "3.0 3.75\n", "3.0 3.600000095999977\n", "2.9999999999999996 3.600000143999948\n" ] } ], "source": [ "eps = 1e-7\n", "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": 26, "id": "70f94805", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.952865Z", "iopub.status.busy": "2022-10-20T19:15:32.951794Z", "iopub.status.idle": "2022-10-20T19:15:32.957888Z", "shell.execute_reply": "2022-10-20T19:15:32.957346Z" }, "papermill": { "duration": 0.019242, "end_time": "2022-10-20T19:15:32.959708", "exception": false, "start_time": "2022-10-20T19:15:32.940466", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 0 bad peak(s)\n", "[3.] [3.52532142]\n", "Found 0 bad peak(s)\n", "[3.] [3.75]\n", "Found 0 bad peak(s)\n", "[3.] [3.60000014]\n" ] } ], "source": [ "for method in ['gaussian','parabolic','centroid']:\n", " j, i = vectorized_correlation_to_displacements(corr[np.newaxis, :, :], subpixel_method = method) + np.floor(corr.shape[0] / 2)\n", " print(i, j)" ] }, { "cell_type": "markdown", "id": "fcbd904b", "metadata": { "papermill": { "duration": 0.008762, "end_time": "2022-10-20T19:15:32.977293", "exception": false, "start_time": "2022-10-20T19:15:32.968531", "status": "completed" }, "tags": [] }, "source": [ "### Speed increase demonstration" ] }, { "cell_type": "code", "execution_count": 27, "id": "c1d66b68", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:32.998802Z", "iopub.status.busy": "2022-10-20T19:15:32.998551Z", "iopub.status.idle": "2022-10-20T19:15:33.002563Z", "shell.execute_reply": "2022-10-20T19:15:33.002035Z" }, "papermill": { "duration": 0.017783, "end_time": "2022-10-20T19:15:33.003886", "exception": false, "start_time": "2022-10-20T19:15:32.986103", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "import pylab" ] }, { "cell_type": "code", "execution_count": 28, "id": "0fb4b3c6", "metadata": { "execution": { "iopub.execute_input": "2022-10-20T19:15:33.023186Z", "iopub.status.busy": "2022-10-20T19:15:33.022820Z", "iopub.status.idle": "2022-10-20T19:15:33.752115Z", "shell.execute_reply": "2022-10-20T19:15:33.751325Z" }, "papermill": { "duration": 0.739413, "end_time": "2022-10-20T19:15:33.753080", "exception": true, "start_time": "2022-10-20T19:15:33.013667", "status": "failed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "frame_a = imread('../test11/A001_1.tif')\n", "frame_b = imread('../test11/A001_2.tif')\n", "pylab.imshow(np.c_[frame_a,np.ones((frame_a.shape[0],20)),frame_b],\n", " cmap=pylab.cm.gray)" ] }, { "cell_type": "code", "execution_count": 29, "id": "b2220ccc", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [], "source": [ "window_size = 32\n", "overlap = 16\n", "from openpiv.pyprocess import moving_window_array, get_field_shape,\\\n", " get_coordinates, fft_correlate_images, correlation_to_displacement\n", "\n", "n_rows, n_cols = get_field_shape(\n", " frame_a.shape, \n", " window_size, \n", " overlap\n", " )\n", "x, y = get_coordinates(frame_a.shape, window_size, overlap)\n", "\n", "aa = moving_window_array(\n", " frame_a, \n", " window_size, \n", " overlap\n", ")\n", "\n", "bb = moving_window_array(\n", " frame_b, \n", " window_size,\n", " overlap\n", ")\n", "corr = fft_correlate_images(\n", " aa, bb,\n", " correlation_method='circular',\n", " normalized_correlation = True\n", ")" ] }, { "cell_type": "code", "execution_count": 30, "id": "c51da976", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['original', 'vectorized']\n" ] } ], "source": [ "from openpiv.pyprocess import find_all_first_peaks, find_all_second_peaks, find_second_peak\n", "peaks_v = find_all_second_peaks(corr)[0]\n", "peaks_o = []\n", "for i in range(len(corr)):\n", " (k, m), _ = find_second_peak(corr[i,:,:])\n", " peaks_o.append([i, k, m])\n", "print(['original', 'vectorized'])\n", "for i in range(len(peaks_v)):\n", " #print(peaks_o[i], peaks_v[i])\n", " if peaks_v[i][1] != peaks_o[i][1] or peaks_v[i][2] != peaks_o[i][2]:\n", " print(False)" ] }, { "cell_type": "code", "execution_count": 31, "id": "d79b5441", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 209 ms, sys: 1.15 ms, total: 210 ms\n", "Wall time: 207 ms\n" ] } ], "source": [ "%%time\n", "u_o, v_o = correlation_to_displacement(\n", " corr, \n", " n_rows,\n", " n_cols,\n", " subpixel_method='gaussian'\n", " )" ] }, { "cell_type": "code", "execution_count": 32, "id": "b21308af", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 7 bad peak(s)\n", "CPU times: user 9.43 ms, sys: 5.1 ms, total: 14.5 ms\n", "Wall time: 12.8 ms\n" ] } ], "source": [ "%%time\n", "u_v, v_v = vectorized_correlation_to_displacements(\n", " corr,\n", " n_rows,\n", " n_cols,\n", " subpixel_method='gaussian',\n", " #eps = 1e-7\n", ")" ] }, { "cell_type": "code", "execution_count": 33, "id": "599c924f", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[u original, u vectorized]\n", "[[-2.36462169 -2.36462164]\n", " [-2.42157302 -2.42157295]\n", " [-2.77813509 -2.77813515]\n", " [-2.9613403 -2.96134032]\n", " [-2.84248632 -2.84248634]\n", " [-2.90768449 -2.90768454]\n", " [-2.90936755 -2.90936758]\n", " [-2.97392535 -2.97392533]\n", " [-2.99476205 -2.99476203]\n", " [-3.01880582 -3.01880579]\n", " [-3.02868448 -3.02868447]\n", " [-2.98723135 -2.98723136]]\n", "(-0.9060849665516473, -0.9060849666233461)\n" ] } ], "source": [ "# slight descrepancies possibly caused by setting eps to 1e-10\n", "print('[u original, u vectorized]')\n", "print(np.stack((u_o[0, 0:12], u_v[0, 0:12])).T)\n", "print((np.nanmean(u_o), np.nanmean(u_v)))" ] }, { "cell_type": "markdown", "id": "7bb4ed15", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "source": [ "### Vectorized solution for signal-to-noise calculation" ] }, { "cell_type": "code", "execution_count": 34, "id": "cff13441", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [], "source": [ "from openpiv.pyprocess import vectorized_sig2noise_ratio,\\\n", " sig2noise_ratio" ] }, { "cell_type": "code", "execution_count": 35, "id": "9ad937b8", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 372 ms, sys: 547 µs, total: 372 ms\n", "Wall time: 371 ms\n" ] } ], "source": [ "%%time\n", "peak2peak_o = sig2noise_ratio(corr, 'peak2peak')" ] }, { "cell_type": "code", "execution_count": 36, "id": "ceb3e9f7", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 61 ms, sys: 10.2 ms, total: 71.3 ms\n", "Wall time: 69.8 ms\n" ] } ], "source": [ "%%time\n", "peak2peak_v = vectorized_sig2noise_ratio(corr, 'peak2peak')" ] }, { "cell_type": "code", "execution_count": 37, "id": "ae9d168b", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 55.4 ms, sys: 0 ns, total: 55.4 ms\n", "Wall time: 55.7 ms\n" ] } ], "source": [ "%%time\n", "peak2mean_o = sig2noise_ratio(corr, 'peak2mean')" ] }, { "cell_type": "code", "execution_count": 38, "id": "f4c317b6", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 21.8 ms, sys: 4.44 ms, total: 26.3 ms\n", "Wall time: 24.5 ms\n" ] } ], "source": [ "%%time\n", "peak2mean_v = vectorized_sig2noise_ratio(corr, 'peak2mean')" ] }, { "cell_type": "code", "execution_count": 39, "id": "0ba210f8", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[original, vectorized]\n", "[[1.61201227 1.61201227]\n", " [1.5020461 1.5020461 ]\n", " [1.73240258 1.73240258]\n", " [1.77473131 1.77473131]\n", " [1.76908876 1.76908876]\n", " [1.75000723 1.75000723]\n", " [1.81941217 1.81941217]\n", " [2.08015106 2.08015106]\n", " [2.25951898 2.25951898]\n", " [2.30283363 2.30283363]]\n", "(1.4506948880797015, 1.6115754802935716)\n" ] } ], "source": [ "print('[original, vectorized]')\n", "print(np.stack((peak2peak_o[0:10], peak2peak_v[0:10])).T)\n", "print((peak2peak_o.mean(), peak2peak_v.mean()))" ] }, { "cell_type": "code", "execution_count": 40, "id": "87b21cfd", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[original, vectorized]\n", "[[2.55781267 2.55781267]\n", " [2.50379333 2.50379333]\n", " [2.71928329 2.71928329]\n", " [2.86304558 2.86304558]\n", " [2.81331037 2.81331037]\n", " [2.58982427 2.58982427]\n", " [2.67415588 2.67415588]\n", " [2.9870506 2.9870506 ]\n", " [3.23796187 3.23796187]\n", " [3.39735305 3.39735305]]\n", "(2.5251078513323018, 2.5274277133879197)\n" ] } ], "source": [ "print('[original, vectorized]')\n", "print(np.stack((peak2mean_o[0:10], peak2mean_v[0:10])).T)\n", "print((peak2mean_o.mean(), peak2mean_v.mean()))" ] }, { "cell_type": "markdown", "id": "37cb46bc", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "source": [ "## Test for bias errors" ] }, { "cell_type": "code", "execution_count": 41, "id": "294a0b51", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [], "source": [ "from openpiv.pyprocess import correlation_to_displacement, fft_correlate_images, get_field_shape\n", "files = glob('../test14/*.bmp')\n", "files_a = files[::2]\n", "files_b = files[1::2]" ] }, { "cell_type": "code", "execution_count": 42, "id": "f9bec390", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 24 bad peak(s)\n", "Found 32 bad peak(s)\n", "Found 20 bad peak(s)\n", "Found 17 bad peak(s)\n", "Found 32 bad peak(s)\n", "Found 24 bad peak(s)\n", "Found 29 bad peak(s)\n", "Found 19 bad peak(s)\n", "Found 21 bad peak(s)\n", "Found 22 bad peak(s)\n", "Found 31 bad peak(s)\n", "Found 26 bad peak(s)\n", "Found 28 bad peak(s)\n", "Found 20 bad peak(s)\n", "Found 30 bad peak(s)\n", "Found 20 bad peak(s)\n", "Found 29 bad peak(s)\n", "Found 30 bad peak(s)\n", "Found 39 bad peak(s)\n", "Found 18 bad peak(s)\n", "Found 28 bad peak(s)\n", "Found 25 bad peak(s)\n", "Found 25 bad peak(s)\n", "Found 23 bad peak(s)\n", "Found 25 bad peak(s)\n", "Found 30 bad peak(s)\n", "Found 22 bad peak(s)\n", "Found 28 bad peak(s)\n", "Found 16 bad peak(s)\n", "Found 19 bad peak(s)\n", "Found 23 bad peak(s)\n", "Found 38 bad peak(s)\n", "Found 26 bad peak(s)\n" ] } ], "source": [ "bias_error_original = []\n", "bias_error_vectorized = []\n", "window_size = 32\n", "overlap = 16\n", "real_disp = 3\n", "n = 1/32\n", "for i in range(len(files_a)):\n", " frame_a = imread(files_a[i])\n", " frame_b = imread(files_b[i])\n", " n_rows, n_cols = get_field_shape(\n", " frame_a.shape, \n", " window_size, \n", " overlap\n", " )\n", " aa = moving_window_array(frame_a, window_size, overlap)\n", " bb = moving_window_array(frame_b, window_size, overlap)\n", " corr = fft_correlate_images(aa, bb, 'circular', False)\n", " u_o, v_o = correlation_to_displacement(corr, n_rows, n_cols, 'gaussian')\n", " u_v, v_v = vectorized_correlation_to_displacements(corr, n_rows, n_cols, 'gaussian')\n", " u_o = u_o[2:-2, 2:-2] # extract valid components\n", " u_v = u_v[2:-2, 2:-2]\n", " v_o = v_o[2:-2, 2:-2] \n", " v_v = v_v[2:-2, 2:-2]\n", " bias_error_original.append(np.hypot(real_disp,real_disp) - np.nanmean(np.hypot(u_o, v_o))) \n", " bias_error_vectorized.append(np.hypot(real_disp,real_disp) - np.nanmean(np.hypot(u_v, v_v)))\n", " real_disp += n" ] }, { "cell_type": "code", "execution_count": 43, "id": "4479b6c7", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.set_ylabel('Bias error [px]')\n", "ax.set_xlabel('Real u and v displacements [px]')\n", "ax.plot(np.mgrid[3:4+n:n], bias_error_original)\n", "ax.plot(np.mgrid[3:4+n:n], bias_error_vectorized)\n", "ax.legend(\n", " ['orginal', 'vectorized'],\n", " loc = 'upper right'\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "4bb3c0ec", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "pending" }, "tags": [] }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.8.12 ('echopiv')", "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.8.12" }, "papermill": { "default_parameters": {}, "duration": 4.096182, "end_time": "2022-10-20T19:15:34.083542", "environment_variables": {}, "exception": true, "input_path": "./notebooks/test_vectorized_functions.ipynb", "output_path": "./notebooks/test_vectorized_functions.ipynb", "parameters": {}, "start_time": "2022-10-20T19:15:29.987360", "version": "2.4.0" }, "vscode": { "interpreter": { "hash": "f83b0c3a4910470a1212112b1707d582432916ed4ba8aec962241a050aa18fae" } } }, "nbformat": 4, "nbformat_minor": 5 }