OpenCV2.3の入手、ダウンロード、インストール、環境設定

2012.5現在、OpenCVの最新バージョンはVer2.4です。
こちらのインストール方法についてはOpenCV2.4の入手、ダウンロード、インストール、環境設定を参照願います。


OpenCV2.3は、一時、製品候補版のOpenCV2.3.0rcとして公開されましたが、現在ではrcの取れたOpenCV2.3.0となりました。

 

主な変更点

2.2から2.3への変更点はOpenCVのこのページで確認できます。

2.3rcおよび2.3の部分をご確認ください。

http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs


OpenCV2.3の入手、ダウンロード先

OpenCVの入手は下記ページよりダウンロードして下さい。

(Windows版)

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3/

(Unix版)

http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.3/



 

上図はWindows版の物ですが、内容は以下の通り。
 

  • OpenCV-2.3.0-win-superpack.exe
    コンパイルされたOpenCVのライブラリファイル(*.dll、*.lib、*.h)が32bit、64bit、
    Visual Studio 2008用、2010用など各環境に合わせたファイルが用意されています。
    このファイルは従来のようにOpenCVのインストーラではなく、ただの自己解凍ファイルで
    あるため、自分でPATHの設定などを行う必要があります。
  • OpenCV-2.3.0rc-gpu-support-win32-vs2008.zip
    Windows 32bit版、Visual Studio 2008、GPU対応のコンパイル済みライブラリ?
    (未評価です。)
  • OpenCV-2.3.0rc-win-src.zip
    Cmakeというソフトを使って、自分でOpenCVをコンパイルするにはこのファイルを用います。
    CUDA4.0やOpenNI、IPPへの対応など、きめの細かい設定が可能となります。

 
必要に合わせて上記の中からファイルをダウンロードして下さい。
OpenCVを使うのが初めての方はコンパイル済みのファイル(*.exe)の使用をオススメします。

以下、次の順序でOpenCVのインストール方法を説明したいと思います。
 

コンパイル済みOpenCVを使う方法

自分でOpenCVをコンパイルする方法

OpenCVの環境変数の設定方法

 

コンパイル済みファイル(OpenCV-2.3.0-win-superpack.exe)を用いたインストール方法

ダウンロードしたファイル(OpenCV-2.3.0-win-superpack.exe)をダブルクリックします。
このファイルはただの自己解凍ファイルなので、好きなフォルダへコピーして下さい。

 

ファイルを解凍すると、下記のような構成になっています。

\OpenCV2.3
┣ build
┃  ┣ bin
┃  ┣ include
┃  ┃  ┣ opencv
┃  ┃  ┣ opencv2
┃  ┃  ┃  ┣ calib3d
┃  ┃  ┃  ┣ contrib
┃  ┃  ┃  ┣ core
┃  ┃  ┃  ┣ :
┃  ┃  ┃  ┗ opencv.hpp
┃  ┃  ┗ CMakeLists.txt
┃  ┣ Python
┃  ┣ x64
┃  ┃  ┣ mingw
┃  ┃  ┣ vc9
┃  ┃  ┃  ┣ bin
┃  ┃  ┃  ┃  ┣ opencv_calib3d230.dll
┃  ┃  ┃  ┃  ┣ opencv_calib3d230d.dll
┃  ┃  ┃  ┃  ┣ opencv_contrib230.dll
┃  ┃  ┃  ┃  ┣    :
┃  ┃  ┃  ┣ lib
┃  ┃  ┃  ┃  ┣ opencv_calib3d230.lib
┃  ┃  ┃  ┃  ┣ opencv_calib3d230d.lib
┃  ┃  ┃  ┃  ┣ opencv_contrib230.lib
┃  ┃  ┃  ┃  ┣    :
┃  ┃  ┃  ┗ staticlib
┃  ┃  ┃       ┣ opencv_calib3d230.lib
┃  ┃  ┃       ┣ opencv_calib3d230d.lib
┃  ┃  ┃       ┣ opencv_contrib230.lib
┃  ┃  ┃  ┃  ┣    :
┃  ┃  ┗ vc10
┃  ┃  ┃  ┣ bin
┃  ┃  ┃  ┃  ┣ opencv_calib3d230.dll
┃  ┃  ┃  ┃  ┣ opencv_calib3d230d.dll
┃  ┃  ┃  ┃  ┣ opencv_contrib230.dll
┃  ┃  ┃  ┃  ┣    :
┃  ┃  ┃  ┣ lib
┃  ┃  ┃  ┃  ┣ opencv_calib3d230.lib
┃  ┃  ┃  ┃  ┣ opencv_calib3d230d.lib
┃  ┃  ┃  ┃  ┣ opencv_contrib230.lib
┃  ┃  ┃  ┃  ┣    :
┃  ┃  ┃  ┗ staticlib
┃  ┃  ┃       ┣ opencv_calib3d230.lib
┃  ┃  ┃       ┣ opencv_calib3d230d.lib
┃  ┃  ┃       ┣ opencv_contrib230.lib
┃  ┃  ┃       ┣    :
┃  ┗ x86
┃  ┃  ┣ mingw
┃  ┃  ┣ vc9
┃  ┃  ┃  ┣ bin
┃  ┃  ┃  ┃  ┣ opencv_calib3d230.dll
┃  ┃  ┃  ┃  ┣ opencv_calib3d230d.dll
┃  ┃  ┃  ┃  ┣ opencv_contrib230.dll
┃  ┃  ┃  ┃  ┣    :
┃  ┃  ┃  ┣ lib
┃  ┃  ┃  ┃  ┣ opencv_calib3d230.lib
┃  ┃  ┃  ┃  ┣ opencv_calib3d230d.lib
┃  ┃  ┃  ┃  ┣ opencv_contrib230.lib
┃  ┃  ┃  ┃  ┣    :
┃  ┃  ┃  ┗ staticlib
┃  ┃  ┃       ┣ opencv_calib3d230.lib
┃  ┃  ┃       ┣ opencv_calib3d230d.lib
┃  ┃  ┃       ┣ opencv_contrib230.lib
┃  ┃  ┃       ┣    :
┃  ┃  ┗ vc10
┃  ┃  ┃  ┣ bin
┃  ┃  ┃  ┃  ┣ opencv_calib3d230.dll
┃  ┃  ┃  ┃  ┣ opencv_calib3d230d.dll
┃  ┃  ┃  ┃  ┣ opencv_contrib230.dll
┃  ┃  ┃  ┃  ┣    :
┃  ┃  ┃  ┣ lib
┃  ┃  ┃  ┃  ┣ opencv_calib3d230.lib
┃  ┃  ┃  ┃  ┣ opencv_calib3d230d.lib
┃  ┃  ┃  ┃  ┣ opencv_contrib230.lib
┃  ┃  ┃  ┃  ┣    :
┃  ┃  ┃  ┗ staticlib
┃  ┃  ┃       ┣ opencv_calib3d230.lib
┃  ┃  ┃       ┣ opencv_calib3d230d.lib
┃  ┃  ┃       ┣ opencv_contrib230.lib
┃  ┃  ┃       ┣    :
┣ opencv
┃  ┣ 3rdparty
┃  ┣ android
┃  ┣ data
┃  ┣    :
readme.txt

主に関係しそうなファイルは赤く表示しておきました。
より詳細な情報はreadme.txtファイルを参照下さい。

 

解凍したファイルは、このままの構成で使うも良し、従来のようにc:\OpenCV2.3というようなフォルダを作って、その中へコピーするも良し、この辺は好みですが、自分でPATHの設定(*.dllファイルのあるフォルダの設定)を行って下さい。

 

ちょっと興味を引かれたのはstaticlicが用意されている事でしょうか?


CMakeを使ったOpenCV2.3のビルド方法

◆事前準備

今回のバージョンはCUDA4.0やOpenNIに対応している事もあり、OpenCVからこれらを使いたい場合は先にインストールしておいて下さい。(必要ない場合はインストールしなくても構いません)

 

これらのインストールについては、下記ページを参照下さい。

 

CUDA4.0

CUDA4.0の入手、インストール方法

 

OpenNI

Kinect1 -OpenNI導入-
(UnaNancyOwenさんのブログ)
※私はWindows7の64bit版を使っていますが、64bit版のOpenNIのインストールに失敗したため、32bit版を用いました。

 

◆CMakeのダウンロード、インストール

CMakeというソフトを使って、OpenCVのソースコードからVisual Studio用のソリューションファイル(*.sln)を作成します。

 

CMakeは下記ページよりダウンロードします。

 

http://www.cmake.org/cmake/resources/software.html

 

2011.6.28現在、CMakeの最新版は2.8.4になります。

 

上記リンクより、Windows (Win32 Installer)(cmake-2.8.4-win32-x86.exe)をダウンロードします。64bitOSでも、上記のファイルで大丈夫です。

 

CMakeのインストールは、表示されたウィンドウのデフォルト設定で、次へ次へで大丈夫です。

 

◆OpenCVをソースコードからビルドする方法

最初に紹介したOpenCVの入手先よりOpenCV-2.3.0rc-win-src.zipをダウンロードし、ファイルを解凍します。

 

ファイルを解凍すると、\OpenCV-2.3.0rc-win-src\OpenCV-2.3.0\・・・ というようなフォルダ構成となっていますが、旧バージョンやコンパイル済みの構成と合わせるため、今回は

 

c:\OpenCV2.3

 

というフォルダを作成し、解凍したファイルの\OpenCV-2.3.0内のファイルを上記フォルダへ移動します。

 

c:\OpenCV2.3
┣3rdparty
┣android
┣data
・・・

 

というようにします。
次に、先ほどインストールしたCMakeを起動し、

 

Where is the source code: に  c:\OpenCV2.3
Where to buid the binaries: に c:\OpenCV2.3

 

を指定します。

 

 

次に左下の Configure ボタンをクリックします。

 

 

すると、ソリューションファイルを作成するVisual Studioのバージョン選択ウィンドウが表示されるので、使用しているVisual Studioをバージョンを指定して下さい。(おそらくVisual Studio2008以降推奨?)

 

しばらくすると、このように表示されます。

 

 

ここで、CUDAやOpenCVなどを使うかどうかを設定します。他にもIPPTBBの設定ができます。

 

CUDAを使う場合は WITH_CUDA にチェック
(CUDAを使わない場合、CUDAに対応していない場合はチェックを外して下さい。)

 

OpenNIを使う場合は WITH_OPENNI にチェック


 

使用するオプションを選択したら、再度、Configureボタンをクリックします。

 

 

すると、部分的に赤く表示される場合があります。

 

これは、パスなどの設定が間違っているためで、その部分の設定を行います。

 

OpenNI(32bit版)をデフォルト設定でWindows7 64bitにインストールした場合は以下のように設定します。

 

OPENNI_INCLUDE_DIR C:\Program Files(x86)\OpenNI\Include
OPENNI_LIB_DIR C:\Program Files(x86)\OpenNI\Lib
OPENNI_PRIME_SENSOR_MODULE_BIN_DIR C:\Program Files(x86)\PrimeSense\SensorKinect\Bin

 

 

ここで、Configureボタンをクリックします。

 

 

ここで、赤い部分が表示されていなければ、CMakeの設定は合っています。

 

赤い表示がある場合は、再度、設定を行って下さい。

 

さらに、Configureボタンをクリックします。

 

 

すると、Generateボタンを有効になるので、Generateボタンをクリックします。

 

これでようやくWhere to buid the binaries:で指定したフォルダ(c:\OpenCV2.3)にOpenCVのソリューションファイル

 

OpenCV.sln

 

が作成されます。

 

次に上記のソリューションファイル(OpenCV.sln)をダブルクリックし、Visual Studioを起動します。

 

起動後、Visual Studioのメニューのビルド構成マネージャINSTALLの部分にチェックを入れて下さい。(Debug/Releaseとも

 

 

設定を行ったら、閉じるボタンでウィンドウを閉じ、メニューのビルドソリューションのビルドでOpenCVのビルドを行います。

 

OpenCVのビルドには時間がかかりますが、Debug/Releaseともにビルドを行って下さい。

 

これでようやくOpenCVで必要なdll、lib、hファイルが C:\OpenCV2.3\install 内に作成されています。

 

そして、好みにもよりもますが、互換性も考慮して以下のように移動します。

 

C:\OpenCV2.3\install\bin内のファイルをC:\OpenCV2.3\bin内へ
C:\OpenCV2.3\install\include\opencv2内のファイルをC:\OpenCV2.3\include\opencv2内へ
C:\OpenCV2.3\install\lib内のファイルをC:\OpenCV2.3\lib内へ

 

移動します。

 

次にOpenCVのdllファイルを使えるように環境変数のPATHというのを設定します。

 

OpenCVの環境変数の設定

次にOpenCVのプログラムからライブラリ(*.dllファイル)を参照できるように環境変数の設定(Pathの登録)を行います。

 

Windowsのスタートボタンをクリック → コンピュータ右クリックプ ロパティをクリックします。

 

 

開いたウィンドウの システムの詳細設定 をク リックします。

 

 

次に詳細設定タブの環境変数のボ タンをクリックします。

 

 

次にシステム環境変数のPathを選択し、編集をクリックします。

 

 

変数値のテキストボックスの最後の部分に、OpenCVのdllファイルのあるフォルダを指定します。

 

;c:\OpenCV2.3\bin

 

※もともとあった文字は消さないようにご注意ください。
最初の ; (セミコロン)を付けるのもお忘れなく。
PATHの設定後、念のためPCを再起動して下さい。

 

以上で、OpenCVのインストールは完了です。

 

 
別途、簡単なサンプルサンプルプログラムを
https://imagingsolution.net/program/opencv/opencv2-3/c-sample-program/
のページにまとめました。
ただし、OpenCVを配置したフォルダが異なる場合は、適宜、フォルダ設定を変更して下さい。
 

 

OpenCVへ戻る

 

OpenCV2.3rcが公開されました

2011.6.22の0時ごろ、OpenCV2.3rcが公開されました。

 

本当はOpenCV2.3の正式版が公開される事を期待していたのですが、rc(release candidate)の付いた製品候補版。OpenCV1.1pre1の時のように、いつこのRCが取れるのかは微妙ですが、今、私も含めてOpenCVの好きな人たちは人柱状態で評価しているところだと思います。

 

これまでOpenCVを使った事の無い人は、まだOpenCV2.3rcの情報も少ないし、いつRCが取れるかも?分からないので、まだ、使わない方が無難だと思います。

 

主な変更点

変更点についてはOpenCVの本家のページ

http://opencv.willowgarage.com/wiki/OpenCV%20Change%20Logs

にて確認できます。

日本語がよければOpenCV.jpにて

http://opencv.jp/opencv2-x-tips/changelog_from_22

 

変更内容で個人的に気になったのは

  • CUDA4.0以降への対応
  • OpenNIの対応
  • opencv_stitchingというサンプル?

 

まだ、私もやっとインストールしたばかりなので、詳細は不明ですが、ある程度落ち着いたら記事にしたいと思います。

 

OpenCV2.3rcの入手先

OpenCVの入手先はこれまで、sourceforgeのOpenCVのトップページ

 

http://sourceforge.net/projects/opencvlibrary/

 

をリンクしていましたが、すぐにこの記事が古くなってしまうので、今回はOpenCV2.3へのダイレクトリンクも載せておきます。

 

(Windows版)

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3/

(Unix版)

http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.3/

 

※Windowsの64bit版のOSでは

OpenCV-2.3.0rc-win32-vs2008.exe
OpenCV-2.3.0rc-win64-vs2010.exe

を使うとインストールに失敗するようです。

 

そのため、現状では OpenCV-2.3.0rc-win-src.zip を用いCMakeを使って、自前でビルドする必要があります。

 

旧バージョンのダウンロード

sourceforgeのOpenCVのトップページのいつもの緑のボタンもOpenCV-2.3.0rc-win-src.zipファイルへのリンクになってしまったので、古いOpenCV2.2などがダウンロードできなくなってしまった?と思われる方もいらっしゃると思いますが、過去のバージョンも全て公開されています。

(Windows版)

http://sourceforge.net/projects/opencvlibrary/files/opencv-win/

(Unix版)

http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/

 

参考記事

OpenCV 2.0 入手、ダウンロード、インストール、環境設定

(CMakeの使い方など)

CUDA4.0の入手、インストール方法

CUDAの動作環境

CUDAは2006年に発売されたGeForce8800GTX以降であれば動作するそうです。

詳細は以下のページにてご確認下さい。

http://developer.nvidia.com/cuda-gpus


CUDAのダウンロード

下記ページよりOSに合わせてファイルをダウンロードして下さい。

http://developer.nvidia.com/cuda-toolkit-40

CUDAを使うだけなら

  • Developer Drivers

だけで大丈夫と思われるのですが、とりあえず上記の他に下記ファイルもダウンロードしてみました。

  • CUDA Toolkit
  • CUDA Tool SDK
  • GPU Compution SDK code sample

 

上記のファイルを順にインストール後、デスクトップに作成されたアイコン

NVIDIA GPU Computing SDK 4.0 Browser

をダブルクリックし、表示されたサンプルプログラムも実行できたので、これでCUDA4.0はインストールされたと思われる。

 

下図は CUDA N-Body Simulation を実行した様子

 

これであとはOpenCV2.3を待つのみ?!

Kinect SDK Bitmapクラスを使ったC#サンプル

Kinect SDKには、最初からC#のサンプルプログラムはありますが、xamlファイルがあったりSystem.Windows.Mediaを使っていたり、いまいち慣れない書き方をしているので、なんとなく逆行するような気もしますが、SkeletalViewerのサンプルを慣れ親しんだBitmapクラスを使って書いてみました。

 

あちこち手を抜いていますが、サンプルは首ふり機能も追加して、こんな感じです。

 

 

サンプルプログラムはこちらです。

KinectSkeletalViewerCS.zip

動作させるにはKinect SDKがインストールされている事が必要です。

(Visual Studio 2010 C# Express版です。)

 

Kinect SDK + OpenCV2.2 サンプルプログラム作成

昨日公開されたKinect SDKですが、データをOpenCVに接続するサンプルを勉強がてら作ってみました。

 

やった事はKienct SDKのサンプルプログラム(SkeletalViewer)をベースに、画像表示部分のデータポインタをOpenCVのIplImageにコピーしています。

 

とりあえずこんな感じ↓

あ~~ 部屋が狭い、汚い、ボロイ。

 

もともとのサンプルでは、Playerの部分はDepthデータに合わせてカラーで表示しているのですが、この部分は別ウィンドウに分けました。

 

ご興味があればサンプルプログラムはこちら↓よりダウンロードできます。

 

KinectSDK_OpenCV22.zip

 

上記ファイルをダウンロード、解凍し、解凍したフォルダ(OpenCV)をKinectSDKのサンプルフォルダ

 

C:\Users\Public\Documents\Microsoft Research KinectSDK Samples\NUI\SkeletalViewer

 

に入れて下さい。(インクルードディレクトリ設定の都合上)

 

プログラムの終了は Skeletal Viewer のウィンドウの×ボタンで。

 

動作環境は

  • Kinect SDKが動作する事。
  • OpenCV2.2がインストールされている事。

です。

 

もう少しサンプルをスッキリさせたい気もしますが、もうすぐしたら、OpenCV2.3が公開されるでしょうから、ちょっと様子見で...


(2011.06.21追記)
と思ったら、kaorun55さんが、シンプルなソースコードを公開していました。
Kinect for Windows SDK beta で遊んでみた・その2(C++でOpenCV対応、OpenNIっぽく)
さすがですね。


 

ソースコードを見ていて気になったのが、深度データは16bitのバッファに格納されているのですが、16bit中の上位13bitが実際の深度データで、下位3bitにPlayerの番号が各画素ごとに割り振られていました。

 

また、深度データの解像度(320×240)を変えようと思ったのですが、出来ないのか???

(2011.06.21追記)

80×60にはできるらしい。ってデカくはできない!

Kinect SDKのダウンロード、インストール方法

2012.2.1 Kinect for Windows SDKはVer1.0になりました。

 

下記、記事はβ版のものです。

 

最新版のKinect SDKは下記ページより入手下さい。
http://www.microsoft.com/en-us/kinectforwindows/develop/overview.aspx

 

また、Ver1.0に関する記事を追加しました。こちらも参照頂けると幸いです。
Kinect for Windows SDK C#サンプルプログラム

 


6月17日の深夜にマイクロソフトより Kinect for Windows SDK beta が公開されました。

 

Kinect SDKのメインページはこちら

http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/default.aspx

KinectSDKの動作環境は

  • Kinect センサー
  • デュアルコア2.66Ghz以上推奨
  • OS:Windows7(32bit、64bit)のみ
  • グラフィック DirectX9.0c が動作する環境
  • メモリ:2GB(4GB推奨)
  • Visual Studio 2010 (Expressで可)

 

Kinect SDKのダウンロード

下記ページより、PCの環境に合わせて、32bit版もしくは64bit版をダウンロードして下さい。

 


http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx

Microsoft Speech Platform
Software Development Kit (SDK)のダウンロード

一部のサンプルプログラムでMicrosoft.Speech.dllが必要となります。

 

この入手は

 

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=1b1604d3-4f66-4241-9a21-90a294a5c9a4&displaylang=en

 

より

 

x64\MicrosoftSpeechPlatformSDK.msi (64bit版)

もしくは

x86\MicrosoftSpeechPlatformSDK.msi (32bit版)

 

をお使いのPCに合わせてダウンロードして下さい。

 

インストールはファイル(MicrosoftSpeechPlatformSDK.msi)をダウンロード後、ファイルをダブルクリックし、インストールして下さい。

 

インストール後、必要なライブラリファイル(Microsoft.Speech.dll)は

 

C:\Program Files\Microsoft Speech Platform SDK\Assembly

 

に保存されています。

 

Kinect SDKのインストール

Kinect SDKのインストールはいたって簡単です。

 

ダウンロードしたファイル(KinectSDK64.msiなど)をダブルクリックし、NextをクリックしていけばOKです。

 

 

この時、環境変数のPATHが設定されるので、この設定を反映させるためにも、念のためKinect SDKをインストール後、PCを再起動した方が良いかも?しれません。

 

デフォルトでインストールした場合、インストール後の主なファイルは以下のフォルダに保存されています。

  • dllファイル、サンプルexeファイル
    C:\Program Files (x86)\Microsoft Research KinectSDK
  • libファイル
    C:\Program Files (x86)\Microsoft Research KinectSDK\lib
  • ヘッダファイル(*.h)
    C:\Program Files (x86)\Microsoft Research KinectSDK\inc
  • ヘルプファイル
    C:\Program Files (x86)\Microsoft Research KinectSDK\docs
  • サンプルプログラムソース
    C:\Users\Public\Documents\Microsoft Research KinectSDK Samples

 

サンプルプログラムの実行

Windowsのスタートメニュー⇒すべてのプログラム⇒Microsoft Kinect for Windows SDK BETAより

 

  • ShapeGame.exe
  • SkeletalViewer.exe

 

の2つのサンプルが用意されているので、実行してみて下さい。

上図はShapeGame.exeの画面

 

SkeletalViewer.exeでは深度画像、骨格データ、カラー画像が表示されますが、部屋が汚すぎて、画面はとても出せませんでした...

 

サンプルソースは下記フォルダ

C:\Users\Public\Documents\Microsoft Research KinectSDK Samples

 

に保存されています。

 

また、VB.NET 2010版のサンプルプログラムも下記のリンクより入手可能です。

http://files.ch9.ms/coding4fun/KinectSDKSamplesVB.zip

 

その他の情報についてはヘルプファイルや下記のページが参考になると思います。

http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/guides.aspx


USTREAM台形補正アプリ – UstHomography

最近は各地でコンピュータビジョンやらKinectやらの勉強会が開催され、Ustreamで勉強会の様子が生中継で公開されている事もよくあります。

 

これらの勉強会は非常に参考になる事は多いのですが、Ustreamで見ていると、気になるのが、PowerPointで表示しているスライドを下の方から撮影しているので、スライドが台形に歪んでほとんどです。

 

そんな台形歪みを補正する方法と言えば斜影変換

この変換もOpenCVを使えば簡単にできちゃいます。

ということで、ブラウザに表示しているUstreamの動画の歪みを補正するソフトを作ってみました。

 

ダウンロードはこちら↓から

UstHomography.zip

開発環境:Windows7、C++/CLI(VS2005、.NET FRamework2.0)、OpenCV2.2

※OpenCV2.2は別途インストールが必要です。
他の環境では動作確認していないので、動作しない場合はご了承願います。

 

使い方は、上記のファイルをダウンロード、解凍し、解凍したファイル(UstHomography.exe)をダブルクリックして実行します。

プログラムを実行すると、ウィンドウが2つ開き、赤い四角が表示されている部分を、台形に歪んでいる部分にマウス操作で合わせます。

すると、他方のウィンドウに台形が補正された画像が表示されます。

また、カラー⇒モノクロ変換、明度、コントラストの調整の機能を付けました。

 

ほんと、OpenCVを使うと、こんなソフトを作るのも簡単!

でも、あまり評価していないので、あしからず...

 

エリアセンサとラインセンサとの比較

センサの比較

エリアセンサ ラインセンサ
センサ形状
CCD素子が縦横方向に並び、二次元的に
画像の撮影ができる。
CCD素子が横一列に並び、一次元的
な画像の撮影しかできない。
画素数 画素数 30万画素(640×480画素)
~500万画素程度(2456×2058画素)がメイン
最大2000万画素(5344×4008画素)
1024画素 ~7450画素程度がメイン
最大16384画素

 

ラインセンサはあまりなじみが無いかもしれませんが、身近なラインセンサにはコピー機などがあります。
コピー機は2組の鏡を絶妙に動かしながら、光学的な撮影距離を変えずにスキャン(移動撮影)しているので、興味があれば動作を覗いて見ると良いでしょう。

 

ラインセンサは何と言っても高解像度の画像を撮影できるので、魅力があるのですが、ワークを移動しながら撮影しないといけないため、エリアセンサに比べどうしても撮影システムが複雑になってしまいます。

 

また、エリアセンサのフレームレートは30~100fps程度、ラインセンサは3kHz程度、露光時間にするとエリアセンサは10~30mSec、ラインセンサは300μSec程度。

 

もちろん例外はあるのですが、ここで大事なのは露光時間(フレームレート、スキャンレート)は実に100倍!近く異なるということ。
その分だけラインセンサでは明るくちらつきの無い照明が必要となります。

 

このように↓

ラインセンサで撮影した画像がしましまになってしまう場合は、蛍光灯のチラつきの影響の場合が多いです。

 

センサの種類にはCCDCMOSタイプがありますが、高解像度で高速フレームレートのエリアセンサとなるとCMOSタイプのカメラが多くなってきています。が、CMOSタイプでは欠陥画素(明らかに感度の悪い画素)があるのがつきものです。
カメラによってはカメラの内部でこの欠陥画素を補正してしまうものもあるので分かりづらい場合もありますが、、欠陥検査などにCMOSのカメラを使おうとすると、どうしてもこの欠陥画素が邪魔をするので、ご注意下さい。というよりは使わない方が良いと思います。

 

【欠陥画素の例】

周りより白い部分や黒い部分が欠陥画素(画像を拡大表示しています)

 

 

また、CMOSにはグローバルシャッタローリングシャッタというのがあり、グローバルシャッタは全画素を同時に露光するのに対し、ローリングシャッタでは横1ラインごとに順次露光していくので、動いている被写体を撮影すると被写体が歪んでしまいます。安いCMOSカメラでは、このローリングシャッタのカメラが多いのでご注意下さい。

 

エリアセンサ向きな撮影方法

エリアセンサは撮影システムが簡単に組めるので、まずはオススメなのですが、ラインセンサでは撮影が困難なものには、製造ラインから流れてくるワークの撮影などがあります。

 

 

ラインセンサ向きな撮影方法

ラインセンサは1度に1ライン分しか撮影できないのですが、それを逆手に取ると、円筒物の撮影には向いています。
ラインセンサの場合(下図、右側)、円筒の影の影響を受ける事なく撮影する事が出来ます。

 

 

また、ワークの送り方向には画素数をいくらでも取れるので、フィルムやシート、ガラス、鉄板などの長尺物の撮影には最適です。

 

 

ガラスやフィルムの検査などにおいては、1台のカメラだけでは解像度が不足する場合があるので、ラインセンサを横1列に並べて撮影する場合もあります。

 

 

まとめ

エリアセンサやラインセンサ、CCDやCMOSにはそれぞれ特徴があるので、撮影の要求に合わせてお選び下さい。
また、デジカメの世界では画素数が多い程、良いカメラのようになっていますが、画素数が多いほどフレームレートやスキャンレートが遅くなったり、画素数が多いと画素サイズも小さくなりがちで、一般に感度も悪くなるので、ご注意下さい。
ようは、適材適所なのです。

 

関連記事

光学部品/カメラバイヤーズガイド

 


ロータリーエンコーダのしくみ

ロータリーエンコーダには大きく分けて、出力するパルスの種類の違いにより

 

  • インクリメンタルエンコーダ
  • アブソリュートエンコーダ

 

の2種類があります。
また、今回は回転用のロータリーエンコーダについて解説していますが、直線的な移動量を制御するための、リニアエンコーダというのもあります。
身近なロータリーエンコーダとしてはマウスのホイール部分もロータリーエンコーダの一種です。

 

インクリメンタルエンコーダ

特徴

エンコーダの軸が1回転するごとにエンコーダ分解能分のパルスが出力されます。
アブソリュートエンコーダに比べて安価。
A相、AB相、ABZ相出力タイプがあります。
出力信号にはオープンコレクタ、ラインドライバ(RS-422)出力などがあります。
エンコーダ呼称のパルス数[パルス/回転]は1相あたりのパルス数をさします。
高分解能のパルス数が必要な場合、A相、B相の各立上り、立下り信号をカウントし、パルス数を通常の4倍カウントする場合があります。この手法を
4逓倍と言います。
ラインセンサカメラと組合せてエンコーダを使う場合は一般に、このインクリメンタルエンコーダが用いられます。

※上図は模式図です。実際のエンコーダではAB相用のスリットは共通のスリットを用いて、パルスの90°位相をずらした位置に受光センサが配置されます。

 

エンコーダの回転方向

エンコーダを軸側から見て、時計回りをCWClock Wise)、反時計回りをCCWCounter Clock Wise)と言います。

 AB相、ABZ相のエンコーダであれば、エンコーダの回転方向を認識する事ができます。

逆にA相のみのエンコーダだと、回転方向は認識できません。

 

エンコーダがCW方向に回転しているとき、B相のパルスはA相よりも1パルスの波長の1/4だけ遅れて出力されます。

 

これにより、A相立上り→B相立上り→A相立下り→B相立下り→A相立上り・・・という順番でパルスが出力されます。

 

 

エンコーダがCCW方向に回転しているとき、A相のパルスはB相よりも1パルスの波長の1/4だけ遅れて出力されます。これにより、B相立上り→A相立上り→B相立下り→A相立下り→B相立上り・・・という順番でパルスが出力されます。

 

 

このように、回転方向がCW方向、CCW方向と異なると、出力されるA相、B相のパルスの立上り、立下りの順番が異なることから、回転方向が判断できます。
Z相は1回転につき、1パルスだけ出力され、回転角度の基準(原点)や回転数のカウントに使用されます。
ただし、Z相の位置は見た目分かりづらい物が多く、Zの位置を調整するのは困難な場合が多いので、
Z相を原点復帰(イニシャライズ)用に使うことはまれで、別途、フォトセンサを付けるのが一般的です。

 

アブソリュートエンコーダ

特徴

エンコーダの回転角度に合わせて、回転角度を取得することができます。
電源投入時でもイニシャライズ(原点復帰)処理を必要としません。
回転角度は2進数で取得でき、たとえば1回転を256分解能の出力のときは8ビット出力となります。
主にサーボモータなどに使われています。

 

主なエンコーダメーカ

一般式による最小二乗法(円の最小二乗法)

n次曲線による最小二乗法につていは説明しましたが、円や楕円、その他の一般式についても最小二乗法による近似は可能です。
今回は円の最小二乗法を例にとって説明しますが、他の一般式についても要領は同じです。

 

まず初めに近似する一般式を作成します。

円の場合、円の中心座標(a,b)、円の半径 r とすると

 

(X – a)2 + (Y – b)2 = r2 ・・・①

 

となります。

n次曲線による最小二乗法ではX座標がXiの時のY座標Yiと近似曲線上のY座標f(Xi)との差の二乗が最小になるように計算していましたが、円の場合、X座標がXiの時にY座標が存在しなかったり、Y座標が2点存在してしまう場合もあります。

 

そこで、今回はY座標の差の2乗の総和を求めるのではなく、①式を=0の式に変形し、
点の座標(Xi,Yi)を代入し、その式の2乗の総和を求めます。
(n次式近似でやった計算も結局は近似式=0になるように変形していた訳ですが...)

 

①式を=0になるように変形し、2乗の総和は

 

∑{(Xi – a)2 + (Yi – b)2 – r22 = 0 ・・・②

 

となります。

ただし、このまま未知数a,b,rに関して②式を偏微分してもa,b,rは4次関数となるので、各未知数の偏微分=0の時が最小とは限りません。

 

そこで、②式を展開し、下の式のように置きます。

 

∑{Xi2 + Yi2 + AXi + BYi + C}2 = 0 ・・・③

 

ただし

A = -2a ・・・④
B = -2b ・・・⑤
C =  a2 + b2 – r2 ・・・⑥

 

③式に関してA,B,Cについて偏微分すると

 

∂/∂A = A∑Xi2 + B∑XiYi + C∑Xi + ∑Xi3 + ∑XiYi2 = 0 ・・・⑦
∂/∂B = A∑XiYi + B∑Yi2 + C∑Yi + ∑Xi2Yi + ∑Yi3 = 0 ・・・⑧
∂/∂C = A∑Xi + B∑Yi + C∑1  + ∑Xi2 + ∑Yi2 = 0 ・・・⑨

 

⑦、⑧、⑨式を行列を用いて解くと

 

 

となり、逆行列を求めるとA,B,Cが求まります。

さらに④、⑤、⑥式より円の中心座標(a,b)、円の半径 rが求まります。

  \(a=-\frac{A}{2}\)

  \(b=-\frac{B}{2}\)

  \(r=\sqrt{a^{2}+b^{2}-C}\)

 

使える数学へ戻る

 

関連記事

最小二乗法の計算方法

最小二乗法の計算方法

最小自乗法という人もいますが、私は最小二乗法派です。

最小二乗法とは?

点の集まりから、近似直線(曲線)などの近似式を解くための手法です。
単に直線や二次曲線、三次曲線などに限らず、最小二乗法の応用範囲は広くあります。

最小二乗法は、言葉の通りに2乗を最小にする方法なのですが、この2乗と言うのが、方程式上の理論値と近似するデータとの差の2乗の合計を最小にする方法となります。と言っても分かりづらいので、具体的な最小二乗法の例を示します。

 

最小二乗法の計算方法

今回は説明を簡単にするため、f(X)= aX + b の直線でデータを近似する場合で説明します。

 

 

X = Xi のとき、直線上のY座標は

$$Y_{i}=f(X_{i})=aX_{i}+b$$

より、点と近似直線との差は

$$Y_{i}-f(X_{i})=Y_{i}-(aX_{i}+b)$$

となります。

 

この差の合計が一番小さい時にもっとも点の集まりを直線で近似できていることとなりますが、
そのままこの差の総和を計算すると差の値がプラスの時とマイナスの時があるため、例えば下図

 

 

のように、正の差と負の差が同じようにある場合、差の合計が小さくなってしまうため、差を2乗してから合計した値が最小になるようにします。

 

よって、差の2乗の合計は

$$\sum(Y_{i}-(aX_{i}+b))^{2}\\
=\sum(a^{2}X_i^2+2aX_{i}b+b^{2}-2aX_{i}Y_{i}-2bY_{i}+Y_i^2 )$$

・・・式①

となり、この総和の値が最小となるaとbを求めれば近似直線を求められることとなります。

 

この式を良くみると、aとbの二次関数でできているため、この二次関数が最小となる値を求めればよい。
二次関数が最小となるのは微分した値 = 0 の場合であるから、式①をaとbで偏微分した値が
0(ゼロ)となる値を求めればよい。

 

式①をaとbでそれぞれ偏微分すると

$$\frac{\partial}{\partial a}=2a\sum X_i^2+2b\sum X_{i}-2\sum X_{i}Y_{i}=0\\
\frac{\partial}{\partial b}=2a\sum X_i+2b\sum 1-2\sum Y_{i}=0$$

より

$$a\sum X_i^2+b\sum X_{i}-\sum X_{i}Y_{i}=0\\
a\sum X_i+b\sum 1-\sum Y_{i}=0$$

となり、未知数がaとbで式が2本あることから、aとbの連立法的式を解くことで未知数a,bを求めることができます。

 

連立方程式を行列で表すと

$$\left(\begin{array}{c}\sum X_i^2 & \sum X_{i}\\ \sum X_{i} & \sum 1\end{array}\right)\left(\begin{array}{c}a\\ b\end{array}\right)=\left(\begin{array}{c}\sum X_{i}Y_{i}\\ \sum Y_{i}\end{array}\right)
\\
\left(\begin{array}{c}\sum X_i^2 & \sum X_{i}\\ \sum X_{i} & \sum 1\end{array}\right)^{-1}\left(\begin{array}{c}\sum X_i^2 & \sum X_{i}\\ \sum X_{i} & \sum 1\end{array}\right)\left(\begin{array}{c}a\\ b\end{array}\right)=\left(\begin{array}{c}\sum X_i^2 & \sum X_{i}\\ \sum X_{i} & \sum 1\end{array}\right)^{-1}\left(\begin{array}{c}\sum X_{i}Y_{i}\\ \sum Y_{i}\end{array}\right)
\\
\left(\begin{array}{c}a\\ b\end{array}\right)=\left(\begin{array}{c}\sum X_i^2 & \sum X_{i}\\ \sum X_{i} & \sum 1\end{array}\right)^{-1}\left(\begin{array}{c}\sum X_{i}Y_{i}\\ \sum Y_{i}\end{array}\right)
\\
\left(\begin{array}{c}a\\ b\end{array}\right)=\frac{1}{\sum X_i^2\sum 1-\sum X_{i}\sum X_{i}}\left(\begin{array}{c}\sum 1 & -\sum x_i\\ -\sum x_i & \sum X_i^2\end{array}\right)\left(\begin{array}{c}\sum X_iY_i\\ \sum Y_i\end{array}\right)$$

となり、行列を解くと未知数a,bが求まり、近似直線を求めることができます。

 

ちなみに、二次式(aX2 + bX + c)で近似すると

$$\left(\begin{array}{c}a\\ b \\ c\end{array}\right)=
\left(\begin{array}{c}
\sum X_i^4 & \sum X_i^3 & \sum X_i^2\\
\sum X_i^3 & \sum X_i^2 & \sum X_i\\
\sum X_i^2 & \sum X_i & \sum 1
\end{array}\right)^{-1}
\left(\begin{array}{c}
\sum X_i^2Y_i\\
\sum X_iY_i \\
\sum Y_i\end{array}\right)$$

三次式(aX3 + bX2 + cX + d)で近似すると

$$\left(\begin{array}{c}
a\\
b\\
c\\
d
\end{array}\right)=
\left(\begin{array}{c}
\sum X_i^6 & \sum X_i^5 & \sum X_i^4 & \sum X_i^3\\
\sum X_i^5 & \sum X_i^4 & \sum X_i^3 & \sum X_i^2\\
\sum X_i^4 & \sum X_i^3 & \sum X_i^2 & \sum X_i\\
\sum X_i^3 & \sum X_i^2 & \sum X_i & \sum 1
\end{array}\right)^{-1}
\left(\begin{array}{c}
\sum X_i^3Y_i\\
\sum X_i^2Y_i\\
\sum X_iY_i \\
\sum Y_i\end{array}\right)$$

と規則的に変化するため、n次式近似のプログラムも簡単に作ることができます。
ただし、行列の部分を二次元配列と考えると、近似する次数(n)が上がって行くと、配列の先頭に値が追加されていくのは、扱いにくいので、n次式近似のプログラムを作る場合は、近似式を

$$Y=a+bX+cX^2+dX^3 \cdot\cdot\cdot\cdot$$

として、行列の表現は

$$\left(\begin{array}{c}a\\ b\\ c\\d\\:
\end{array}\right)=
\left(\begin{array}{c}
\sum 1 & \sum X_i & \sum X_i^2 & \sum X_i^3 & .. \\
\sum X_i & \sum X_i^2 & \sum X_i^3 & \sum X_i^4 & .. \\
\sum X_i^2 & \sum X_i^3 & \sum X_i^4 & \sum X_i^5 & ..\\
\sum X_i^3 & \sum X_i^4 & \sum X_i^5 & \sum X_i^6 & ..\\
: & : & : & : & :
\end{array}\right)^{-1}
\left(\begin{array}{c}
\sum Y_i\\
\sum X_iY_i \\
\sum X_i^2Y_i\\
\sum X_i^3Y_i\\
:
\end{array}\right)$$

として、n次式で近似した最小二乗法を求めます。

 

この計算をエクセルで行ったものはExcelによる最小二乗近似からダウンロードできます。
逆行列を求めるプログラムにはガウスの消去法などが用いられます。

 

最小二乗法での注意点

三次式(a+bX+cX2+dX3)の近似を例にとってみると、近似処理をする過程でXに関する計算式はX~X6まで計算されます。

 

ここで、例えばXの値の範囲が

 

0.01~1000

 

だったとすると、Xに関する計算では

 

0.000000000001~1000000000000000000

 

までの計算がされます。
逆行列の計算ではこれらの値に関して足し算や掛け算がなされる訳ですからコンピュータの
計算誤差(桁落ち、情報落ちなど?)が発生する場合があります。
これを防ぐために、最小二乗法のプログラムでは近似式をそのまま使うのではなく、Xの値から
Xの平均値(X)を引いた計算式

$$Y=a+b(X-X_b)+c(X-X_b)^2+d(X-X_b)^3$$

で処理を行うのが一般的です。

 

最小二乗法の関連記事

一般式による最小二乗法(円の最小二乗法)

最小二乗法をExcelで解く

最小二乗法の最適化(高速化)

ロバスト推定法(Tukey’s biweight)

 

使える数学へ戻る

 

任意点周りの回転移動(アフィン変換)

回転行列では原点周りに点を回転させますが、任意の点(C、C周りに回転させたい場合にはどうするのか?

 

 

これまでの知識を少し応用することで、意外と簡単に求めることができます。

 

まず、回転する点を回転中心座標が原点と一致するように点を移動させます。

 

次に移動した点を原点周りに回転移動させます。

 

 

回転移動後、点を原点から元の回転中心位置へ移動させます。

 

 

これで、任意点(C、C周りに点を回転移動させることができました。

 

この 原点へ移動→原点周りの回転→元へ戻す の一連の処理を行列であらわすと

 

 

行列部分を整理すると

 

 

となり、任意点(C、C周りに点を回転移動させる行列を求めることができます。

 

今回は回転移動について説明しましたが、拡大縮小についても、任意点を基点に拡大縮小する場合についても同様です。

この考え方は、二次元の座標だけでなく、三次元の場合も使えます。。

参考

アフィン変換(平行移動、拡大縮小、回転、スキュー行列)

 

使える数学へ戻る

 

回転行列、拡大縮小行列、平行移動行列(三次元座標の場合)

二次元座標(X,Y座標)の場合のアフィン変換行列についてはこちらで説明しましたが、今回は三次元座標(X,Y,Z座標)のアフィン変換となります。

三次元座標の場合、まず座標軸の定義、回転方向の定義を明確に覚えます。

この座標は右手座標系と呼ばれます。
フレミングの法則のときのように右手親指人差し指中指をそれぞれ
直交するようにします。
このとき親指から順に親指がX軸人差し指がY軸中指がZ軸の方向と
なります。
回転方向は電流と磁界の向きと同じように電流軸の向き磁界回転方向
に相当します。(右ねじの法則と同じです。)

 

回転行列

三次元の回転行列の前に二次元の回転行列のおさらいです。
二次元の回転行列は以下の通りとなります。

 

 

これをベースに三次元座標の場合では、回転する軸の正の方向から原点の方向を見たときに、X軸、Y軸はそれぞれ何軸に相当するのか?を考えれば、二次元座標のXやYの変数の置き換えで導き出すことができます。
行列変換しない軸に関しては単位行列でそのまま残します。

 

【X軸周りの回転】

【Y軸周りの回転】

【Z軸周りの回転】

拡大縮小行列

点(x, y, z)を原点に関してX軸方向に、Y軸方向に、Z軸方向にZする行列は

 

平行移動行列

点(x, y, z)をX軸方向に、Y軸方向に、Z軸方向にZだけ移動する行列は

 

補足

三次元の座標変換に関して検索すると座標変換は下記のように

行ベクトルで表記される場合もあるのですが、変換行列の値が変わるので、
混同しないようご注意下さい。
この表現はマイクロソフトがお得意で、DirectX(Direct3D)や.NETのアフィン変換でしか使われないので、特に必要の無い場合は覚えない方が無難です。

 

関連記事

二次元座標のアフィン変換についてはこちら↓にまとめています。

アフィン変換(平行移動、拡大縮小、回転、スキュー行列)

 

使える数学へ戻る

 

回転行列、拡大縮小行列、平行移動行列

本記事は、私がアフィン変換を勉強し始めた当初の記事になります。
今では、3×3行列の同次座標行列と呼ばれる行列しか用いておらず、こちらの方が断然おススメなので、下記ページを参照ください。

アフィン変換(平行移動、拡大縮小、回転、スキュー行列)

以下は、2×2行列を使ったアフィン変換の説明です。

回転行列

点(x, y)を原点まわりに反時計方向にθ度回転する行列は

 

拡大縮小行列

点(x, y)を原点に関してX軸方向に、Y軸方向にする行列は

 

平行移動行列

点(x, y)をX軸方向に、Y軸方向にだけ移動する行列は

 

 

ただし、平行移動だけ行列の足し算になると、扱いにくい場合があるので3×3行列を用いて以下のように表す場合もあります。
というより、こちらを使う方が便利です。(私はこちらしか使いません。)

【回転行列】

【拡大縮小行列】

【平行移動行列】

 

とすることで、すべての座標変換を行列の積で扱うことができます。

この行列を同次座標行列と言います。
詳細はこちらを参照ください。

 

参考まで...

個人的には回転行列を覚えるのは苦手で、SinとCosが逆になっりマイナスのつける位置を間違ったりしていたのですが、次のように考えることで少しは覚えやすくなりました。

下図のように

点(1,0)をθ度回転すると(Cosθ、Sinθ)
点(0,1)をθ度回転すると(-Sinθ、Cosθ)

に移動することはすぐにわかります。

このことを行列で表現すると
点(1,0)が(Cosθ、Sinθ)になることから

点(0,1)が(-Sinθ、Cosθ)になることから

という事がわかります。
これを合わせて表現すると

となり、回転行列が求まります。
この計算を何回か繰り返すと、そのうち覚えると思います。

 

使える数学へ戻る

 

【Excel】行列の積、逆行列、転置行列の計算

エクセルで行列の計算をするときの最大のポイントは、計算式を入力後

 

を同時に押すことです。

 

エクセルのヘルプを見ても、この事はどこに書いてあるのか?分からないので、ちょっとハマりやすいかもしれません。(私ははまりました。)

 

行列の積[MMULT(行列1,行列2)]

まず、行列の積の計算を行う行列を入力しておきます。
次に行列の積の計算結果を表示するセルを選択します。

 

 

セルを選択した状態で、行列の積の計算式

 

= MMULT(行列1, 行列2)

 

を入力します。

 

 

ここで、EnterではなくCtrlキーとShiftキーとEnterキーを同時に押します。

 

 

逆行列[MINVERSE(行列)]

逆行列に関しても同様に

 

=MINVERSE(行列)

 

と入力します。

 

 

ここで、EnterではなくCtrlキーとShiftキーとEnterキーを同時に押します。

 

 

転置行列[TRANSPOSE(行列)]

転置行列の計算式は

 

=TRANSPOSE(行列)

 

となります。

 

 

クドいですが、EnterではなくCtrlキーとShiftキーとEnterキーを同時に押します。

 

 

この行列の積、逆行列、転置行列がエクセルで解けると何が良いか?というと、

 

●連立方程式
●座標の回転
●最小二乗法
●擬似逆行列(一般逆行列)

 

などが解けるようになります。
これらを知らないと、いちいちプログラムを組んで計算の検証をしたりもしますが、
エクセルで出来るようになると、とっても簡単、お手軽です。

行列で連立方程式を解く

行列を使って連立方程式を解く方法を紹介します。

 

【計算例】

3つの方程式

 

 

を行列であらわすと

 

 

となります。この行列を逆行列を使ってX、Y、Zに関して解くと

 

 

となり連立方程式を行列で解くことができます。

 

 

…というのは普通すぎて面白くないので、3点からなる円の方程式を行列で解く方法を紹介します。

 

中心(a、b)、半径 r の円の方程式

 

(X – a)2 + (Y – b)2 = r2

 

を展開して

 

X2 + Y2 – 2aX – 2bY + a2 + b2 – r2 =  0

 

となり、A = 2a、B = 2b、C = r2 – a2 – b2 とおくと、上式は

 

AX + BY + C  =   X2 + Y2

 

となります。

 

ここで、円上の3点(X0、Y0)、(X1、Y1)、(X2、Y2を代入すると

 

AX0 + BY0 + C  =  X02 + Y02
AX1 + BY1 + C  =  X12 + Y12
AX2 + BY2 + C  =  X22 + Y22

 

の3本の式が成り立ち、これを行列で表現すると、

 

 

となり、A、B、Cに関して行列を解くと

 

 

となり、A、B、Cが求まることから、A = 2a、B = 2b、C = r2 – a2 – b2 より
中心半径を求めることができます。

 

行列を解く部分は

ガウスの消去法

のページを参照下さい。

 

使える数学へ戻る