Pynote

Python、機械学習、画像処理について

Keras - 画像を扱う utility 関数について

概要 Keras で画像を扱う際の utility 関数について紹介する。 画像をファイルから読み込み ndarray として取得する、画素値が [0, 1] に正規化された画像をファイルに保存するといった場合に利用できる。 キーワード keras.preprocessing.image array_to_im…

Keras - Keras 実装で学ぶ ResNet

概要 ResNet を Keras で実装する方法について、keras-resnet をベースに説明する。 概要 ResNet 実装 必要なモジュールを import する。 compose() について ResNet の畳み込み層 shortcut connection building block bottleneck building block residual b…

Keras - Keras の ImageDataGenerator を使って学習画像を増やす

概要 CNN の学習を行う場合にオーグメンテーション (augmentation) を行い、学習データのバリエーションを増やすことで精度向上ができる場合がある。 Keras の preprocessing.image モジュールに含まれる ImageDataGenerator を使用すると、リアルタイムにオ…

Deep Learning - ResNet の仕組みについて

概要 画像認識のコンテスト ILSVRC 2015 にて、top5 error rate で3.57%を記録し、優勝した CNN ネットワークモデルである。 下記、2論文に基づいて紹介する。 Deep Residual Learning for Image Recognition Identity mappings in Deep Residual Networks …

Keras - Keras のファイルの形式について

概要 Keras で保存した重みファイルから直接重みを読み出す方法について 概要 試した環境 MNIST のクラス分類器を CNN で作成する。 MNIST データセットを読み込み、前処理を行う。 モデルを作成する。 モデル構成を表示する。 モデルの学習を行う。 save_we…

OpenCV - Watershed アルゴリズムで物体の輪郭抽出を行う

概要 OpenCV の Watershed アルゴリズムで物体の輪郭抽出を行う方法について紹介する。 概要 試した環境 手順 画像を読み込む。 大津の手法で2値化する。 opening 処理でノイズを除去する。 そのまま輪郭抽出を行った場合 (失敗例) sure background を抽出す…

環境構築 - Ubuntu 16.04 に NVIDIA ドライバをインストールする方法について

概要 Ubuntu 16.04 に NVIDIA ドライバを導入する方法を紹介する。 概要 試した環境 手順 GPU が対応している NVIDIA ドライバのバージョンを調べる。 レポジトリを追加する。 apt-get でインストールできるドライバ一覧を検索する。 NVIDIA ドライバをイン…

数学 - オイラー角について

概要 オイラー角とそれが表す回転行列について解説する。 概要 各軸周りの回転行列 周りの回転 周りの回転 周りの回転 オイラー角 回転する順番 オイラー角により構成される回転行列 roll, pitch, yaw 証明

数学 - 3次元空間上の回転の四元数 (クォータニオン) による表現

概要 コンピューターグラフィクス等の分野では、3次元空間上の回転を四元数 (クォータニオン) で表すことが多い。 本記事では四元数でなぜ3次元空間上の回転を表せるのかを解説する。四元数の定義及び基本的な性質については以下の記事を参照されたい。pynot…

Qt - OpenGL の GLSL で描画する。 その2 シェーダーを OpenGL パイプラインにインストールする。

概要 Qt アプリケーション上で OpenGL の GLSL でシェーダーを作成し、描画を行う方法について紹介する。 今回はコンパイルしたシェーダーを OpenGL パイプラインにインストールする部分を紹介する。 概要 試した環境 資料 手順 プログラムオブジェクトを作…

Qt - OpenGL の GLSL で描画する。 その1 シェーダーをコンパイルする。

概要 Qt アプリケーション上で OpenGL の GLSL でシェーダーを作成し、描画を行う方法について紹介する。 今回はシェーダーをコンパイルする部分を紹介する。 概要 試した環境 資料 手順 シェーダーを作成し、リソースに追加する。 シェーダーのソースコード…

Qt - Qt で OpenGL の API を利用する方法について

Qt

概要 Qt で OpenGL を利用する方法について紹介する。 概要 試した環境 資料 手順 CMake を編集する。 OpenGL を描写するための自作ウィジェットを作る OpenGL の API で描画命令を記述する。 初期化処理を記述する。 描画する際の処理を記述する。 ビルドす…

OpenCV - テンプレートマッチングの仕組み及び方法について

概要 テンプレートマッチングの仕組み及び方法について紹介する。 概要 テンプレートマッチングの仕組み OpenCV でテンプレートマッチングを行う方法 関数 コード テンプレートマッチング result の解釈 類似度が最も高い位置を描画がする。 類似度が高い位…

matplotlib - OpenCV の画像を matplotlib で表示する方法について

概要 OpenCV の画像を matplotlib で表示する際の注意点について 概要 OpenCV のカラー画像を表示する場合 OpenCV のグレースケール画像を表示する場合 関数化する

OpenCV - カメラキャリブレーションを行う方法

概要 OpenCV でカメラキャリブレーションを行う方法について紹介する。 概要 カメラキャリブレーション 手順 1. キャリブレーション器具を様々な距離、角度から撮影する。 キャリブレーション器具でマーカー検出を行う。 検出した画像座標上の点に対応する3…

OpenCV - inRange による範囲指定で2値化する方法について

概要 OpenCV の inRange による範囲指定で2値化する方法について紹介する。 概要 試した環境 inRange() 引数 返り値 サンプルコード グレースケール画像 RGB 画像 HSV 画像

Deep Learning - Keras 実装の YOLOv3 で画像、動画から物体検出を試してみた

概要 Keras 実装の YOLOv3 である keras-yolo3 で画像、動画から物体検出を試してみた。 概要 試した環境 手順 依存ライブラリを導入する。 コード及び重みファイルをダウンロードする。 画像から物体検出を行う場合 動画から物体検出する場合

OpenCV - cv::Mat と numpy 配列の対応まとめ

概要 OpenCV を C++ で使う場合は画像は cv::Mat として扱うが、 Python で使う場合は numpy array として扱う。 numpy array と cv::Mat ではインタフェースが幾分異なるため、その対応をまとめた。 概要 プロパティ 行数、列数、チャンネル数 カラー画像か…

OpenCV - 行列の加減乗除及び Utility 関数

概要 OpenCV の配列の加減乗除及びその Utility 関数についてまとめた。 C++、Python 両方に対応。 概要 試した環境 加減乗除 加算 関数 コード 減算 関数 コード 要素ごとの乗算 関数 コード 要素ごとの除算 関数 コード 比較 関数 コード Utility 関数 abs…

OpenCV - 配列の絶対値、平方根、べき乗、指数関数、対数関数を計算する

概要 OpenCV で行列の絶対値、平方根、べき乗、指数関数、対数関数を計算する方法について紹介する。 C++ 及び Python の両方に対応。 Python では行列は numpy array として扱われるので、OpenCV の関数でなく、numpy の関数を使っても同じ処理が行える。 …

OpenCV - connectedComponents() で連結成分のラベリング

概要 OpenCV の connectedComponents() で連結成分のラベリング (connected component labeling)を行う方法について紹介する。 概要 連結成分のラベリング 引数 返り値 構造情報付きで連結成分のラベリング 引数 サンプルコード 2値画像を読み込む。 連結成…

OpenCV - distanceTransform() で距離変換を行う

概要 OpenCV の distanceTransform() で距離変換を行う方法について紹介する。 概要 画像における距離の定義 距離変換 引数 ラベルマップを生成する。 引数 サンプルコード 参考

OpenCV - 画像を切り抜く方法について

概要 OpenCV で画像の一部を切り抜き、新しい画像を作成する方法について紹介する。 概要 解説 サンプルコード Python グレースケール形式 RGB 形式 C++

OpenCV - 画像にアフィン変換を適用する方法について

概要 OpenCV で画像にアフィン変換を適用する関数 warpAffine() について解説する。 この関数を利用することで、画像を回転、拡大縮小できる。また、応用的な使い方として、ある画像を別の画像に貼り付けることもできる。 概要 画像を回転させる。 引数 返り…

OpenCV - 画像座標系における回転、拡大縮小について

概要 画像座標系における回転、拡大縮小について解説し、OpenCV で回転行列を作成する方法を紹介する。 作成した回転行列で画像を回転させるには、以下の記事を参照されたい。pynote.hatenablog.com 概要 画像座標系での回転行列、拡大縮小行列 回転行列を作…

scikit-learn - データセットを学習データとテストデータに分割する。

概要 データセットを学習データ及びテストデータに分割する scikit-learn の関数 train_test_split() について紹介する。 概要 train_test_split() 引数 返り値 基本的な使い方 分割する割合または数を指定する。 分割する配列を指定する。 サンプルコード …

数学 - 四元数 (クォータニオン) の定義

概要 四元数 (クォータニオン) の定義および性質について紹介する。 概要 四元数の表記法 4つの実数の順序対で表す方法 実数と3次元実ベクトルの順序対で表す方法 基底 で表す方法 以下の流れ 順序対による定義 加法 スカラー倍 乗法 四元数は実数の拡張 等…

Keras 実装で学ぶ YOLOv3 - その1 YOLOv3 ネットワークの概要とその実装

概要 YOLOv3 の仕組みについて、Keras 実装の keras-yolo3 をベースに説明する。 概要 ネットワークの構造 YOLOv3 ネットワーク Darknet-53 ネットワーク ネットワークの実装 必要なモジュールを import する。 utils.compose() について 1つの畳み込み層 Da…

Python - 関数の合成

概要 関数のリストを引数にとり、合成関数を作成する関数を作成する。例: 概要 試した環境 関数の合成 Python による実装 functools.reduce() function composition の実装例 iterable の要素を任意の引数をとる関数に対応させる。 参考

OpenCV - エッジの検出、微分フィルタ

概要 エッジ検出の理論及び OpenCV のコードについて 概要 試した環境 エッジ検出とは 微分 水平方向の微分フィルタ 垂直方向の微分フィルタ Prewitt フィルタ Sobel フィルタ 参考