画像処理

イントロダクション

画像処理技術の主な目標は2つあります:

  1. 画像を人間の知覚により向上させる
  2. 画像に含まれる情報を顕著にし、または抽出しやすくする

コンピュータビジョンの文脈では、2番目のポイントのみが重要であることを心に留めておくべきです。 画像を人間の知覚のために準備することはコンピュータビジョンの一部ではなく、それは情報の視覚化の一部です。 通常、機械ビジョンのアプリケーションでは、これはプログラムの最後にしか適用されず、通常は問題になりません。

機械ビジョンエンジニアにとっての最初で最も重要なアドバイスは、情報を抽出する目的で設計された画像変換を避けることです。興味深くないだけでなく、アルゴリズムにとっては非常に有害である変換の最も注目すべき例は次のとおりです:

  • JPEG圧縮(人間の目には見えないアーティファクトを作成しますが、アルゴリズムにとっては混乱を招きます)
  • CIE LabおよびCIE XYZカラースペース(人間の知覚のために特別に設計されています)
  • エッジ強調フィルター(「見かけの鮮明さ」の向上のみ)
  • エッジ検出の前に実行される画像のしきい値処理(サブピクセルの精度を妨げる)

情報抽出を本当に向上させる画像処理操作の例は次のとおりです:

  • ガウシアン画像平滑化(ノイズを取り除きながらローカルな特徴に関する情報を保持)
  • 画像モルフォロジー(不要な詳細を取り除くことができます)
  • 勾配およびハイパスフィルター(オブジェクトの輪郭に関する情報を強調)
  • HSVなどの基本的なカラースペース変換(色相と明るさに関する情報を分離)
  • ピクセルごとの画像合成(例:基準画像に対する画像の違いを強調できる)

対象領域

Aurora Visionが提供する画像処理ツールには、特別なinRoi入力(Regionタイプ)があり、操作の空間範囲を制限できます。領域は任意の形状である可能性があります。

入力画像とinRoi

inRoi内で実行された操作の結果

注意:

  • inRoi領域の外側の出力画像は黒くなります。
  • inRoiでピクセルを変更し、それを外部にコピーしたい場合は、ComposeImagesフィルタを使用できます。
  • inRoiのデフォルト値はAutoで、画像全体が処理されます。
  • inRoiを使用することで処理を大幅に高速化できますが、注意して使用する必要があります。性能の向上は、特に画像全体(Auto)を処理する場合に比べて、inRoiの面積に比例しない場合があります。これは、inRoiを使用しない場合により多くのSSE最適化が可能なためです。

一部のフィルタには、inSourceRoiと呼ばれる第二の対象領域があります。 inRoiは出力画像に書き込まれるピクセルの範囲を定義するのに対し、inSourceRoiパラメータは入力画像から読み取ることができるピクセルの範囲を定義します。

画像境界処理

特にImage Local Transformsカテゴリの画像処理フィルタの中には、ピクセルのローカルな近傍からの情報を使用するものがあります。これにより、画像の境界付近ではすべての入力データが利用できないという問題が発生します。ツールで適用される方針は次のとおりです:

  • ユーザーが明示的に定義しない限り、画像の外部の特定の値を仮定しない。
  • 部分的な情報しか利用できない場合、何も検出せず、何かを検出するよりも優れています。

特に、ローカルな近傍からの情報を使用するフィルタは、画像の境界近くでより小さな(切り取られた)近傍を使用します。これは、結果に依存する場合に考慮する必要があるものです。たとえば、スムージングフィルタの結果は画像の境界で最大2倍滑らかでない可能性があります(近傍サイズの半分のため)、一方でモルフォロジカルフィルタの結果は画像の境界に「貼り付く」可能性があります。最高の信頼性が必要な場合、一般的なルールは:不完全な情報から来る画像処理結果を無視するために適切な対象領域を使用することです(画像の境界近く)。

ツールセット

画像コンビネータ

Image Combinatorsカテゴリのフィルタは、2つの画像を取り、ピクセルごとの変換を行って単一の画像にします。これは、例えば画像間の違いを強調したり、輝度を正規化したりするために使用できます。以下はその例です:

反射が強調された入力画像

反射の画像
(キャリブレーション)

inScale = 128を使用して
DivideImagesを適用
(inRoiが使用されました)

画像の平滑化

画像の平滑化フィルタ(Image Local Transformsカテゴリにあります)の主な目的は ノイズの除去です。異なるトレードオフを持ついくつかの異なる方法があります。以下に、三つのメソッドを示します:

  1. 平均平滑化 – 単に長方形の近傍から平均ピクセル値を取得します。最も高速なメソッドです。
  2. メディアン平滑化 – 単に長方形の近傍から中央値のピクセル値を取得します。エッジを保持しますが、比較的遅いです。
  3. ガウス平滑化 – ガウス係数を重みとしてピクセル値の加重平均を計算します。その利点は等方性と、小さなカーネルに対する適度な速度です。

ノイズのある入力画像

SmoothImage_Meanを適用

SmoothImage_Gaussを適用

SmoothImage_Medianを適用

画像モルフォロジー

基本的な形態学の演算子 – DilateImage および ErodeImage – は、入力画像を変換します。 これは、ローカル近傍から最大または最小のピクセル値を選択します。他の形態学演算子は、これらの基本演算を組み合わせてより複雑なタスクを実行します。以下は、OpenImage フィルタを使用して 画像からソルトアンドペッパーノイズを取り除く例です:

ソルトアンドペッパーノイズのある入力画像

OpenImageを適用

勾配解析

画像勾配は、局所的な輝度変化の方向と強度(大きさ)を記述するベクトルです。 勾配は多くのコンピュータビジョンツールで使用されます。例えば、物体輪郭検出、エッジベースのテンプレートマッチング、およびバーコードおよびDataMatrix検出などです。

使用可能なフィルタ:

  • GradientImage – 符号付き値の2チャンネル画像を生成し、各ピクセルは勾配ベクトルを示します。
  • GradientMagnitudeImage – 勾配の大きさ、つまりベクトルの長さ(またはその近似)を示す単一チャンネル画像を生成します。
  • GradientDirAndPresenceImage – 勾配の方向を1から255の範囲にマップした単一チャンネル画像を生成します。0は有意な勾配がないことを意味します。

入力画像

GradientMagnitudeImageの結果

GradientDirAndPresenceImageの結果

診断用の出力
GradientImageによる、色相コード化された方向。

空間変換

空間変換は、画像のピクセルの位置を変更しますが、値は変更しません。以下はいくつかの基本的な操作のサンプル結果です:

MirrorImageの結果

RotateImageの結果

ShearImageの結果

DownsampleImageの結果

TransposeImageの結果

TranslateImageの結果

CropImageの結果

UncropImageCropImage
結果に適用した結果。

また、2次元のビジョン問題を1.5次元の問題に変換することができる興味深い空間変換ツールもあります。これはさらなる処理に非常に役立ちます:

入力画像とパス

ImageAlongPathの結果

空間変換マップ

空間変換ツールは、各ピクセルに対して次の2つのステップから成るタスクを実行します:

  1. 目的の座標を計算する(補間が使用される場合はいくつかの係数も)
  2. ピクセルの値をコピーする

多くの場合、変換は一定です。例えば、常に同じ角度で画像を回転させているかもしれません。このような場合、最初のステップ(座標と係数を計算する)は、プログラムのメインループの前に1度だけ実行できます。Aurora Visionはその目的のために、Image Spatial Transforms Maps フィルタのカテゴリを提供しています。変換を事前に計算できる場合は、それを SpatialMap タイプに格納し、メインループでは RemapImage フィルタのみを実行する必要があります。このアプローチは、標準の空間変換ツールを使用するよりもはるかに高速です。

SpatialMap タイプは、指定された幾何学的変換が適用された後の画像の位置と対応する位置のマップです。

さらに、Image Spatial Transforms Maps カテゴリには、物理オブジェクトの曲率を平坦にするために使用できるいくつかのフィルタが用意されています。これらは基本的な3Dオブジェクトをモデル化します:

  1. シリンダー (CreateCylinderMap) – 例:ボトルのラベルの平坦化。
  2. スフィア (CreateSphereMap) – 例:電球からラベルを読む。
  3. ボックス (CreatePerspectiveMap_Points または CreatePerspectiveMap_Path) – 例:ボックスからラベルを読む。
  4. 円形オブジェクト(極座標変換) (CreateImagePolarTransformMap) - 例:DVDディスクの中心に巻き付いたラベルを読む。

CreateSphereMap および RemapImage を使用して球状オブジェクトのリマッピングの例。リマッピング前と後の画像。

さらに、ConvertMatrixMapsToSpatialMap を使用してカスタム空間マップを作成できます。

ConvertMatrixMapsToSpatialMap で作成したカスタム画像変換の例。リマッピング前と後の画像。

画像の閾値処理

Image Thresholding フィルタのタスクは、画像のピクセル値を前景(白)または背景(黒)に分類することです。基本的なフィルタ ThresholdImage および ThresholdToRegion は、ピクセル値の単純な範囲を使用します。 ピクセル値が範囲に属する場合、ピクセル値は前景として分類されます。 ThresholdImage フィルタは単に画像を別の画像に変換しますが、ThresholdToRegion フィルタは 前景ピクセルに対応するregionを作成します。 その他の利用可能なフィルタでは、より高度な分類が可能です:

均一でない光の入った入力画像

ThresholdImageの結果
バーは認識できません

ThresholdImage_Dynamicの結果
バーが正確です

さらに、自動的な閾値値選択のためのいくつかのメソッドを実装した追加のフィルタ SelectThresholdValue もあります。 ただし、すべてのケースで機能する普遍的なメソッドはなく、特定のケースにうまく適合するメソッドでも特殊なケースで失敗する可能性があるため、非常に注意して使用する必要があります。

画像ピクセルの分析

信頼性のある色の分析によるオブジェクト検出が必要な場合、有用なフィルターが2つあります:ColorDistance および ColorDistanceImage。これらのフィルターはRGB空間で色を比較しますが、内部的には明るさと色度の分析を分離します。この分離は非常に重要です。なぜなら、多くの場合、明るさの変動が色度の変動よりもはるかに大きいからです。後者により(inChromaAmountの高い値)、不均一な照明の存在下でも指定された色を持つ領域を検出できます。

不均一な光環境の入力画像。

ColorDistanceImageの結果
赤色でinChromaAmount = 1.0。
暗い領域は色の距離が低いことを示します。

閾値処理の結果、地球上の赤い点の位置が明らかになります。

画像特徴

画像特徴 は、すでにコンピュータビジョンに非常に近い画像処理ツールのカテゴリです。ピクセル情報をシンプルで高次元のデータ構造に変換します。特に注目すべき例には、ImageLocalMaxima(明るさが局所的に最も高い点を見つける)、ImageProjection(列または行のピクセル値の合計からプロファイルを作成する)、ImageAverage(領域全体のピクセル値の平均を取る)があります。以下はその例です:

セグメンテーションするための数字が含まれた入力画像。

CloseImageの前処理の結果。

SmoothImage_GaussおよびImageLocalMaximaを適用して
抽出された数字の位置。

垂直投影のプロファイルにより、
数字の領域とそれらの間の境界が明らかになります。