cgddrd/CS39440-major-project

View on GitHub
src/template_matching_scaling/notebooks/motion_displacement_flat_10cm_scaled_exhaustive_scores.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Terrain Motion Displacement - Flat 10cm (Scaled - Exhaustive) - Scores"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1) IPython Setup"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false,
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "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": 2,
   "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": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[Saved variables results_dict to file '/Users/connorgoddard/Desktop/CS39440-major-project/src/template_matching_scaling/notebooks/cache/cache_flat_10cm_scaled_exhaustive_scores.pkl'.]\n"
     ]
    }
   ],
   "source": [
    "%%cache -d cache/ cache_flat_10cm_scaled_exhaustive_scores.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 = [100]\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]\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": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x10cba7c50>]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108274c10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "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'] = [result.displacement for result in data]\n",
    "\n",
    "    final_results[method]['row'] = [result.row for result in data]\n",
    "    \n",
    "    final_results[method]['match_scores'] = [result.match_scores for result in data]\n",
    "\n",
    "\n",
    "# print final_results['DistanceEuclidean']['match_scores']\n",
    "\n",
    "print final_results['DistanceEuclidean']['row']\n",
    "# print final_results['DistanceEuclidean']['match_scores'][0]\n",
    "\n",
    "scores = [result[0] for result in final_results['DistanceEuclidean']['match_scores'][1]]\n",
    "rows = [result[1] for result in final_results['DistanceEuclidean']['match_scores'][1]]\n",
    "\n",
    "# print scores\n",
    "# print rows\n",
    "\n",
    "plt.plot(np.array(rows), np.array(scores), \"{0}-\".format('b'), label=result)\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": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "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
}