禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P312
拟合椭圆
在椭圆中,焦距是指两个焦点之间的距离,通常表示为 2 c 2c 2c。这里的 c c c 是从椭圆的中心到任一焦点的距离。因此,当提到椭圆的焦距为 2 c 2c 2c 时,意味着从一个焦点到另一个焦点的距离是 2 c 2c 2c。
椭圆的一些基本参数及其关系如下:
- 半长轴 ( a a a):椭圆上任意一点到两个焦点的距离之和的一半。它是椭圆最长直径的一半。
- 半短轴 ( b b b):椭圆最短直径的一半。
- 焦距 ( 2 c 2c 2c):两焦点之间的距离,其中 c = a 2 − b 2 c = \sqrt{a^2 - b^2} c=a2−b2 。
这个公式表明了椭圆的焦距 2 c 2c 2c 与其半长轴 a a a 和半短轴 b b b 之间的关系。通过这个关系式,可以计算出给定半长轴和半短轴的椭圆的焦距。
对区域最小二乘拟合椭圆,它的形状和方向能够很好地代表该区域的形状和方向。
计算 x x x轴与椭圆长轴之间的角度(以度为单位),
-
计算椭圆的长轴和短轴:
- 椭圆的长轴和短轴可以通过计算图像区域的二阶矩(协方差矩阵)得到。
- 协方差矩阵的特征向量和特征值分别对应于椭圆的主轴方向和轴长。
-
确定长轴的方向:
- 协方差矩阵的最大特征值对应的特征向量表示椭圆的长轴方向。
-
计算角度:
- 假设 x x x 轴正方向为水平向右(0 度),长轴方向向量与 x x x 轴之间的夹角即为所求角度。
- 可以使用反正切函数(arctan2)来计算两个向量之间的夹角。
具体步骤
根据图像区域计算二阶矩( m 00 , m 10 , m 01 , m 11 , m 20 , m 02 m_{00}, m_{10}, m_{01}, m_{11}, m_{20}, m_{02} m00,m10,m01,m11,m20,m02)
- 计算图像区域的协方差矩阵 :
假设我们有一个图像区域 I ( x , y ) I(x, y) I(x,y),其中 x x x 和 y y y 是像素的位置坐标。我们可以通过以下步骤计算该区域的协方差矩阵:
(1) 计算质心 :首先计算图像区域的质心 ( x ˉ , y ˉ ) (\bar{x}, \bar{y}) (xˉ,yˉ)。
x ˉ = ∑ x , y x ⋅ I ( x , y ) ∑ x , y I ( x , y ) = m 10 \bar{x} = \frac{\sum_{x,y} x \cdot I(x, y)}{\sum_{x,y} I(x, y)}=m_{10} xˉ=∑x,yI(x,y)∑x,yx⋅I(x,y)=m10
y ˉ = ∑ x , y y ⋅ I ( x , y ) ∑ x , y I ( x , y ) = m 01 \bar{y} = \frac{\sum_{x,y} y \cdot I(x, y)}{\sum_{x,y} I(x, y)}=m_{01} yˉ=∑x,yI(x,y)∑x,yy⋅I(x,y)=m01
(2) 计算协方差矩阵 :协方差矩阵 C C C 是一个 2x2 的矩阵:
C = ( σ x x σ x y σ y x σ y y ) C = \begin{pmatrix} \sigma_{xx} & \sigma_{xy} \\ \sigma_{yx} & \sigma_{yy} \end{pmatrix} C=(σxxσyxσxyσyy)
其中:
σ x x = ∑ x , y ( x − x ˉ ) 2 ⋅ I ( x , y ) ∑ x , y I ( x , y ) = m 20 m 00 \sigma_{xx} = \frac{\sum_{x,y} (x - \bar{x})^2 \cdot I(x, y)}{\sum_{x,y} I(x, y)}= \frac {m_{20}} {m_{00}} σxx=∑x,yI(x,y)∑x,y(x−xˉ)2⋅I(x,y)=m00m20
σ y y = ∑ x , y ( y − y ˉ ) 2 ⋅ I ( x , y ) ∑ x , y I ( x , y ) = m 02 m 00 \sigma_{yy} = \frac{\sum_{x,y} (y - \bar{y})^2 \cdot I(x, y)}{\sum_{x,y} I(x, y)}= \frac {m_{02}} {m_{00}} σyy=∑x,yI(x,y)∑x,y(y−yˉ)2⋅I(x,y)=m00m02
σ x y = σ y x = ∑ x , y ( x − x ˉ ) ( y − y ˉ ) ⋅ I ( x , y ) ∑ x , y I ( x , y ) = m 11 m 00 \sigma_{xy} = \sigma_{yx} = \frac{\sum_{x,y} (x - \bar{x})(y - \bar{y}) \cdot I(x, y)}{\sum_{x,y} I(x, y)}= \frac {m_{11}} {m_{00}} σxy=σyx=∑x,yI(x,y)∑x,y(x−xˉ)(y−yˉ)⋅I(x,y)=m00m11
-
求解协方差矩阵的特征值和特征向量:
- 求解特征方程 ∣ C − λ I ∣ = 0 |C - \lambda I| = 0 ∣C−λI∣=0 得到特征值 λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2( λ 1 ≥ λ 2 \lambda_1 \geq \lambda_2 λ1≥λ2)。
- 对应的特征向量 v 1 , v 2 \mathbf{v}_1, \mathbf{v}_2 v1,v2,其中 v 1 \mathbf{v}_1 v1 对应长轴方向。
-
计算角度:
- 特征向量 v 1 = ( v 1 x , v 1 y ) \mathbf{v}1 = (v{1x}, v_{1y}) v1=(v1x,v1y)。
- 角度 θ \theta θ 为:
θ = arctan 2 ( v 1 y , v 1 x ) \theta = \arctan2(v_{1y}, v_{1x}) θ=arctan2(v1y,v1x) - 注意,arctan2 返回的角度范围是 [ − π , π ] [- \pi, \pi] [−π,π],需要将其转换为 [ − 9 0 ∘ , 9 0 ∘ ] [-90^\circ, 90^\circ] [−90∘,90∘]:
θ = { θ × 180 π if θ ≥ 0 ( θ + 2 π ) × 180 π if θ < 0 \theta = \begin{cases} \theta \times \frac{180}{\pi} & \text{if } \theta \geq 0 \\ (\theta + 2\pi) \times \frac{180}{\pi} & \text{if } \theta < 0 \end{cases} θ={θ×π180(θ+2π)×π180if θ≥0if θ<0- 若 θ > 9 0 ∘ \theta > 90^\circ θ>90∘,则 θ = 18 0 ∘ − θ \theta = 180^\circ - \theta θ=180∘−θ。
偏心率(Eccentricity)
偏心率(Eccentricity)是一个数学概念,主要用于描述圆锥曲线(包括圆、椭圆、抛物线和双曲线)的形状。偏心率的值可以帮助我们了解曲线的开口程度或偏离圆形的程度。以下是几种常见圆锥曲线的偏心率特点:
-
圆:偏心率为 0。这意味着圆的所有点到中心的距离都是相同的,没有任何偏离。
-
椭圆:偏心率介于 0 和 1 之间(0 < e < 1)。偏心率越接近 0,椭圆越接近圆形;偏心率越接近 1,椭圆的扁平度越高,即两个焦点之间的距离越大。
-
抛物线:偏心率为 1。抛物线是一种特殊的圆锥曲线,它的一侧无限延伸,而另一侧则向一个焦点汇聚。
-
双曲线:偏心率大于 1(e > 1)。双曲线有两个分支,每个分支都向其对应的焦点汇聚。偏心率越大,双曲线的开口越宽。