image --- マシンビジョン¶
image モジュールは OpenMV マシンビジョンスタックの中核です。すべての描画・フィルタリング・変換・特徴抽出ルーチンが操作対象とするメモリ上のピクセルバッファである Image クラスを公開するとともに、それらのルーチンが返す結果オブジェクト(Blob、Line、Circle、Rect、QRCode、AprilTag、DataMatrix、BarCode など)や、それらを構成するために使用するヘルパークラス(Threshold、Histogram、Statistics、HaarCascade、Similarity、Percentile、Displacement、ImageIO)も提供します。
画像の取得¶
Image を RAM に取り込む方法は 4 通りあります。
カメラセンサーからのライブキャプチャ。
csi.CSI.snapshot()を呼び出すと、次のフレームを直接フレームバッファにキャプチャします。返されるImageはそのバッファを参照します。ファイルから。
Imageコンストラクタにパスを渡します(image.Image("/sd/photo.jpg"))。サポートされているディスク上の形式は BMP、PPM/PGM、JPEG、PNG、および OpenMV のImageIO録画形式です。ndarray から。 float32 の
(h, w)または(h, w, 3)のndarrayをImageコンストラクタに渡します。ピクセルは0.0 -- 255.0からそれぞれ GRAYSCALE または RGB565 の画像にスケーリングされます。ml(または任意のulabパイプライン)からのテンソル出力を描画可能な画像に戻すために使用します。空のバッファ。 指定したサイズとピクセル形式で
Imageを構築すると(image.Image(320, 240, image.RGB565))、ゼロから描画したり、画像演算用のスクラッチサーフェスとして使用したりできます。
ピクセル形式¶
すべての Image は以下のいずれかのピクセル形式を持ちます。この選択により、メモリ・処理コスト・実行可能なアルゴリズムのトレードオフが決まります。画像を構築したりカメラセンサーを設定したりする際の pixformat 引数として BINARY、GRAYSCALE、RGB565、BAYER、YUV422、JPEG、PNG を使用します。
BINARY (1 bpp) -- 1 ピクセルあたり 1 ビット。最小の形式です。しきい値処理やモルフォロジールーチンで内部的に使用されますが、センサーから直接キャプチャされることはほとんどありません。
GRAYSCALE (8 bpp) -- 1 ピクセルあたり 1 バイト(YUV422 の Y チャンネル)。ほとんどのコンピュータビジョンアルゴリズム(AprilTag、エッジ検出、オプティカルフロー)で最も高速な形式です。
RGB565 (16 bpp) -- 1 ピクセルあたり 2 バイト、赤 5 ビット / 緑 6 ビット / 青 5 ビット。デフォルトのカラー形式です。
BAYER (8 bpp) -- センサーから直接出力される生の Bayer パターンのカラーデータ。カスタムなデモザイク処理を行ったり、必要に応じてデベイヤーする前により多くのピクセルを少ないメモリに格納したりするのに便利です。
YUV422 (16 bpp) -- 4:2:2 のクロマサブサンプリングされたカラー、1 ピクセルあたり 2 バイト。フル RGB のコストをかけずにクロマ固有のアルゴリズムを使いたい場合に便利です。
JPEG / PNG -- 圧縮されたバッファ。保存やネットワーク送信に最適です。ピクセルレベルの操作を行うには、まず
Image.to_grayscale()またはImage.to_rgb565()が必要です。
結果の取り扱い¶
Image の検出 / 特徴抽出メソッドは、反復処理したり組み合わせたりできるオブジェクトを返します。Image.find_blobs() の呼び出しは Blob のリストを返し、Image.find_apriltags() の呼び出しは AprilTag のリストを返す、といった具合です。各結果クラスは検出の幾何学的プロパティ(重心、バウンディングボックス、面積、コード値など)を公開しているため、それらを直接利用したり、描画メソッド(Image.draw_rectangle()、Image.draw_string() など)に渡し戻したりできます。
色空間ヘルパー¶
このモジュールは、個々のピクセル値を binary / grayscale / RGB / LAB / YUV の色空間間で変換するための小さな純関数も公開しています。これらは、しきい値やパレットエントリを画像演算に渡す前に Python 内で変換する必要がある場合に便利です。画像全体の変換には Image の to_* メソッドを使用してください。これらのヘルパーをループ内で呼び出すよりもはるかに高速です。
クラス¶
- class Image -- Image オブジェクト
- class ImageIO -- ImageIO オブジェクト
- class HaarCascade -- 特徴ディスクリプタ
- class Similarity -- Similarity オブジェクト
- class Histogram -- Histogram オブジェクト
- class Percentile -- Percentile オブジェクト
- class Threshold -- Threshold オブジェクト
- class Statistics -- Statistics オブジェクト
- class Blob -- Blob オブジェクト
- class Line -- Line オブジェクト
- class Circle -- Circle オブジェクト
- class Rect -- Rectangle オブジェクト
- class QRCode -- QRCode オブジェクト
- class AprilTag -- AprilTag オブジェクト
- class DataMatrix -- DataMatrix オブジェクト
- class BarCode -- BarCode オブジェクト
- class Displacement -- Displacement オブジェクト
- class kptmatch -- キーポイントマッチオブジェクト
関数¶
色空間変換ヘルパー¶
以下の X_to_Y 関数はそれぞれ単一のピクセル値変換を実行します。すべて OpenMV の正規範囲で値を受け取り / 返します。
binary --
int0 -- 1。grayscale --
int0 -- 255。RGB -- 8 ビット整数の
(r, g, b)タプル(各 0 -- 255)。LAB --
(l, a, b)タプル。Lは 0 -- 100、A/Bは -128 -- 127。YUV --
(y, u, v)タプル。Yは 0 -- 255、U/Vは -128 -- 127。
画像全体の変換には Image の to_* メソッドを使用してください。これらのヘルパーをループ内で呼び出すよりもはるかに高速です。
特徴ディスクリプタ¶
- image.HaarCascade(path: str, stages: int = -1) Cascade¶
Haar Cascade を読み込み、
Image.find_features()で使用するためのCascadeハンドルを返します。pathには次のいずれかを指定できます。ファームウェア ROM に組み込まれた 2 つのカスケードのいずれかを読み込むためのリテラル文字列
"frontalface"または"eye"、もしくはOpenMV のカスケード変換ツールで生成されたカスタムの
.cascadeバイナリファイルへのファイルシステムパス。
stagesは検出時に評価するカスケードステージ数を選択します。-1はファイルに格納されているすべてのステージを使用します。この値を小さくすると、誤検出が増える代わりに検出が高速化されます。
- image.load_descriptor(path: str) kp_desc | lbp_desc¶
pathのファイルからディスクリプタを読み込んで返します。ファイル内部のタイプタグによって、どのディスクリプタクラスが再構築されるかが選択されます。ORB キーポイントディスクリプタ --
Image.find_keypoints()の後にimage.save_descriptor()で保存されたもの。LBP ディスクリプタ --
Image.find_lbp()の後にimage.save_descriptor()で保存されたもの。
- image.save_descriptor(descriptor: kp_desc | lbp_desc, path: str) None¶
descriptor(ORB キーポイントまたは LBP ディスクリプタ)を OpenMV ディスクリプタファイル形式でpathのファイルにシリアライズします。同じファイルは後でimage.load_descriptor()を介して再読み込みできます。
- image.match_descriptor(descriptor0, descriptor1, threshold: int = 85, filter_outliers: bool = False) int | kptmatch¶
同じタイプの 2 つのディスクリプタをマッチングします。
2 つの LBP ディスクリプタの場合 -- それらの間の整数のハミング距離を返します(小さいほど近い一致です)。
2 つの ORB キーポイントディスクリプタの場合 -- 一致したキーポイントクラスタを記述する
kptmatchを返します。thresholdを通過する一致がない場合はNoneを返します。
threshold(0 -- 100)は、キーポイントペアを受け入れる際の ORB マッチングの厳格さを設定します。値を小さくすると、弱い最近傍一致を拒否することでマッチングが厳しくなります。filter_outliersは、一致したキーポイントの集合全体にわたって RANSAC 形式の外れ値除去を有効にします。2 つのビュー間に単一の剛体変換が期待される場合に使用してください。一致したキーポイントが複数のオブジェクトにまたがる場合は無効にしてください。
ブロブ幾何ヘルパー¶
これらのヘルパーは(Image.find_blobs() が返す)Blob を受け取り、追加の幾何学的プロパティを必要に応じて計算します。これらは Blob 上ではなくモジュールスコープに存在するため、基本的な find_blobs() の処理パスでは、要求しない限りそのコストを支払いません。
- image.get_solidity(blob: blob) float¶
blobのソリディティ(blob.pixels / convex_hull_area)を返します。浮動小数点数で 0 -- 1。1.0 はブロブが凸包を完全に満たしていることを意味します。
定数¶
ピクセル形式¶
以下のいずれかを Image コンストラクタの pixformat 引数、または csi.CSI.pixformat() に渡します。
- image.BINARY: int¶
1 ピクセルあたり 1 ビットのビットマップ。最小の形式です。しきい値処理やモルフォロジーで内部的に使用され、センサーから直接キャプチャされることはほとんどありません。
- image.GRAYSCALE: int¶
1 ピクセルあたり 8 ビットの grayscale(1 ピクセルあたり 1 バイト)。ほとんどのコンピュータビジョンアルゴリズム(AprilTag、エッジ検出、オプティカルフロー)で最も高速な形式です。
- image.BAYER: int¶
センサーから直接出力される、1 ピクセルあたり 8 ビットの生の Bayer データ。ほとんどの画像処理メソッドは Bayer 画像では利用できません。必要に応じてデベイヤーしたい場合や、より多くのピクセルを少ないメモリに格納したい場合に使用します。
- image.YUV422: int¶
4:2:2 のクロマサブサンプリングされたカラー、1 ピクセルあたり 2 バイト、ピクセルペアごとに
Y1, U, Y2, Vとしてパックされます。一部の画像処理メソッドのみが YUV422 上で直接動作します。
- image.JPEG: int¶
圧縮された JPEG バッファ。ピクセルレベルの操作を行うには、まず
Image.to_grayscale()またはImage.to_rgb565()が必要です。
- image.PNG: int¶
圧縮された PNG バッファ。ピクセルレベルの操作を行うには、まず
Image.to_grayscale()またはImage.to_rgb565()が必要です。
カラーパレット¶
grayscale 画像をカラー化するために、以下のいずれかを Image.to_rainbow()、Image.to_ironbow()、Image.draw_image()(color_palette=)、または csi.CSI.color_palette() に渡します。
- image.PALETTE_DEPTH: int¶
深度画像用パレット。深度センサーサポート付きのビルド(ToF パイプライン -- 例えば OpenMV Cam AE3 や ToF Pmod を取り付けた任意のカメラ)でのみ利用可能です。
- image.PALETTE_EVT_DARK: int¶
暗い背景上で GENX320 イベントカメラのフレームを可視化するためのパレット。
csi.CSI.color_paletteに渡すと、GENX320 ドライバがヒストグラムモードでカラー化された RGB565 フレームを出力するようになります。また、grayscale のイベント画像をカラー化する際にはImage.draw_image()のcolor_palette=に渡します。GENX320 サポート付きのビルド(OpenMV Cam AE3 および GENX320 Pmod)でのみ利用可能です。
- image.PALETTE_EVT_LIGHT: int¶
明るい背景上で GENX320 イベントカメラのフレームを可視化するためのパレット。ディスパッチと利用可能条件は
PALETTE_EVT_DARKと同じです。
スケーリングモード¶
以下のいずれかを Image.draw_image()、Image.scale()、または同様のスケーリングメソッドの hint 引数として渡します。
描画 / draw_image ヒント¶
これらの任意の組み合わせをビット OR で結合し、Image.draw_image() の hint 引数として渡します。
- image.EXTRACT_RGB_CHANNEL_FIRST: int¶
Image.draw_image()を介して RGB チャンネルを抽出する際に、スケーリングの 前 にチャンネルを抽出します。このヒントがない場合、チャンネルはスケーリング後に抽出されます。
- image.APPLY_COLOR_PALETTE_FIRST: int¶
Image.draw_image()を介してカラーパレットを適用する際に、スケーリングの 前 にパレットを適用します。このヒントがない場合、パレットはスケーリング後に適用されます。
JPEG サブサンプリング¶
JPEG を書き込む際に、以下のいずれかを Image.to_jpeg()、Image.compress()、または Image.save() の subsampling 引数として渡します。
テンプレートマッチング¶
以下のいずれかを Image.find_template() の search 引数として渡します。
エッジ検出¶
以下のいずれかを Image.find_edges() の algorithm 引数として渡します。
- image.EDGE_SIMPLE: int¶
しきい値処理されたハイパスフィルタのエッジ検出器。高速ですが、
EDGE_CANNYよりも太くノイズの多いエッジを生成します。
ORB コーナー検出器¶
以下のいずれかを Image.find_keypoints() の corner_detector 引数として渡します。
- image.CORNER_FAST: int¶
FAST コーナー検出器。
CORNER_AGASTよりも高速ですが精度は劣ります。
- image.CORNER_AGAST: int¶
AGAST コーナー検出器。
CORNER_FASTよりも低速ですが、より安定したキーポイントを生成します。
AprilTag ファミリー¶
以下の任意の組み合わせをビット OR で結合し、Image.find_apriltags() の families 引数として渡します。各ファミリーはファームウェアの独自のビルドオプションによって制御されます。サポートされていないファミリーは、常にゼロになるのではなく実行時に存在しません。
バーコードシンボル体系¶
Image.find_barcodes() が返すエントリについて BarCode.type で報告される値です。
- image.PDF417: int¶
PDF417 2D スタックバーコード。この定数は完全性のために存在しますが、バーコードデコーダは現在 PDF417 を実装していません。
Image.find_barcodes()はこのタイプの検出結果を返しません。