画像から楕円の検出を学ぶ

      No Comments on 画像から楕円の検出を学ぶ

ellipse4points3楕円を画像から見つけ出したい場合は、楕円上の任意の二点から楕円の中心を推測することができます。勾配情報を使用すれば、検索の範囲は大幅に削減できます。次の問題は楕円の方向と長軸と短軸をどう割り出すかになります。

回転した楕円は下記の式で表現できます。

\[ \left[ \begin{array}{c} x(\theta) \\ y(\theta) \end{array} \right] =  \left[ \begin{array}{c} x_0 \\ y_0 \end{array} \right] + \left[ \begin{array}{cc} cos(\rho) & sin(\rho) \\ -sin(\rho) & cos(\rho) \end{array} \right] \left[ \begin{array}{cc} a & 0 \\ 0 & b \end{array} \right] \left[ \begin{array}{c} cos(\theta) \\ sin(\theta) \end{array} \right] \]

\( x(\theta), y(\theta),x_0,y_0 \)は既知内容です。\( \rho,\theta,a,b \)は未定項目です。単純に\( a \)と\( b \)を解いてみれば:

\[ \begin{cases} a=\frac{cos(\rho)(x(\theta) – x_0)-sin(\rho) ( y(\theta) –  y_0)}{cos(\theta)} \\
b=\frac{sin(\rho)(x(\theta) – x_0)+cos(\rho) ( y(\theta) –  y_0)}{sin(\theta)} \end{cases} \]

この式は使えますが、\( a \)も\( b \)も、二つの変数に決められるので、計算量は大きいです。更なる分解は必要です。(勾配情報を使って\( a \)と\( b \)を算出することはできますが、その解は大変複雑です。難解な方程式も含まれるので、やめます。)

進む前に見やすくするために、下記を定義します。

\( X \equiv x(\theta) – x_0 , Y \equiv y(\theta) –  y_0 \)

これで上記の解は下記のようになります。

\[ \begin{cases} a=\frac{cos(\rho)X-sin(\rho) Y}{cos(\theta)} \\
b=\frac{sin(\rho)X+cos(\rho) Y}{sin(\theta)} \end{cases} \]

上記の解を少し調整すれば、下記の式を得られます。

\( \frac{b sin(\theta)}{a cos(\theta) } = \frac{sin(\rho) X + cos(\rho) Y}{cos(\rho) X – sin(\rho) Y} \)

この式の良い所は\( \rho \)は隔離されました。仮に、\( \phi_o \equiv \frac{b sin(\theta)}{a cos(\theta) } \)とすれば、

\[ \rho = arctan\left( \frac{\phi_o X – Y}{\phi_o Y + X } \right) \]

最後に、\( \theta \)を使ってもっとも可能な\( a \)と\( b \)を割り出せば良いです。

以上、解決済み。

Leave a Reply

Your email address will not be published. Required fields are marked *