{ "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "\n", "import numpy,scipy,scipy.ndimage,zlib,pylab\n", "from pylab import imread,imshow,savefig\n", "from scipy import linalg,ndimage\n", "from scipy.ndimage import interpolation,filters,morphology,measurements,fourier\n", "from scipy.linalg import norm\n", "from scipy.fftpack import fft,ifft,fft2,ifft2\n", "figsize(8,8)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sample Data for Line Finding" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [], "source": [ "image = transpose(imread(\"points.png\")[::-1,:,0])\n", "labels,n = measurements.label(image)\n", "points = array(measurements.center_of_mass(image,labels,range(1,n)))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\naey+seby73//216+fLk9PDxs9/T02Hfffbd97dq1hIz7Vo02v7q6OnvPnj3fWjYZ5zcwMGCfOnXK\ntm3bPn/vItsgAAAEO0lEQVT+vL148WK7q6srZbbhWPNLlW148eJF27Zt+8qVK/bKlSvt48ePp8y2\ns+3R55cq2+4be/bssTdu3GivW7fOtu3U+vfTtr89v6nafjN2ulE7Rb6PvWrVKs2bN++G+8aaS2tr\nq6qqqpSZmSm3263c3NzYyWNMNdr8pNE/wZ+M81uwYIEKCwslSbNnz9Y999yjcDicMttwrPlJqbEN\ns77+Yvfw8LCuXbumefPmpcy2k0afn5Qa206S+vr6dPToUdXU1MTmlErbb7T52bY9JdtvRmJtWZbW\nrFmjFStW6Le//a0kaWhoSA6HQ5LkcDg0NDQ0E0OZFmPNpb+/Xy6XK7acy+WK/cOZbPbt26fly5dr\n69atscNUyT6/Tz75RKdOndLKlStTcht+M7+SkhJJqbENR0ZGVFhYKIfDETvcn0rbbrT5Samx7STp\n2Wef1SuvvKJZs/6XnlTafqPNz7KsKdl+MxLrEydO6NSpUwoEAnr99dd1/PjxGx4f6/vYyWiiuSTj\nPLdt26aenh6dPn1aCxcu1HPPPTfmsskyvwsXLmjDhg3au3ev5syZc8NjqbANL1y4oB//+Mfau3ev\nZs+enTLbcNasWTp9+rT6+vr03nvv6d13373h8WTfdjfPLxgMpsy2e/PNN5WTkyOv1zvmuTaSefuN\nNb+p2n4zEutU/z72WHNxOp3q7e2NLdfX1yen05mQMcYjJycn9peopqYmdqgmWed35coVbdiwQZs3\nb459tTCVtuE383vsscdi80u1bTh37lw9/PDD+vDDD1Nq233jm/l98MEHKbPt3n//fbW1tWnRokWq\nqqrSO++8o82bN6fM9httflu2bJm67TfFv1v/losXL9pffvmlbdu2feHCBfv73/++/ec//9l+/vnn\n7YaGBtu2bbu+vj5pPmBm27bd09PzrQ+YjTaXbz5A8N///tf++OOP7bvuusseGRlJyJi/i5vn19/f\nH7v9m9/8xq6qqrJtOznnNzIyYm/evNl+5plnbrg/VbbhWPNLhW342Wef2efOnbNt27YvXbpkr1q1\nyn777bdTZtuNNb+BgYHYMsm67W4WDAbtH/7wh7Ztp87fvetdP7+p+rs37bH++OOP7eXLl9vLly+3\nlyxZYu/evdu2bdv+/PPP7dWrV9t5eXl2aWlp7H9S0/3kJz+xFy5caGdmZtoul8v+3e9+N+5cfvWr\nX9l33323/b3vfc8+duxYAkd+a26eX2Njo71582a7oKDAXrZsmf2jH/3IHhwcjC2fbPM7fvy4bVmW\nvXz5cruwsNAuLCy0A4FAymzD0eZ39OjRlNiG//jHP2yv12svX77cLigosH/961/btj3+vyXJMjfb\nHnt+qbDtbhYMBmOflk6V7Xe9d999Nza/xx57bEq2X1wX8gAAANNvxr66BQAAJodYAwBgOGINAIDh\niDUAAIYj1gAAGO7/AVvHGFkPnU9+AAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(points[:,0],points[:,1],'.')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Robust Least Squares" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Problem:\n", "\n", "Why don't we just perform a global least square fit?\n", "\n", "- images contain a large amount of clutter (points not belonging to the target object)\n", "- if we add points that aren't part of the target line to the least square match, it will break the match" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m,b = polyfit(points[:,0],points[:,1],1)\n", "plot(points[:,0],points[:,1],'.')\n", "plot([0,512],[b,m*512+b])" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n7dq17tixYymzds5NPL9UWbvzdu3a5TZv3uzuuece51xq/f/TuW/P72qt37x93ai75B3gk31W27pU\n/9z5RPOTJn4HfzLOb9myZSouLpYkLV68WKtWrVIkEkmZNZxsflJqrGFGRoYkaWxsTOfOndPSpUtT\nZu2kiecnpcbaSbE3HR85ckR1dXXxOaXS+k00Pxd7Uvytba90fvMSa8/zVF5erjVr1uj3v/+9JGl0\ndFTZ2dmSYu8uHx0dnY+hzInJ5jI0NKScnJz4djk5OfH/cSabPXv2qKioSFu3bo1/vWyyz++jjz7S\niRMntHbt2pRcw/PzKysrk5Qaazg+Pq7i4mJlZ2frjjvu0OrVq1Nq7Saan5QaaydJjz76qJ577jkt\nWvS/9KTS+k00P8/zrsr6zUus33nnHZ04cUIdHR363e9+p2PHjl10+3Sf1U4mM/ncuXXbtm1Tf3+/\nenp6tHz5cj322GOTbpss8ztz5ow2bdqk3bt3a8mSJRfdlgpreObMGf34xz/W7t27tXjx4pRZw0WL\nFqmnp0eDg4N6++239dZbb110e7Kv3aXzC4VCKbN2r732mrKyshQIBCb9ro1kXr/J5ne11m9eYr18\n+XJJ0nXXXacf/ehH6u7unvSz2sko1T93npWVFf+PqK6uLn6oJlnnd/bsWW3atEk1NTXxjx2m0hqe\nn9/9998fn1+qreE111yju+++W++//35Krd155+f33nvvpczavfvuu2pvb9eKFStUXV2tN998UzU1\nNSmzfhPNb8uWLVdv/a7ya+vf8sUXX7jTp08755w7c+aM+973vudef/119/jjj7umpibnnHONjY1J\n8wYz57799auTzeX8Gwj++9//ug8//NB997vfdePj4wkZ85W4dH5DQ0Pxy7/97W9ddXW1cy455zc+\nPu5qamrcI488ctH1qbKGk80vFdbwP//5T/ydwl9++aW7/fbb3Z///OeUWbvJ5jc8PBzfJlnX7lKh\nUCj+bulUWb8LXTi/q/Xf3pzH+sMPP3RFRUWuqKjIrV692u3cudM5F3u7/rp165Luo1s//elP3fLl\ny116errLyclxL7744pRz+fWvf+1uuOEGd+ONN7qjR48mcOSX59L57d+/39XU1LjCwkJ38803ux/+\n8IduZGQkvn2yze/YsWPO8zxXVFQU/yhFR0dHyqzhRPM7cuRISqzhP/7xDxcIBFxRUZErLCx0v/nN\nb5xzU/+/JFnm5tzk80uFtbtUKBSKv1s6VdbvQm+99VZ8fvfff/9VWT/POb6oGwAAy+bto1sAAGBm\niDUAAMYC7+mYAAAAFklEQVQRawAAjCPWAAAYR6wBADDu/wAqnHXtirIFwwAAAABJRU5ErkJggg==\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pred = m*points[:,0]+b\n", "inlier = (abs(pred-points[:,1])<100)\n", "plot(points[inlier,0],points[inlier,1],'.')" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m,b = polyfit(points[inlier,0],points[inlier,1],1)\n", "plot(points[:,0],points[:,1],'.')\n", "plot([0,512],[b,m*512+b])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# RANSAC" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "RANSAC:\n", "\n", "The idea behind RANSAC is the following:\n", "\n", "- try a whole bunch of different line parameters\n", "- determine which line matches the data best\n", "- return those line parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finding candidate lines:\n", "\n", "- take any two points\n", "- determine the line through them\n", "- evaluate all the remaining points relative to that line" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Evaluation of points:\n", "\n", "- simple: if the point is within some error bound from the line it counts\n", "- better: a smooth falloff $q=\\max(1-\\frac{\\delta^2}{\\epsilon^2},0)$" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# evaluating a set of line parameters\n", "def evaluate(points,m,b,eps=20):\n", " count = 0\n", " for x,y in points:\n", " error = abs(y-(m*x+b))\n", " count += max(1-error**2/eps**2,0)\n", " return count" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.0 (-1.3421052631578947, 319.4736842105263)\n", "10.0765766632 (1.015748031496063, 12.952755905511822)\n", "10.9286148148 (1.0444444444444445, 1.9333333333332803)\n", "11.1182718561 (1.0110294117647058, 9.128676470588232)\n", "11.1569616826 (1.0136054421768708, 8.2244897959183731)\n", "11.1746508366 (1.0150943396226415, 6.3094339622641655)\n", "11.18229216 (1.032, 1.7680000000000007)\n", "11.2197590203 (1.0209205020920502, 5.6569037656903731)\n" ] } ], "source": [ "# RANSAC\n", "best = None\n", "best_q = 0\n", "for trial in range(10000):\n", " x0,y0 = points[randint(0,len(points)-1)]\n", " x1,y1 = points[randint(0,len(points)-1)]\n", " if abs(x1-x0)<5: continue\n", " m = (y1-y0)/(x1-x0)\n", " b = y0-m*x0\n", " q = evaluate(points,m,b)\n", " if q>best_q:\n", " best_q = q\n", " best = (m,b)\n", " print best_q,best" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAASUVORK5CYII=\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m,b = best\n", "plot(points[:,0],points[:,1],'.')\n", "plot([0,512],[b,m*512+b],'g-')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 }