src/template_matching_scaling/notebooks/motion_displacement_flat_10cm_scaled_exhaustive.ipynb
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Terrain Motion Displacement - Flat 10cm (Scaled - Exhaustive)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1) IPython Setup"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* \n",
" * Force prevention of output scroll toggle.\n",
" * Original source: https://github.com/ipython/ipython/issues/2172#issuecomment-53708976 \n",
" */\n",
"IPython.OutputArea.auto_scroll_threshold = 9999;"
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%javascript\n",
"/* \n",
" * Force prevention of output scroll toggle.\n",
" * Original source: https://github.com/ipython/ipython/issues/2172#issuecomment-53708976 \n",
" */\n",
"IPython.OutputArea.auto_scroll_threshold = 9999;"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%load_ext ipycache\n",
"%matplotlib inline\n",
"\n",
"import matplotlib as mpl\n",
"mpl.rcParams['figure.figsize'] = (12, 8)\n",
"\n",
"# We have to add a reference to the parent folder in order to access the modules.\n",
"import sys,os\n",
"sys.path.insert(1, os.path.join(sys.path[0], '..'))\n",
"\n",
"import main as templ\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import cv2\n",
"\n",
"from tse.tse_matchmethod import tse_match_methods\n",
"from tse.tse_matchtype import TSEMatchType\n",
"from tse.tse_datautils import TSEDataUtils"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2) Calculate Displacement "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%%cache -d cache/ cache_flat_10cm_scaled_exhaustive.pkl results_dict\n",
"\n",
"config_file = \"../../eval_data/calib/calibdata_23_03_15_11_07_04.txt\"\n",
"\n",
"image_pairs = [\n",
" (\"../../eval_data/motion_images/flat_10cm/IMG1.JPG\", \"../../eval_data/motion_images/flat_10cm/IMG2.JPG\"),\n",
" (\"../../eval_data/motion_images/flat_10cm/IMG3.JPG\", \"../../eval_data/motion_images/flat_10cm/IMG4.JPG\"),\n",
" (\"../../eval_data/motion_images/flat_10cm/IMG5.JPG\", \"../../eval_data/motion_images/flat_10cm/IMG6.JPG\"),\n",
" (\"../../eval_data/motion_images/flat_10cm/IMG7.JPG\", \"../../eval_data/motion_images/flat_10cm/IMG8.JPG\"),\n",
" (\"../../eval_data/motion_images/flat_10cm/IMG9.JPG\", \"../../eval_data/motion_images/flat_10cm/IMG10.JPG\"),\n",
" (\"../../eval_data/motion_images/flat_10cm/IMG11.JPG\", \"../../eval_data/motion_images/flat_10cm/IMG12.JPG\")\n",
" ]\n",
"\n",
"patch_sizes = [50, 100, 200]\n",
"\n",
"match_method1 = TSEMatchType(\"DistanceEuclidean\", tse_match_methods.DISTANCE_ED, None, \"r\", reverse_score=True)\n",
"match_method2 = TSEMatchType(\"HistCorrel\", tse_match_methods.HIST, cv2.cv.CV_COMP_CORREL, \"b\")\n",
"match_method3 = TSEMatchType(\"HistChiSqr\", tse_match_methods.HIST, cv2.cv.CV_COMP_CHISQR, \"g\", reverse_score=True)\n",
"match_method4 = TSEMatchType(\"DistanceCorr\", tse_match_methods.DISTANCE, cv2.cv.CV_TM_CCORR_NORMED, \"y\")\n",
"\n",
"match_methods = [match_method1, match_method2, match_method3, match_method4]\n",
"\n",
"results_dict = templ.start_tests(image_pairs, patch_sizes, match_methods, config_file, exhaustive_search=True, use_scaling=True, plot_results=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3) Tests"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test 1: IMG1/IMG2 - 50px patch - *DistanceEuclidean*, *DistanceCorr*, *HistCorrel*, *HistChiSqr*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"results_pair1_50 = results_dict['IMG1.JPG_IMG2.JPG'][50]\n",
"\n",
"final_results = {}\n",
"format_ids = [\"b\", \"g\", \"r\", \"y\"]\n",
"\n",
"for method in results_pair1_50:\n",
" \n",
" if method not in final_results:\n",
" final_results[method] = {}\n",
"\n",
" data = results_pair1_50[method]\n",
"\n",
" final_results[method]['displacement'] = [o.displacement for o in data]\n",
"\n",
" final_results[method]['row'] = [o.row for o in data]\n",
" \n",
" \n",
"for i, result in enumerate(final_results):\n",
" \n",
" final_results[result]['cma'] = TSEDataUtils.calc_centered_moving_average(np.array(final_results[result]['displacement']), 10)\n",
" \n",
" plt.plot(np.array(final_results[result]['row']), np.array(final_results[result]['displacement']), \"{0}.\".format(format_ids[i]), label=result)\n",
" \n",
" plt.plot(final_results[result]['row'][len(final_results[result]['row']) - len(final_results[result]['cma']):], final_results[result]['cma'], \"{0}-\".format(format_ids[i]), label=\"{0}_CMA\".format(result)) \n",
"\n",
"plt.title('Vertical Motion Displacement - IMG1/IMG2 - 50px patch height')\n",
"plt.xlabel('Image Row Height (px)')\n",
"plt.ylabel('Vertical Displacement (px)')\n",
"plt.legend(loc='upper left')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test 2: IMG1/IMG2 - 100px patch - *DistanceEuclidean*, *DistanceCorr*, *HistCorrel*, *HistChiSqr*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"results_pair1_100 = results_dict['IMG1.JPG_IMG2.JPG'][100]\n",
"\n",
"final_results = {}\n",
"format_ids = [\"b\", \"g\", \"r\", \"y\"]\n",
"\n",
"for method in results_pair1_100:\n",
" \n",
" if method not in final_results:\n",
" final_results[method] = {}\n",
"\n",
" data = results_pair1_100[method]\n",
"\n",
" final_results[method]['displacement'] = [o.displacement for o in data]\n",
"\n",
" final_results[method]['row'] = [o.row for o in data]\n",
" \n",
" \n",
"for i, result in enumerate(final_results):\n",
" \n",
" final_results[result]['cma'] = TSEDataUtils.calc_centered_moving_average(np.array(final_results[result]['displacement']), 10)\n",
" \n",
" plt.plot(np.array(final_results[result]['row']), np.array(final_results[result]['displacement']), \"{0}.\".format(format_ids[i]), label=result)\n",
" \n",
" plt.plot(final_results[result]['row'][len(final_results[result]['row']) - len(final_results[result]['cma']):], final_results[result]['cma'], \"{0}-\".format(format_ids[i]), label=\"{0}_CMA\".format(result)) \n",
"\n",
"plt.title('Vertical Motion Displacement - IMG1/IMG2 - 100px patch height')\n",
"plt.xlabel('Image Row Height (px)')\n",
"plt.ylabel('Vertical Displacement (px)')\n",
"plt.legend(loc='upper left')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test 3: IMG1/IMG2 - 200px patch - *DistanceEuclidean, DistanceCorr, HistCorrel, HistChiSqr*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"results_pair1_200 = results_dict['IMG1.JPG_IMG2.JPG'][200]\n",
"\n",
"final_results = {}\n",
"format_ids = [\"b\", \"g\", \"r\", \"y\"]\n",
"\n",
"for method in results_pair1_200:\n",
" \n",
" if method not in final_results:\n",
" final_results[method] = {}\n",
"\n",
" data = results_pair1_200[method]\n",
"\n",
" final_results[method]['displacement'] = [o.displacement for o in data]\n",
"\n",
" final_results[method]['row'] = [o.row for o in data]\n",
" \n",
" \n",
"for i, result in enumerate(final_results):\n",
" \n",
" final_results[result]['cma'] = TSEDataUtils.calc_centered_moving_average(np.array(final_results[result]['displacement']), 10)\n",
" \n",
" plt.plot(np.array(final_results[result]['row']), np.array(final_results[result]['displacement']), \"{0}.\".format(format_ids[i]), label=result)\n",
" \n",
" plt.plot(final_results[result]['row'][len(final_results[result]['row']) - len(final_results[result]['cma']):], final_results[result]['cma'], \"{0}-\".format(format_ids[i]), label=\"{0}_CMA\".format(result)) \n",
"\n",
"plt.title('Vertical Motion Displacement - IMG1/IMG2 - 200px patch height')\n",
"plt.xlabel('Image Row Height (px)')\n",
"plt.ylabel('Vertical Displacement (px)')\n",
"plt.legend(loc='upper left')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test 4: IMG1/IMG2 - 100px, 200px patch - *DistanceEuclidean*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"results_pair1 = results_dict['IMG1.JPG_IMG2.JPG']\n",
"\n",
"raw_results_pair1_100_200 = []\n",
"image_rows = []\n",
"\n",
"final_results = {}\n",
"format_ids = [\"b\", \"g\", \"r\", \"y\"]\n",
"\n",
"for patch in results_pair1:\n",
" \n",
" if patch not in final_results:\n",
" final_results[patch] = {}\n",
" final_results[patch]['DistanceEuclidean'] = {}\n",
"\n",
" data = results_pair1[patch]['DistanceEuclidean']\n",
"\n",
" final_results[patch]['DistanceEuclidean']['displacement'] = [o.displacement for o in data]\n",
"\n",
" final_results[patch]['DistanceEuclidean']['row'] = [o.row for o in data]\n",
" \n",
"for i, result in enumerate(final_results):\n",
" \n",
" current_patch_data_euclidean = final_results[result]['DistanceEuclidean']\n",
" current_patch_data_euclidean['cma'] = TSEDataUtils.calc_centered_moving_average(np.array(current_patch_data_euclidean['displacement']), 10)\n",
" \n",
" plt.plot(np.array(current_patch_data_euclidean['row']), np.array(current_patch_data_euclidean['displacement']), \"{0}.\".format(format_ids[i]), label=result)\n",
" \n",
" plt.plot(current_patch_data_euclidean['row'][len(current_patch_data_euclidean['row']) - len(current_patch_data_euclidean['cma']):], current_patch_data_euclidean['cma'], \"{0}-\".format(format_ids[i]), label=\"{0}_CMA\".format(result)) \n",
"\n",
"plt.title('Average Vertical Motion Displacement - IMG1/IMG2 - 100px/200px patch height - Euclidean Distance')\n",
"plt.xlabel('Image Row Height (px)')\n",
"plt.ylabel('Average Vertical Displacement (px)')\n",
"plt.legend(loc='upper left')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test 5: IMG1 - IMG12 - 50px patch - *DistanceEuclidean, DistanceCorr, HistCorrel, HistChiSqr*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"results = results_dict\n",
"\n",
"final_results = {}\n",
"\n",
"format_ids = [\"b\", \"g\", \"r\", \"y\"]\n",
"\n",
"for image_pair in results:\n",
" \n",
" for method in results[image_pair][50]:\n",
" \n",
" if method not in final_results:\n",
" final_results[method] = {}\n",
" \n",
" data = results[image_pair][50][method]\n",
" \n",
" if 'displacement' in final_results[method]:\n",
" final_results[method]['displacement'].append([o.displacement for o in data])\n",
" else:\n",
" final_results[method]['displacement'] = [[o.displacement for o in data]]\n",
" \n",
" final_results[method]['row'] = [o.row for o in data]\n",
" \n",
"\n",
"for i, result in enumerate(final_results):\n",
" \n",
" final_results[result]['average'] = TSEDataUtils.calc_element_wise_average(final_results[result]['displacement'])\n",
" \n",
" final_results[result]['filtered'] = TSEDataUtils.filter_outliers_ab_dist_median(final_results[result]['average'])\n",
" \n",
" final_results[result]['filtered_row'] = np.array(final_results[result]['row'])[TSEDataUtils.filter_outliers_ab_dist_median_indices(final_results[result]['average'])]\n",
" \n",
" final_results[result]['cma'] = TSEDataUtils.calc_centered_moving_average(np.array(final_results[result]['filtered']), 10)\n",
" \n",
" plt.plot(np.array(final_results[result]['filtered_row']), np.array(final_results[result]['filtered']), \"{0}.\".format(format_ids[i]), label=\"{0} (Filtered)\".format(result))\n",
" \n",
" plt.plot(final_results[result]['filtered_row'][len(final_results[result]['filtered_row']) - len(final_results[result]['cma']):], final_results[result]['cma'], \"{0}-\".format(format_ids[i]), label=\"{0}_CMA\".format(result)) \n",
" \n",
"plt.title('Average Vertical Motion Displacement - IMG1-IMG12 - 50px patch height')\n",
"plt.xlabel('Image Row Height (px)')\n",
"plt.ylabel('Average Vertical Displacement (px)')\n",
"plt.legend(loc='upper left')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test 6: IMG1 - IMG12 - 100px patch - *DistanceEuclidean, DistanceCorr, HistCorrel, HistChiSqr*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [],
"source": [
"results = results_dict\n",
"\n",
"final_results = {}\n",
"\n",
"format_ids = [\"b\", \"g\", \"r\", \"y\"]\n",
"\n",
"for image_pair in results:\n",
" \n",
" for method in results[image_pair][100]:\n",
" \n",
" if method not in final_results:\n",
" final_results[method] = {}\n",
" \n",
" data = results[image_pair][100][method]\n",
" \n",
" if 'displacement' in final_results[method]:\n",
" final_results[method]['displacement'].append([o.displacement for o in data])\n",
" else:\n",
" final_results[method]['displacement'] = [[o.displacement for o in data]]\n",
" \n",
" final_results[method]['row'] = [o.row for o in data]\n",
" \n",
"\n",
"for i, result in enumerate(final_results):\n",
" \n",
" final_results[result]['average'] = TSEDataUtils.calc_element_wise_average(final_results[result]['displacement'])\n",
" \n",
" final_results[result]['filtered'] = TSEDataUtils.filter_outliers_ab_dist_median(final_results[result]['average'])\n",
" \n",
" final_results[result]['filtered_row'] = np.array(final_results[result]['row'])[TSEDataUtils.filter_outliers_ab_dist_median_indices(final_results[result]['average'])]\n",
" \n",
" final_results[result]['cma'] = TSEDataUtils.calc_centered_moving_average(np.array(final_results[result]['filtered']), 10)\n",
" \n",
" plt.plot(np.array(final_results[result]['filtered_row']), np.array(final_results[result]['filtered']), \"{0}.\".format(format_ids[i]), label=\"{0} (Filtered)\".format(result))\n",
" \n",
" plt.plot(final_results[result]['filtered_row'][len(final_results[result]['filtered_row']) - len(final_results[result]['cma']):], final_results[result]['cma'], \"{0}-\".format(format_ids[i]), label=\"{0}_CMA\".format(result)) \n",
" \n",
"plt.title('Average Vertical Motion Displacement - IMG1-IMG12 - 100px patch height')\n",
"plt.xlabel('Image Row Height (px)')\n",
"plt.ylabel('Average Vertical Displacement (px)')\n",
"plt.legend(loc='upper left')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test 7: IMG1 - IMG12 - 200px patch - *DistanceEuclidean, DistanceCorr, HistCorrel, HistChiSqr*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [],
"source": [
"results = results_dict\n",
"\n",
"final_results = {}\n",
"\n",
"format_ids = [\"b\", \"g\", \"r\", \"y\"]\n",
"\n",
"for image_pair in results:\n",
" \n",
" for method in results[image_pair][200]:\n",
" \n",
" if method not in final_results:\n",
" final_results[method] = {}\n",
" \n",
" data = results[image_pair][200][method]\n",
" \n",
" if 'displacement' in final_results[method]:\n",
" final_results[method]['displacement'].append([o.displacement for o in data])\n",
" else:\n",
" final_results[method]['displacement'] = [[o.displacement for o in data]]\n",
" \n",
" final_results[method]['row'] = [o.row for o in data]\n",
" \n",
"\n",
"for i, result in enumerate(final_results):\n",
" \n",
" final_results[result]['average'] = TSEDataUtils.calc_element_wise_average(final_results[result]['displacement'])\n",
" \n",
" final_results[result]['filtered'] = TSEDataUtils.filter_outliers_ab_dist_median(final_results[result]['average'])\n",
" \n",
" final_results[result]['filtered_row'] = np.array(final_results[result]['row'])[TSEDataUtils.filter_outliers_ab_dist_median_indices(final_results[result]['average'])]\n",
" \n",
" final_results[result]['cma'] = TSEDataUtils.calc_centered_moving_average(np.array(final_results[result]['filtered']), 10)\n",
" \n",
" plt.plot(np.array(final_results[result]['filtered_row']), np.array(final_results[result]['filtered']), \"{0}.\".format(format_ids[i]), label=\"{0} (Filtered)\".format(result))\n",
" \n",
" plt.plot(final_results[result]['filtered_row'][len(final_results[result]['filtered_row']) - len(final_results[result]['cma']):], final_results[result]['cma'], \"{0}-\".format(format_ids[i]), label=\"{0}_CMA\".format(result)) \n",
" \n",
"plt.title('Average Vertical Motion Displacement - IMG1-IMG12 - 200px patch height')\n",
"plt.xlabel('Image Row Height (px)')\n",
"plt.ylabel('Average Vertical Displacement (px)')\n",
"plt.legend(loc='upper left')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"results = results_dict\n",
"\n",
"final_results = {}\n",
"\n",
"format_ids = [\"b\", \"g\", \"r\", \"y\"]\n",
"\n",
"fig, ax = plt.subplots()\n",
"\n",
"mpl.rcParams['figure.figsize'] = (16, 20)\n",
"mpl.rcParams.update({'font.size': 16})\n",
"\n",
"for i, patch in enumerate([50, 100, 200]):\n",
" \n",
" ax = plt.subplot2grid((3,1), (i,0))\n",
"\n",
" for image_pair in results:\n",
"\n",
" for method in results[image_pair][patch]:\n",
"\n",
" if method not in final_results:\n",
" final_results[method] = {}\n",
"\n",
" data = results[image_pair][patch][method]\n",
"\n",
" if 'displacement' in final_results[method]:\n",
" final_results[method]['displacement'].append([o.displacement for o in data])\n",
" else:\n",
" final_results[method]['displacement'] = [[o.displacement for o in data]]\n",
"\n",
" final_results[method]['row'] = [o.row for o in data]\n",
"\n",
"\n",
" for i, result in enumerate(final_results):\n",
"\n",
" final_results[result]['average'] = TSEDataUtils.calc_element_wise_average(final_results[result]['displacement'])\n",
"\n",
" final_results[result]['filtered'] = TSEDataUtils.filter_outliers_ab_dist_median(final_results[result]['average'])\n",
"\n",
" final_results[result]['filtered_row'] = np.array(final_results[result]['row'])[TSEDataUtils.filter_outliers_ab_dist_median_indices(final_results[result]['average'])]\n",
"\n",
" final_results[result]['cma'] = TSEDataUtils.calc_centered_moving_average(np.array(final_results[result]['filtered']), 10)\n",
"\n",
" plt.plot(np.array(final_results[result]['filtered_row']), np.array(final_results[result]['filtered']), \"{0}.\".format(format_ids[i]), label=\"{0} (Filtered)\".format(result))\n",
"\n",
" plt.plot(final_results[result]['filtered_row'][len(final_results[result]['filtered_row']) - len(final_results[result]['cma']):], final_results[result]['cma'], \"{0}-\".format(format_ids[i]), label=\"{0}_CMA\".format(result)) \n",
"\n",
" ax.spines['right'].set_visible(False)\n",
" ax.spines['top'].set_visible(False)\n",
" ax.xaxis.set_ticks_position('bottom')\n",
" ax.yaxis.set_ticks_position('left')\n",
"\n",
" plt.title('Average Vertical Motion Displacement - IMG1-IMG12 - {0}px patch height'.format(patch))\n",
" plt.xlabel('Image Row Height (px)')\n",
" plt.ylabel('Average Vertical Displacement (px)')\n",
"\n",
"ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.1),\n",
" fancybox=True, ncol=3)\n",
"\n",
"fig.tight_layout()\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}