Skip to content

Instantly share code, notes, and snippets.

@simrit1
Forked from WetHat/PY-CircleFitting.ipynb
Created July 27, 2022 20:25
Show Gist options
  • Save simrit1/41099153323bf744273c26cb7037bb70 to your computer and use it in GitHub Desktop.
Save simrit1/41099153323bf744273c26cb7037bb70 to your computer and use it in GitHub Desktop.
Fitting a Circle to a 2d Point Cloud by Linear Least Squares
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Fitting a Circle to a 2-Dimensional Point Cloud\n",
"\n",
"Fitting circles to 2-D data sets (point clouds) is an important algorithm in the arsenal of reverse engineering\n",
"tools which seek to reconstruct analytic curves from measurement data.\n",
"\n",
"Circle fitting is also useful in the reconstruction of 3-D surfaces which can be defined by [planar curves](https://en.wikipedia.org/wiki/Plane_curve).\n",
"\n",
"An obvious approach to circle fitting is to use a non-linear total least squares method which may be\n",
"solved by an iterative method such as\n",
"[gradient descent](https://en.wikipedia.org/wiki/Gradient_descent#:~:text=Gradient%20descent%20is%20a%20first,the%20direction%20of%20steepest%20descent).\n",
"\n",
"However, as demonstrated by J.D. Coope in the publication [CIRCLE FITTING BY LINEAR AND\n",
"NONLINEAR LEAST SQUARES](https://ir.canterbury.ac.nz/bitstream/handle/10092/11104/coope_report_no69_1992.pdf?sequence=1&isAllowed=y),\n",
"iterative methods are inefficient and sensitive to the presence of outliers.\n",
"In this notebook we will be developing a **linear** least squares algorithm which can fit circles without requiring to iterate."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Goals\n",
"The main goals of this notebook are:\n",
"* find an analytical, non-iterative solution to circle fitting by symbolic manipulation\n",
" of the _least squares_ equations.\n",
"* use `sympy` to perform the algebraic manipulations in an error-safe and transparent way.\n",
"* use `matplotlib` to generate illustrations dynamically rather that including static images.\n",
" This is a labor-intensive approach but should keep illustrations\n",
" in sync with code and, as a side-effect, also provides numerous examples of the application\n",
" of `matplotlib`.\n",
"* write the Python code in a way that it can be extracted from the notebook and used elsewhere."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Setting Up the Python Environment\n",
"\n",
"This is necessitated by the fact that the we use Python code to develop the fitting algorithm. "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import sympy as sp\n",
"from sympy import IndexedBase,Function\n",
"from sympy import Sum, sqrt, cos, sin, tan, diff\n",
"from sympy import simplify,lambdify,expand,factor,collect,factor_terms\n",
"from sympy import Symbol,symbols,ImmutableMatrix\n",
"from sympy.abc import *"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from typing import Iterable, Tuple, Union, List, Generator\n",
"import random\n",
"import math\n",
"from functools import reduce, cached_property"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib import gridspec\n",
"\n",
"from matplotlib.text import Annotation\n",
"from matplotlib.patches import Circle, Arc"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"import IPython.display as IPd\n",
"def display_boxed(expression):\n",
" '''Display an expression with a box arround it.'''\n",
" IPd.display(IPd.Math(r'\\boxed{' + sp.latex(expression) + r'}'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 2-Dimensional Vector Algebra\n",
"\n",
"The classes below subclass\n",
"[ImmutableMatrix](https://docs.sympy.org/latest/modules/matrices/immutablematrices.html)\n",
"to:\n",
"* obtain representations of 2-D vectors and 2-D points to support Python type hints from the [typing package](https://docs.python.org/3/library/typing.html)\n",
"* provide vector algebra functionality in numeric and **symbolic** form.\n",
"\n",
"**Note**: The class hierarchy was chosen with convenience in mind.\n",
"From the software architecture point of view, it is a hack."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Class Vector2D\n",
"A vector in a 2-dimensional Cartesian coordinate system. Instances of this class\n",
"support numerical and symbolic vector algebra."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"class Vector2D(ImmutableMatrix):\n",
" '''A 2-D vector.'''\n",
" def __new__(cls,x : float, y : float):\n",
" return super().__new__(cls,[x,y])\n",
"\n",
" def __repr__(self) -> str:\n",
" return \"Vector2D(%r,%r)\" % (self.x, self.y)\n",
"\n",
" @property\n",
" def x(self) -> float:\n",
" '''Get the x-coordinate.'''\n",
" return self[0]\n",
"\n",
" @property\n",
" def y(self) -> float:\n",
" '''Get the y-coordinate.'''\n",
" return self[1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## A Point in 2-D Space\n",
"\n",
"A point (location) in a 2-dimensional Cartesian coordinate system. **Note**: Deriving a point from a vector\n",
"is a hack made for convenience only."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"class Point2D(Vector2D):\n",
" '''A point on a 2-D plane.'''\n",
" def __new__(cls,x : float, y : float):\n",
" return super().__new__(cls,x,y)\n",
"\n",
" def __repr__(self) -> str:\n",
" return \"Point2D(%r,%r)\" % (self.x, self.y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## PointCloud2D\n",
"\n",
"This class models 2d data sets. It also provides a _center-of-gravity_ ($\\vec{p}_{cog}$) transformation\n",
"of its points:\n",
"\n",
"$$\n",
"\\vec{p}_{i} \\mapsto \\vec{p}_{i} - \\underbrace{\\vec{p}_{cog}}_{\\frac{1}{n} \\sum_{i=0}^{n-1}{\\vec{p}_i}}\n",
"$$\n",
"\n",
"This comes in very handy for the simplification of the fitting equations because of the following\n",
"properties:\n",
"$$\n",
"\\left.\n",
" \\begin{aligned} \n",
" \\vec{p}_{cog} &= \\frac{1}{n} \\sum_{i=0}^{n-1}{\\vec{p}_i}\n",
" \\text{ ; center-of-gravity}\\\\\n",
" \\vec{p}_{i} &\\mapsto \\underbrace{\\vec{p}_{i} - \\vec{p}_{cog}}_{\\vec{p}_{i,cog}}\n",
" \\text{ ; transformation}\n",
" \\end{aligned}\n",
"\\right\\} \\Rightarrow\n",
"\\begin{aligned} \n",
" \\sum_{i=0}^{n-1}{\\vec{p}_{i,cog}} &= \\sum_{i=0}^{n-1}{(\\vec{p}_{i} - \\vec{p}_{cog})}\n",
" = \\sum_{i=0}^{n-1}{\\vec{p}_{i}} - n \\vec{p}_{cog} \\\\\n",
" &= \\sum_{i=0}^{n-1}{\\vec{p}_{i}} - \\sum_{i=0}^{n-1}{\\vec{p}_i}\n",
" = \\vec{0}\n",
"\\end{aligned} \n",
"$$\n",
"\n",
"which can be summarized as:\n",
"\n",
"$$\n",
" \\boxed{\\sum_{i=0}^{n-1}{\\vec{p}_{i,cog}} = 0}\n",
"$$\n",
"\n",
"with $\\vec{p}_{i,cog}$ being the i-th point of the point cloud in the _center-of-gravity_ coordinate system."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"class PointCloud2D :\n",
" '''Create a new point cloud from a collection of 2-D points'''\n",
" def __init__(self,points : Iterable[Point2D]):\n",
" self._points = list(points)\n",
"\n",
" @cached_property\n",
" def center_of_gravity(self) ->Point2D:\n",
" '''The center of gravity of this point cloud.'''\n",
" return reduce(lambda a,b: a+b,self.points)/self.count\n",
"\n",
" @property\n",
" def count(self):\n",
" '''Get the number of points in this cloud.'''\n",
" return len(self.points)\n",
" @property\n",
" def points_cog(self) -> Iterable[Point2D]:\n",
" '''Get the point cloud in the center-of-gravity coordinate system.'''\n",
" cog = self.center_of_gravity\n",
" return [p-cog for p in self._points]\n",
"\n",
" @property\n",
" def points(self) -> List[Point2D]:\n",
" '''Get the collection of points in the point cloud in _world_ coordinates.'''\n",
" return self._points\n",
"\n",
" def to_global(self,pt2 : Point2D) -> Point2D:\n",
" '''Map a point from the center-of-gravity system to _world_ coordinates'''\n",
" return pt2+self.center_of_gravity\n",
"\n",
" def draw(self,ax):\n",
" '''Draw the point cloud.'''\n",
" ax.scatter([p.x for p in self._points],[p.y for p in self._points],\n",
" linewidths=0.01,\n",
" color='red',\n",
" label='Point Cloud')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Defining a Parametric 2-D Circle\n",
"\n",
"An important tool for developing the circle fitting equations is the parametric\n",
"circle definition:\n",
"$$\n",
" C(\\vec{c},r) = \\left\\{\n",
" \\left( \\vec{c} + r \\begin{bmatrix}cos(\\beta)\\\\sin_(\\beta)\\end{bmatrix} \\right) \\in \\mathbb{R}^2,\n",
" \\vec{c} \\in \\mathbb{R}^2, r \\in \\mathbb{R}^+\n",
" \\ \\bigg|\\ \n",
" 0 \\leq \\beta \\leq 2\\pi\n",
" \\right\\}\n",
"$$\n",
"where $C(\\vec{c},r)$ is the set of all points on the circle with center $\\vec{c}$ and radius $r$."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def draw_circle(ax,center : Point2D,r : float, color='blue',label=\"circle\"):\n",
" '''Draw a parametric circle with basic annotations.'''\n",
" x = float(center.x)\n",
" y = float(center.y)\n",
" ax.set_aspect('equal')\n",
"\n",
" xlim = ax.get_xlim()\n",
" ylim = ax.get_ylim()\n",
"\n",
" xmin,xmax = min(xlim[0]-0.1,x-r-0.1),max(xlim[1],0.1,x+r+0.1)\n",
" ymin,ymax = min(ylim[0],-0.1,y-r-0.1),max(ylim[1],0.1,y+r+0.1)\n",
" ax.set_xlim(float(xmin),float(xmax))\n",
" ax.set_ylim(float(ymin),float(ymax))\n",
" ax.set_xticks(np.linspace(int(xmin),int(xmax),5))\n",
" ax.set_yticks(np.linspace(int(ymin),int(ymax),5))\n",
" ax.set_xlabel('x')\n",
" ax.set_ylabel('y')\n",
" ax.grid()\n",
" ax.add_patch(Circle((x,y), r, color=color, fill=False,label=label))\n",
" ax.annotate(r'$\\vec{c}$',(x,y),\n",
" xytext = (5,-10),\n",
" textcoords='offset points')\n",
" # center\n",
" ax.scatter([x],[y], color=\"black\")\n",
" # circle local coordinate system\n",
" ax.axline((x,y),(x-1,y),linestyle='dotted', color='g')\n",
" ax.axline((x,y),(x,y+1),linestyle='dotted', color='g')\n",
"def fig1():\n",
" '''Fig 1. A parametric circle'''\n",
" fig,ax = plt.subplots()\n",
" ax.set_title('Fig 1. Parametric Circle')\n",
" x=1\n",
" y=1\n",
" r=1\n",
" draw_circle(ax,Point2D(x,y),r)\n",
" ax.arrow(1,1,r/np.sqrt(2),r/np.sqrt(2),length_includes_head=True, head_width=.1)\n",
" ax.annotate('r',(x+r/2,y+r/2),xytext = (5,-10),\n",
" textcoords='offset points')\n",
" ax.add_patch(Arc((x,y), width=r, height=r,angle=0, theta1=0,theta2=45))\n",
" ax.annotate(r'$\\beta$',(x,y),xytext = (30,10),\n",
" textcoords='offset points')\n",
" ax.annotate(r'''$\\vec{c}$: circle enter\n",
"$\\beta$: parameter angle\n",
"$r$: radius''',\n",
" xy=(.05,.1), xycoords='axes fraction',\n",
" size=12,\n",
" bbox=dict(boxstyle=\"round\", fc='lightgray', ec=\"none\"))\n",
"fig1()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With this definition we can create a class `ParametricCircle2D` with which we:\n",
"* generate every possible circle from the set of 2-D circles by specifying \n",
" its center $\\vec{c}$ and radius $r$.\n",
"* generate approximating point clouds (for testing the algorithm). See method `approximate`\n",
" and Fig 2. below.\n",
"* define the least squares equations using the `error` function of the circle which is defined\n",
" as:\n",
" $$\n",
" err(\\vec{p}) = (\\vec{p} - \\vec{c}) \\cdot (\\vec{p} - \\vec{c}) - r^2\n",
" $$\n",
" Note that we are **not** using the geometric distance \n",
" $d(\\vec{p}) = \\left\\lVert \\vec{p} - \\vec{c} \\right\\rVert - r = \\sqrt{(\\vec{p} - \\vec{c}) \\cdot (\\vec{p} - \\vec{c})} -r)$\n",
" for the error function to avoid having to deal with square roots in the energy equation.\n",
" We can do that because $err(\\vec{p})$, like the geometric distance, is 0 for points\n",
" on the circle perimeter.\n",
" \n",
"To assess the fitting quality of a circle with respect to a point cloud the `ParametricCircle2D` class\n",
"implements the methods:\n",
"\n",
"`standard_deviation`\n",
": to compute the standard deviation of distances of points from a point cloud\n",
" with respect to a circle:\n",
" $$\n",
" \\sqrt{\\frac{\\sum_{i=0}^{n-1}{d_i(\\vec{p}_i)^2}}{n-1}}\n",
" $$\n",
" where $d_i(\\vec{p}_i)$ is the geometric distance of the i-th point $\\vec{p}_i$ from the point cloud.\n",
"\n",
"`max_deviation`\n",
": to compute the maximum geometric distance of a point cloud to the circle."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"class ParametricCircle2D:\n",
" '''A paremetric circle descibed by center point and radius.'''\n",
" def __init__(self,center : Point2D, radius : float) :\n",
" self._radius = radius\n",
" self._center = center\n",
"\n",
" def __repr__(self) -> str:\n",
" return f'ParametricCircle2D({self._center!r},{self._radius!r})'\n",
" @property\n",
" def radius(self) -> float:\n",
" '''Get the circle radiud `r`.'''\n",
" return self._radius\n",
" @property\n",
" def center(self) -> Point2D:\n",
" '''Get the circle center point.'''\n",
" return self._center\n",
"\n",
" def distance(self,p2 : Point2D)-> float:\n",
" '''Compute the signed geometric (shortest) distance of an object space point\n",
" to the circle.'''\n",
" return (self._center-p2).norm() - self._radius\n",
"\n",
" def to_object_space(self, param : float) -> Point2D:\n",
" '''Map a point from the circle's parameter space to an object\n",
" space point on the perimeter.'''\n",
" return self._center + self._radius * Point2D(cos(param),sin(param))\n",
"\n",
" def approximate(self,pspace,err) -> Generator[Point2D,None,None]:\n",
" '''Generate points which approximate the circle with a random error\n",
" which lies within the interval'''\n",
" for p in pspace :\n",
" pt = self.to_object_space(p)\n",
" # add perturbation\n",
" yield pt + Vector2D(cos(p),sin(p))*random.uniform(-err,err)\n",
"\n",
" def g(self, pt2 : Point2D) -> float:\n",
" '''Square distance of an object space point to the circle center.'''\n",
" return (self._center-pt2).dot(self._center-pt2)\n",
"\n",
" def error(self, pt2 : Point2D) -> float:\n",
" '''Signed error of an object space point with respect to the circle.'''\n",
" return self.g(pt2) - self._radius**2\n",
"\n",
" def standard_deviation(self, cloud : PointCloud2D) -> float:\n",
" '''The standard deviation of the distances of the points in\n",
" the given cloud with respecct to the circle.'''\n",
" return sqrt(sum([self.distance(pt2)**2 for pt2 in cloud.points])/(len(cloud.points)-1))\n",
"\n",
" def max_deviation(self, cloud : PointCloud2D) -> float:\n",
" '''The maximum distance of the points in the point clout with respect to the circle.'''\n",
" return max([abs(self.distance(pt2)) for pt2 in cloud.points])\n",
"\n",
" def draw(self,ax,color='blue', label='Parametric Circle'):\n",
" '''Draw the circle with basic annotations.'''\n",
" draw_circle(ax,self.center,self._radius,color=color, label=label)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"def fig2(circle,cloud):\n",
" '''Fig 2. A parametric circle with an approximating point cloud'''\n",
" fig,ax = plt.subplots()\n",
" ax.set_aspect('equal')\n",
" plt.axhline(0, color='gray')\n",
" plt.axvline(0, color='gray')\n",
" ax.set_title('Fig 2. Parametric Circle with Approximating Point Cloud' % circle.center)\n",
" circle.draw(ax)\n",
" cloud.draw(ax)\n",
" ax.legend()\n",
"# sample cylinder with approximating point cloud\n",
"c = ParametricCircle2D(Point2D(1,1),1) # a sample circle\n",
"cloud = PointCloud2D(c.approximate(np.linspace(0,np.pi,10),0.1))\n",
"fig2(c,cloud)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# The Energy of A Point Cloud\n",
"\n",
"We now have all the tools to formulate a function whose value is related to the fitting quality of a circle\n",
"with respect to a point clound. Such a function is typically based on some kind of an _average_ distance of points\n",
"to the circle and is often called _Energy Function_ $E$. The most significant property of an _Energy Function_\n",
"is that lower values of $E$ indicate _better_ fitting quality. Hence we have now an optimization problem where\n",
"the circle parameters minimizing $E$ represent the circle which best fits the point cloud.\n",
"\n",
"To get started with that we first create a symbolic circle."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"c_x,c_y = symbols('c_x c_y')\n",
"C_sym = ParametricCircle2D(Point2D(c_x,c_y),r)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using the circle's error function we can define the energy of a point cloud as a function of the circle parameters:\n",
"\n",
"$$\n",
"\\vec{c} = \\begin{bmatrix}c_x \\\\ c_y \\end{bmatrix}; r\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\boxed{E{\\left(c_{x},c_{y},r \\right)} = \\frac{\\sum_{i=0}^{n - 1} \\left(- r^{2} + \\left(c_{x} - {p_{x}}_{i}\\right)^{2} + \\left(c_{y} - {p_{y}}_{i}\\right)^{2}\\right)^{2}}{n}}$"
],
"text/plain": [
"<IPython.core.display.Math object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"px = IndexedBase('p_x')\n",
"py = IndexedBase('p_y')\n",
"\n",
"E = Sum(C_sym.error(Point2D(px[i],py[i]))**2,(i,0,n-1))/n\n",
"display_boxed(sp.Eq(Function('E')(c_x,c_y,r),E))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where $\\vec{p}_i = \\begin{bmatrix}p_{xi} \\\\ p_{yi}\\end{bmatrix}$ is the i-th point of a point cloud.\n",
"\n",
"For a given point cloud the circle with minimal Energy $E$ is an optimal fit. Hence we need to\n",
"find the minimum of the energy function $E$. From\n",
"[optimization theory](https://math.libretexts.org/Courses/Monroe_Community_College/MTH_212_Calculus_III/Chapter_13%3A_Functions_of_Multiple_Variables_and_Partial_Derivatives/13.8%3A_Optimization_of_Functions_of_Several_Variables) we know, that, at the minimum, all partial derivatives of the energy function are 0:\n",
"$$\n",
"\\boxed{\n",
"\\frac{\\partial E(c_x,c_y,r)}{\\partial x} = \\frac{\\partial E(c_x,c_y,r)}{\\partial y} = \\frac{\\partial E(c_x,c_y,r)}{\\partial r} = 0\n",
"}\n",
"$$\n",
"\n",
"We use this relationship to come up with a system of initially non-linear equations which we will\n",
"then transform into a system of linear equations. Solving the linear equation set will give us\n",
"the parameters of the fittng circle.\n",
"\n",
"At first we look at:\n",
"$$\n",
"\\frac{\\partial E(c_x,c_y,r)}{\\partial r} = 0\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\boxed{\\frac{\\partial}{\\partial r} E{\\left(c_{x},c_{y},r \\right)} = - \\frac{4 r \\sum_{i=0}^{n - 1} \\left(- r^{2} + \\left(c_{x} - {p_{x}}_{i}\\right)^{2} + \\left(c_{y} - {p_{y}}_{i}\\right)^{2}\\right)}{n}}$"
],
"text/plain": [
"<IPython.core.display.Math object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"dEdr = factor_terms(E.diff(r)).doit()\n",
"display_boxed(sp.Eq(diff(Function('E')(c_x,c_y,r),r), dEdr))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ignoring the trivial solution $r=0$ we can write:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\sum_{i=0}^{n - 1} \\left(- r^{2} + \\left(c_{x} - {p_{x}}_{i}\\right)^{2} + \\left(c_{y} - {p_{y}}_{i}\\right)^{2}\\right) = 0$"
],
"text/plain": [
"Eq(Sum(-r**2 + (c_x - p_x[i])**2 + (c_y - p_y[i])**2, (i, 0, n - 1)), 0)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dEdr1=dEdr.args[3]\n",
"sp.Eq(dEdr1,0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This simplifies to"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle - n r^{2} + \\sum_{i=0}^{n - 1} \\left(\\left(c_{x} - {p_{x}}_{i}\\right)^{2} + \\left(c_{y} - {p_{y}}_{i}\\right)^{2}\\right) = 0$"
],
"text/plain": [
"Eq(-n*r**2 + Sum((c_x - p_x[i])**2 + (c_y - p_y[i])**2, (i, 0, n - 1)), 0)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dEdr2 = factor_terms(dEdr1).doit()\n",
"sp.Eq(dEdr2,0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"which we can now solve for $r2$"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle r^{2} = \\frac{\\sum_{i=0}^{n - 1} \\left(\\left(c_{x} - {p_{x}}_{i}\\right)^{2} + \\left(c_{y} - {p_{y}}_{i}\\right)^{2}\\right)}{n}$"
],
"text/plain": [
"Eq(r**2, Sum((c_x - p_x[i])**2 + (c_y - p_y[i])**2, (i, 0, n - 1))/n)"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r2 = sp.solve(sp.Eq(dEdr2,0),[r**2])[0]\n",
"sp.Eq(r**2,r2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now start assuming that the point cloud has been transformed to the _center-of-gravity_\n",
"coordinate system so that we can use\n",
"$$\n",
"\\sum_{i=0}^{n-1}{\\vec{p}_i} = 0\n",
"$$\n",
"for simplification. Particularly to get rid of non-linear terms.\n",
"With this we can further simplify the equation for $r^2$ to:"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\boxed{r^{2} = c_{x}^{2} + c_{y}^{2} + \\frac{\\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2} + \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{2}}{n}}$"
],
"text/plain": [
"<IPython.core.display.Math object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"r2 = factor_terms(expand(r2)).doit()\n",
"r2 = r2.xreplace({Sum(px[i],(i,0,n-1)):0,\n",
" Sum(py[i],(i,0,n-1)):0}).ratsimp()\n",
"display_boxed(sp.Eq(r**2,r2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We continue with the remaining partial derivatives of the energy function $E(c_x,c_y,r)$:\n",
"$$\n",
"\\frac{\\partial E(c_x,c_y,r)}{\\partial c_x} = \\frac{\\partial E(c_x,c_y,r)}{\\partial c_y} = 0\n",
"$$\n",
"we again use $\\sum_{i=0}^{n-1}{\\vec{p}_i} = 0$ to simplify the equations and also substitute the\n",
"previous result for $r^2$."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\frac{\\partial}{\\partial c_{x}} E{\\left(c_{x},c_{y} \\right)} = \\frac{8 c_{x} \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2} + 8 c_{y} \\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i} - 4 \\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}^{2} - 4 \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{3}}{n}$"
],
"text/plain": [
"Eq(Derivative(E(c_x, c_y), c_x), (8*c_x*Sum(p_x[i]**2, (i, 0, n - 1)) + 8*c_y*Sum(p_x[i]*p_y[i], (i, 0, n - 1)) - 4*Sum(p_x[i]*p_y[i]**2, (i, 0, n - 1)) - 4*Sum(p_x[i]**3, (i, 0, n - 1)))/n)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dEdcx= E.diff(c_x)\n",
"dEdcx=factor_terms(expand(dEdcx)).doit().xreplace({Sum(px[i],(i,0,n-1)):0,\n",
" Sum(py[i],(i,0,n-1)):0,\n",
" r**2:r2}).expand().ratsimp()\n",
"sp.Eq(diff(Function('E')(c_x,c_y),c_x),dEdcx)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\frac{\\partial}{\\partial c_{y}} E{\\left(c_{x},c_{y} \\right)} = \\frac{8 c_{x} \\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i} + 8 c_{y} \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{2} - 4 \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2} {p_{y}}_{i} - 4 \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{3}}{n}$"
],
"text/plain": [
"Eq(Derivative(E(c_x, c_y), c_y), (8*c_x*Sum(p_x[i]*p_y[i], (i, 0, n - 1)) + 8*c_y*Sum(p_y[i]**2, (i, 0, n - 1)) - 4*Sum(p_x[i]**2*p_y[i], (i, 0, n - 1)) - 4*Sum(p_y[i]**3, (i, 0, n - 1)))/n)"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dEdcy= E.diff(c_y)\n",
"dEdcy=factor_terms(expand(dEdcy)).doit().xreplace({Sum(px[i],(i,0,n-1)):0,\n",
" Sum(py[i],(i,0,n-1)):0,\n",
" r**2:r2}).expand().ratsimp()\n",
"sp.Eq(diff(Function('E')(c_x,c_y),c_y),dEdcy)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Inspecting the partial derivatives reveals that we now have a system of two equations\n",
"which are linear in $c_x,c_y$.\n",
"\n",
"$$\n",
"2 \\begin{bmatrix}\\sum_{i=0}^{n-1}{p_{xi}^2} & \\sum_{i=0}^{n-1}{p_{xi}p_{yi}} \\\\\n",
" \\sum_{i=0}^{n-1}{p_{xi}p_{yi}} & \\sum_{i=0}^{n-1}{p_{yi}^2} \\end{bmatrix}\n",
"\\cdot\n",
"\\begin{bmatrix}c_x \\\\ c_y \\end{bmatrix} =\n",
"\\begin{bmatrix} \\sum_{i=0}^{n-1}{p_{xi}^3} + \\sum_{i=0}^{n-1}{p_{xi}p_{yi}^2} \\\\\n",
" \\sum_{i=0}^{n-1}{p_{yi}^3} + \\sum_{i=0}^{n-1}{p_{xi}^2p_{yi}}\\end{bmatrix}\n",
"$$\n",
"\n",
"This system we can solve to obtain the coordinates of the circle center $c_x,c_y$like so:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle c_{x} = \\frac{- \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}\\right) \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2} {p_{y}}_{i} - \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}\\right) \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{3} + \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}^{2}\\right) \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{2} + \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i}^{3}\\right) \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{2}}{2 \\left(- \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}\\right)^{2} + \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2}\\right) \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{2}\\right)}$"
],
"text/plain": [
"Eq(c_x, (-Sum(p_x[i]*p_y[i], (i, 0, n - 1))*Sum(p_x[i]**2*p_y[i], (i, 0, n - 1)) - Sum(p_x[i]*p_y[i], (i, 0, n - 1))*Sum(p_y[i]**3, (i, 0, n - 1)) + Sum(p_x[i]*p_y[i]**2, (i, 0, n - 1))*Sum(p_y[i]**2, (i, 0, n - 1)) + Sum(p_x[i]**3, (i, 0, n - 1))*Sum(p_y[i]**2, (i, 0, n - 1)))/(2*(-Sum(p_x[i]*p_y[i], (i, 0, n - 1))**2 + Sum(p_x[i]**2, (i, 0, n - 1))*Sum(p_y[i]**2, (i, 0, n - 1)))))"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cx,cy=sp.linsolve([dEdcx,dEdcy],[c_x,c_y]).args[0]\n",
"cx = factor_terms(expand(cx)).doit()\n",
"cy = factor_terms(expand(cy)).doit()\n",
"\n",
"sp.Eq(c_x,cx)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and also"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle c_{y} = \\frac{- \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}\\right) \\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}^{2} - \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}\\right) \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{3} + \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2} {p_{y}}_{i}\\right) \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2} + \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2}\\right) \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{3}}{2 \\left(- \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}\\right)^{2} + \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2}\\right) \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{2}\\right)}$"
],
"text/plain": [
"Eq(c_y, (-Sum(p_x[i]*p_y[i], (i, 0, n - 1))*Sum(p_x[i]*p_y[i]**2, (i, 0, n - 1)) - Sum(p_x[i]*p_y[i], (i, 0, n - 1))*Sum(p_x[i]**3, (i, 0, n - 1)) + Sum(p_x[i]**2*p_y[i], (i, 0, n - 1))*Sum(p_x[i]**2, (i, 0, n - 1)) + Sum(p_x[i]**2, (i, 0, n - 1))*Sum(p_y[i]**3, (i, 0, n - 1)))/(2*(-Sum(p_x[i]*p_y[i], (i, 0, n - 1))**2 + Sum(p_x[i]**2, (i, 0, n - 1))*Sum(p_y[i]**2, (i, 0, n - 1)))))"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sp.Eq(c_y,cy)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"These quations can be further simplified by pulling the fraction apart and working on numerator and\n",
"denominator separately.\n",
"\n",
"First we simplify the result for $c_x$:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\boxed{c_{x} = \\frac{\\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}^{2} + \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{3}\\right) \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{2} + \\left(- \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2} {p_{y}}_{i} - \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{3}\\right) \\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}}{2 \\left(- \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}\\right)^{2} + \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2}\\right) \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{2}\\right)}}$"
],
"text/plain": [
"<IPython.core.display.Math object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"numerator,denominator = sp.fraction(cx) # pull apart numerator and denominator\n",
"# collect sums\n",
"numerator = numerator.collect(Sum(px[i]*py[i],(i,0,n-1))).collect(Sum(py[i]**2,(i,0,n-1)))\n",
"denominator = sp.factor(denominator)\n",
"cx1 = numerator/denominator # reassemble the fraction\n",
"display_boxed(sp.Eq(c_x,cx1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"... second we simplify the result for $c_y$ in the same way:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\boxed{c_{y} = \\frac{- \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}^{2} + \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{3}\\right) \\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i} + \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2} {p_{y}}_{i} + \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{3}\\right) \\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2}}{2 \\left(- \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i} {p_{y}}_{i}\\right)^{2} + \\left(\\sum_{i=0}^{n - 1} {p_{x}}_{i}^{2}\\right) \\sum_{i=0}^{n - 1} {p_{y}}_{i}^{2}\\right)}}$"
],
"text/plain": [
"<IPython.core.display.Math object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"numerator,denominator = sp.fraction(cy) # pull apart numerator and denominator\n",
"# collect sums\n",
"numerator = numerator.collect(-Sum(px[i]*py[i],(i,0,n-1))).collect(Sum(px[i]**2,(i,0,n-1)))\n",
"denominator = sp.factor(denominator)\n",
"cy1 = numerator/denominator # reassemble the fraction\n",
"display_boxed(sp.Eq(c_y,cy1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Circle Fitting\n",
"\n",
"To materialize the fitting algorithm we implement a class using the results from the previous sections.\n",
"\n",
"Note that we implement **two** versions of the circle fitting algorithm. The first implementation\n",
"`CircleFitterRef` is based on direct translation of the symbolic formulas by\n",
"[lambdify](https://docs.sympy.org/latest/modules/utilities/lambdify.html).\n",
"This implementation is not _portable_ and will be used for testing the second, re-usable\n",
"implementation `CircleFitter`."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"class CircleFitterRef:\n",
" '''Non-portable reference implementation based on lambdify.'''\n",
" _cx = lambdify([px,py,n],cx)\n",
" _cy = lambdify([px,py,n],cy)\n",
" _r2 = lambdify([c_x,c_y,px,py,n],r2)\n",
"\n",
" def __init__(self,cloud : PointCloud2D):\n",
" self._cloud = cloud\n",
"\n",
" @property\n",
" def cloud(self):\n",
" '''The point cloud used for circle fitting.'''\n",
" return self._cloud\n",
"\n",
" @property\n",
" def fitted_circle(self):\n",
" '''Compute a circle which best fits the point cloud.'''\n",
" cloud = self._cloud\n",
" xs = list(p.x for p in cloud.points_cog)\n",
" ys = list(p.y for p in cloud.points_cog)\n",
" n = len(xs)\n",
" center_cog = Point2D(CircleFitterRef._cx(xs,ys,n),\n",
" CircleFitterRef._cy(xs,ys,n))\n",
" r2 = CircleFitterRef._r2(center_cog.x,center_cog.y,xs,ys,n)\n",
" center = cloud.to_global(center_cog)\n",
" return ParametricCircle2D(Point2D(float(center.x),float(center.y)), float(sqrt(r2)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exploring the Fitting Behavior\n",
"\n",
"In this section we explore the fitting behavior of the algorithm. At first we define drawing utilities which\n",
"plot a side-by-side comparison of fitted circles created with different fitting precisions. Second we create a series of drawings showing the effect of the coverage of approximating points on the fitting quality.\n",
"\n",
"Terminology used in the figures below:\n",
"\n",
"**Original Circle**\n",
": A circle used for generating approximating point clouds with varying precisions.\n",
"\n",
"**Fitted Circle**\n",
": A _reverse engineered_ circle which is fitted to a point cloud.\n",
"\n",
"**Point Cloud**\n",
": A number of 2-dimensional points approximating a circle with a given precision."
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"def draw_fitting_circle(ax,circle,cloud,color,title):\n",
" '''Draw an original circle, its approximating point cloud and the corresponding fitted\n",
" circle.'''\n",
" fitter = CircleFitterRef(cloud)\n",
" ax.set_xlabel('x')\n",
" ax.set_ylabel('y')\n",
" circle.draw(ax,label='Original Circle')\n",
" cloud.draw(ax)\n",
" fitted = fitter.fitted_circle\n",
" fitted.draw(ax,color='brown', label='Fitted Circle')\n",
"\n",
" ax.grid()\n",
" ax.legend()\n",
" title += '\\n Max Fitting Error %f' % fitted.max_deviation(cloud)\n",
" ax.set_title(title)\n",
" return fitted\n",
"\n",
"def figN(circle,end_angle,title):\n",
" '''Generate figures with 2 subplots comparing fitting results for\n",
" point clouds with different precisions.'''\n",
" fig,axs= plt.subplots(1,2, sharex=True, sharey=True)\n",
" ax1,ax2= axs\n",
"\n",
" low_precision_cloud = PointCloud2D(c.approximate(np.linspace(0,end_angle,10),err=0.1))\n",
" draw_fitting_circle(ax1,c,low_precision_cloud,color='blue', title ='Cloud Precision=0.1')\n",
"\n",
" high_precision_cloud = PointCloud2D(c.approximate(np.linspace(0,end_angle,10),err=0.01))\n",
" draw_fitting_circle(ax2,c,high_precision_cloud,color='blue', title ='Cloud Precision=0.01')\n",
"\n",
" fig.suptitle(title)\n",
" fig.tight_layout()\n",
" fig.set_figheight(5)\n",
" fig.set_figwidth(10)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"figN(ParametricCircle2D(Point2D(1,2),3), 0.4, 'Fig 3. Impact of Data Accuracy on Highly Confined Point Clouds')"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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XJrBzQc75Ly6611jCzld8Z07K61s3dr2c9To2pXWTz7Jxmef5e5Fi/AuW9b+hpZgLOmlozSitHJi+XLO/f03/RYvxsPU3O/KXe856BZQNyOnK37CBLh82WhrSh8Xki5wOV3f+IK4kHSBC0kX7HrOnK73r77SXe8a6zHvis/MLNo5mj30EFXbt2frlCnI7Gy72lfSsaSXjtCI0krM7t2Ef/ghPebNy00dltP1/uabxtpWGNoBdUN0V7xxjFo2ilkHZxlthkszatkoRi0bZbfz6a53TXEoble8EIIur71GWnw8++bNs6ttJR1LemlvjSitXDt/ns3PP0/X2bMJaNQIcI+u9xx0F7yborvijWFK9ynsK8pcf6WIKd2n2PV8uutdUxxyuuK7dCl6V7ynjw93fvQR60eOpGKzZtTv39/+hpZALOmlvTWiNJKZksKm556j+SOPULvH9VRXzz6rUpG5ctd7DtoBdVPMR8V37QrVqhltUemgf5P++Eb7Gm2GS9O/if1+nHfv1qPeNcWnfn146y149FH45x8oU8b2c/hWqULPTz/lf088Qfn69ancsqX9DS1hWNJLe2pEaURKybbXXyegcWNajh2bu/6nn1x71HtedBe8G9OjBzz2GAwfDunpRltTOohKiOJS6iWjzXBpohKiiEoo/qjhixfhvvtg/nzd9a4pPuPHQ4MG8NRTasrOolCpZUtuef11Nj3zDNfOnbOrfSURS3ppL40oreyfN4+kqChufeMNhKlmvnev6nr/8UfX73rPQTugbs7MmWo2mGeeKbqoaqzn4RUP8/bht402w6V5eMXDPLzi4WKdIy1NVayCg1W8s0ZTXISA77+HPXvg44+Lfp56/frRIjiYvx57jOSLF+1nYAnEkl7aQyNKKwe+/pozf/xBz88+w8tXtS7HxMC998K8edCpk7H22YLugndzPDzghx/g9ttVS9HTTxttUclmWo9p7N2712gzXJppPaYV63gp1XtcrRrMmGEnozQaVOjSqlUqbKlVK7j77qKdp8XDD5Odlsb/Hn+cPiEhubPOaG7Ekl4WVyNKK4cXLODE8uX0/f773HcuPV1V0h96CEaONNhAG9EOaAmgfHklqrffDi1bQu/eRltUcunbqC9eZ/TXpiD6NupbrOPnzYN//4UtW1QFS6OxJ/Xrq1i5Bx6AzZuhadOinafVuHFkpafz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\n",
"text/plain": [
"<Figure size 720x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"figN(ParametricCircle2D(Point2D(1,2),3), .9, 'Fig 4.Impact of Data Accuracy on Medium Confined Point Clouds')"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"figN(ParametricCircle2D(Point2D(1,2),3), 2*np.pi, 'Fig 5. Impact of Data Accuracy on Sparse Point Clouds')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Interpretation\n",
"\n",
"* If approximation precision of the point cloud is low, the fitted circle is close to the original circle\n",
" only if the 2-d data points are _spread_ over the extent of the original circle.\n",
"* If the point cloud covers only a small portion of the original circle, high data precision is required\n",
" genereate fitted circles which are close to the original circle.\n",
"* In any case, even if the fitted circle does not resemble the original circle, fitting quality is optimal."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# A Portable Circle Fitter\n",
"\n",
"To support porting the algorithm to other languages we finally define an implentation of the fitting algorithm\n",
"which is optimized for that purpose."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"tags": [
"CodeExport"
]
},
"outputs": [],
"source": [
"class CircleFitter(PointCloud2D):\n",
" '''Portable implementation of the circle fitting algorithm'''\n",
" def __init__(self, cloud : PointCloud2D):\n",
" self._cloud = cloud\n",
"\n",
" @property\n",
" def cloud(self):\n",
" '''The point cloud used for circle fitting.'''\n",
" return self._cloud\n",
"\n",
" @property\n",
" def fitted_circle(self):\n",
" '''Compute a circle which best fits the point cloud.'''\n",
" # Setup the sums we need to generate\n",
" Spx3 = 0 # sum of p_x[i]**3\n",
" Spy3 = 0 # sum of p_y[i]**3\n",
" Spx2 = 0 # sum of p_x[i]**2\n",
" Spy2 = 0 # sum of p_y[i]**2\n",
" Spx2py = 0 # sum of p_x[i]**2 * p_y[i]\n",
" Spxpy2 = 0 # sum of p_x[i] * p_y[i]**2\n",
" Spxpy = 0 # sum of p_x[i] * p_y[i]\n",
" for p in self.cloud.points_cog:\n",
" px,py = p.x,p.y\n",
" px2,py2 = px*px,py*py\n",
" px3,py3 = px2*px,py2*py\n",
" pxpy = px*py\n",
" px2py,pxpy2 = pxpy*px,pxpy*py\n",
"\n",
" Spx3 += px3\n",
" Spy3 += py3\n",
" Spx2 += px2\n",
" Spy2 += py2\n",
" Spx2py += px2py\n",
" Spxpy2 += pxpy2\n",
" Spxpy += pxpy\n",
"\n",
" den = 2*(Spx2*Spy2 - Spxpy*Spxpy)\n",
"\n",
" c_x = ((Spxpy2+Spx3)*Spy2 - (Spx2py+Spy3)*Spxpy)/den\n",
" c_y = ((Spx2py+Spy3)*Spx2 - (Spxpy2+Spx3)*Spxpy)/den\n",
"\n",
" n = self.cloud.count\n",
" r2 = c_x*c_x + c_y*c_y + (Spx2 + Spy2)/n\n",
"\n",
" return ParametricCircle2D(self.cloud.to_global(Point2D(float(c_x),float(c_y))),\n",
" np.sqrt(float(r2)))"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"tags": [
"test"
]
},
"outputs": [],
"source": [
"# Test correctness of the portable fitter\n",
"circle = ParametricCircle2D(Point2D(1,2),3)\n",
"\n",
"for end_angle in np.linspace(0.1,2*np.pi/2,10):\n",
" cloud = PointCloud2D(circle.approximate(np.linspace(0,end_angle,10),err=0.01))\n",
"\n",
" fitter_ref = CircleFitterRef(cloud)\n",
" fitter_portable = CircleFitter(cloud)\n",
"\n",
" fitted_ref = fitter_ref.fitted_circle\n",
" fitted = fitter_portable.fitted_circle\n",
"\n",
" assert (fitted_ref.center - fitted.center).norm() < 1e-12, 'Circles not equal'\n",
" assert np.abs((fitted_ref.radius - fitted.radius)) < 1e-12, 'Circle radii not equal'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Appendix"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## About this JupyterLab Notebook\n",
"\n",
"This Gist was created using the [Jupyter Lab](https://jupyter.org/) computational notebook with\n",
"the python3 kernel and following additional Python modules:\n"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"from jnbBuffs.manifest import notebook_manifest"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/markdown": [
"| Component | Version | Description |\n",
"| --------------------------------- | -------------------------- | -------------------- |\n",
"| [Python](https://www.python.org/) | 3.8.6 | Programming Language |\n",
"| [jnbBuffs](https://github.com/WetHat/jupyter-notebooks) | 0.1.4 | Utilities for authoring JupyterLab Python notebooks. |\n",
"| [jupyterlab](http://jupyter.org) | 3.0.12 | The JupyterLab server extension. |\n",
"| [matplotlib](https://matplotlib.org) | 3.4.1 | Python plotting package |\n",
"| [numpy](https://www.numpy.org) | 1.20.2 | NumPy is the fundamental package for array computing with Python. |\n",
"| [sympy](https://sympy.org) | 1.7.1 | Computer algebra system (CAS) in Python |"
],
"text/plain": [
"<IPython.core.display.Markdown object>"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"notebook_manifest('jupyterlab', 'matplotlib', 'numpy', 'sympy', 'jnbBuffs')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.6"
},
"toc-showtags": false
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment