投稿したサンプル画像には比較的強い遠近感があり(表面法線の方向からまっすぐに画像化されていない)、ブロック処理を使用するテンプレートマッチング技術で問題を引き起こす可能性があります。強い遠近法で画像を撮影する必要があると思いますので、最初に行うことは、遠近法投影を削除し、補正された画像(「直線画像」)を生成する画像変換を推定することです。
形状がわかっている場合の透視投影の修正
前処理の最終的な目標は、カラーチャートの背景である灰色の長方形の角を見つけることです。私は、単に一定の値でしきい値処理することから始めました。文献/ウェブには、画像に不均一な照明がある場合にしきい値を設定する方法に関する多くの情報がありますが、可能であれば、照明が比較的均等になるようにイメージング設定を修正してください。

カラーチャートは画面のかなりの部分を占めると想定したため、おそらく画像の最大の連続領域です。多くの白黒のラベル付け関数が存在し(MATLABs bwlabel、IPPs LabelMarkers、OpenCVには外部ライブラリcvblobがあります)、それぞれの個別の接続された領域に独自のインデックスを与えます。ラベル付け後、ヒストグラムを使用して接続コンポーネントの面積を計算し、面積が最大のコンポーネントを選択できます。

通常、コンポーネントに穴がないようにコンポーネントを塗りつぶすことをお勧めします。これにより、エッジピクセルの数が減ります。

エッジ検索演算子を使用して(グラデーションベースの方法を使用しましたが、黒ピクセルに接続された白ピクセルをたどってエッジをトレースすることもできます)、境界に属するピクセルを取得します。

関心のあるオブジェクトは長方形なので、ロバストラインフィッティング(RANSAC)を使用して4つのラインをエッジピクセルに合わせました。新しいラインを見つけた後、見つかったラインに近いポイントをすべて削除しました。これにより、後続のフィット操作でオブジェクトの他のエッジが強制的に返されます。最後に、すべてのエッジが見つかったら、一連の線の間のすべての可能な交差を計算しました。結果のポイントのセットから、画像の外側のすべてのポイントを削除しました。
HH
x =Hバツ
次に、この変換マトリックスを使用して、カラーチャートが表面法線の方向からまっすぐに画像化されるように、元の画像を変換できます。

H
それでもテンプレートマッチングを行いたい場合は、適切なテンプレートマッチング方法を使用できます。画像はすでに修正されているため、メソッドは回転/スケール不変である必要はありません。
