Octave の活用
【概要】 Octaveプログラミング言語の包括的な技術解説である.基本文法から画像処理,統計解析まで幅広い機能を体系的に説明している.特に,行列演算,信号処理,画像処理における具体的な実装例を豊富に提供し,実践的なプログラミングをサポートする.また,Windows,Ubuntu,CentOSなど各種環境でのインストール方法,OpenCVとの連携,liboctaveの使用法など,開発環境構築に関する詳細な情報も含まれている.
Octaveは, 「MATLAB にほぼ互換」ともいわれるプログラミング言語.
【目次】
【サイト内の関連ページ】
【関連する外部ページ】
Octave のドキュメントは: https://www.gnu.org/software/octave/
基本機能と主要プログラミング要素
- Octaveによる数値計算とデータ処理の基礎
Octave のデータ型,種々の基本的な演算,乱数,ベクトルや行列についての各種の演算(固有値,固有ベクトル,逆行列,行列式など)について説明する.
- Octaveによる統計計算と分析の基本機能
Octaveの主要な統計計算機能として,mean(平均),var(分散),std(標準偏差)などの基本統計量の計算,center関数による平均の除去やstudentize関数による標準化などのデータの正規化,さらにttestやchi2testなどの仮説検定による統計的な有意性の評価が可能である.
- Octave でのテキストファイル入出力とユーザ I/O
- ユーザ I/O 機能: 端末への単純出力,端末からの入力,端末からの Yes/No 入力,端末へのメニュー表示と入力
- C スタイルの入出力機能 (C-Style I/O Functions): ファイルのオープン,ファイルのクローズ,書式付き書き込み,行単位でのファイル読み出し.文字列のスキャン,ファイルの終わり
- io パッケージの機能: CSV 形式ファイルの読み出しと書き込み
Octaveのファイル入出力とユーザI/O機能の使用方法を解説している.ユーザI/O機能による端末との入出力,Cスタイルの入出力機能によるファイル操作,ioパッケージによるCSVファイルの読み書きが可能である.各機能の使用例とサンプルコードを示している.
- Octave の interp2 で補間するとき入力として uint8 を与えると誤りを生じる
ベクトル計算と数値処理
画像処理機能と実装例
- 二値画像 (black-and-white) の場合: M x N の配列
- 濃淡画像 (grey-level) の場合: M x N の配列
- カラー画像 (color) の場合: M x N x 3 の配列
- Octave での画像ファイルの入出力
- 画像ファイルの読み込みと表示
- 画像ファイルの書き出し
- 画像ファイルの情報取得
* 二値画像
- Octave での画像処理の例(二値画像を入力とする画像処理)
Octave での画像処理の例(二値画像を入力とする画像処理)の例を,プログラムと図解で説明する.
- 距離変換
- 境界抽出
- 接続領域 (connected region) の抽出
- モルフォロジカル演算
* 濃淡画像
- Octave での MatlabFns
- Canny エッジ (Canny Edge)
- Harris コーナ検出器 (Harris Corner detector)
- Loy and Zelinski の高速 radial 特徴検出器
- 5-tap 係数を用いた1階微分と2階微分
- 7-tap 係数を用いた1階微分と2階微分
- Phase Congruency を用いた特徴検出 (Feature Detection)
- Thresholding と二値化
- Octave で濃淡画像の二値化、エッジ抽出(濃淡画像を入力、二値画像を出力とする)
- 濃淡画像の Thresholding と二値化
- 濃淡画像の エッジ抽出
- Octave で濃淡画像の勾配強度画像とガウシアンフィルタ(濃淡画像を入力、出力とする)
- 勾配強度画像
- ガウシアン平滑化 (Isotropic Gaussian Smoothing)
- ガウシアンフィルタと勾配強度の組み合わせ
- Octave で濃淡画像の平滑化(濃淡画像を入力、出力とする)
- ガウシアン平滑化 (Isotropic Gaussian Smoothing)
- Bilateral 平滑化 (Gaussian Bilateral filtering)
- Perona, Malik らの nonlinear isotropic diffusion 平滑化 (Perona and Malik's smoothing using nonlinear isotropic diffusion)
- Rectangular averaging linear フィルタによる平滑化 (smoothing using rectangular averaging linear filter)
- Cirtular averaging linear フィルタによる平滑化 (smoothing using rectangular circular linear filter)
- Median フイルタによる平滑化 (smooting using median filtering)
- Octave で濃淡画像を扱う種々の処理
- 濃淡画像のヒストグラムとヒストグラム平坦化
- 種々の処理
* カラー画像
- Octave でカラー画像の色空間を扱う(カラー画像を入力、出力とする)
- RGB を Lab に変換
- Lab を RGB に変換
- Octave でカラー画像の勾配強度画像とガウシアンフィルタ(カラー画像を入力、出力とする)
- 勾配強度画像
- ガウシアン平滑化 (Isotropic Gaussian Smoothing)
- ガウシアンフィルタと勾配強度の組み合わせ
- Octave でカラー画像の平滑化(カラー画像を入力、出力とする)
- ガウシアン平滑化 (Isotropic Gaussian Smoothing)
- Bilateral 平滑化 (Gaussian Bilateral filtering)
- Perona, Malik らの nonlinear isotropic diffusion 平滑化 (Perona and Malik's smoothing using nonlinear isotropic diffusion)
- Rectangular averaging linear フィルタによる平滑化 (smoothing using rectangular averaging linear filter)
- Cirtular averaging linear フィルタによる平滑化 (smoothing using rectangular circular linear filter)
- Median フイルタによる平滑化 (smooting using median filtering)
- Octave でカラー画像を扱う種々の処理(カラー画像を入力、出力とする)
- カラー画像の輝度平坦化
- カラー画像のヒストグラム平坦化
ベクトルマップと動画像処理
* サイト内の関連ページ Avidemux を用いた動画ファイルの再エンコードの例
特徴量抽出と認識処理
統計解析とデータ処理
確率/統計
ベクトル,配列の Outlier の検出
- Octave で Outlier 検出 (書きかけ)
- Octave で ltfat のビルドとインストール(書きかけ)
- Octave で biosig を使う(書きかけ)
- Octave で octave-fltk のビルドとインストール(書きかけ)
時系列
実践的なプログラミング例
- 濃淡画像のフーリエ変換と低域/高域通過フィルタ
- 画像の中央部分に写っているオブジェクト(背景は黒)を囲む長方形を求める
- 魚眼カメラの画像をテクスチャ画像に変換
- 2次元の図形要素を2値画像データとして描画
- 画像の平行移動位置あわせ(差の二乗を使用)の例
- オプティカルフローの例
- Octave で書かれた K-means プログラムの例
- k-means クラスタリングの例 (Open-CV を使用)
- 円柱座標と極座標(書きかけ)
インストールと環境構築ガイド
Linux環境でのセットアップ手順
- CentOS で,パッケージを用いて Octave をインストール
- Ubuntu で Octave バージョン 3.8.0 のビルドとインストールとテスト実行(古い情報)
Octave の ソースコードをダウンロードし,Linux 上でビルドして,インストールする手順を図解で説明する.yum でインストールした Octave との簡単な性能比較も載せています.
なぜ,ソースコードからビルドするのか?
- Octave に ATLAS を組み込みたい
- Octave に Intel Math Kernel Library (インテル・マス・カーネル・ライブラリ) を組み込みたい
- 最新版を追いかけたみたい
などの場合
- FreeBSD に Octave バージョン 3.2.4 と Octave-Forge をインストール
【サイト内の関連ページ】
- Fedora での Octave のインストール: 別ページ »で説明
C/C++との連携プログラミング
システム設定と最適化ガイド
- OpenMP を使うように Octave 3.2.3 の DLD-FUNCTIONS/conv2.cc を書き換えて,2 次元の畳み込みを高速化
- Octave バージョン 3.2.4 で imread, imfinfo, file_in_path 等が動かないバグ
OpenCVとの統合機能
Octave bindings for OpenCV は古いバージョンの OpenCV の機能なので注意.
- Linux で Octave bindings for OpenCV のビルドとインストール
Octave から OpenCV の機能を呼び出すことができるようになる.
- Linux で Octave bindings for OpenCV バージョン 031808 のビルドとインストール
古いバージョンの Octave bindings for OpenCV を使いたいというときの参考情報.最新版については別の Web ページで説明している.
動画処理パッケージの活用
Octave 3.6.3 で確認済み
- Octave の video パッケージのビルド (Linux での手順)
https://octave.sourceforge.io/ などで公開されている Octave パッケージの中の video パッケージ
- AVI 形式の動画ファイルを扱う例