チェーンコードとは
コンピュータグラフィックスおよび画像処理では、チェーンコードは、白黒またはモノクロの画像でオブジェクトの輪郭をエンコードするために使用されるアルゴリズムです。 結果のコードシーケンスは、オブジェクトが配置されている画像に関連してオブジェクトのアウトラインを描画する方法を記述するか、アルゴリズムが開始されたアウトライン上の位置に関連する方向のコレクションであり、基本的に続いてオブジェクトを再描画できます。 これらのコードは、式に従って正規化した後、別のチェーンコードと比較して、2つのオブジェクトが同一であるかどうかを判断できます。 チェーンコードは、コンピュータビジョンプログラムでオブジェクトを分離したり、画像処理で画像を分割したりするために使用できますが、光学文字認識(OCR)プログラムではより一般的に使用できます。
チェーンコードにはいくつかの確立されたアルゴリズムがありますが、基本的な概念はそれぞれ同じです。 最初に、通常、ラスターイメージをピクセル単位で移動することにより、オブジェクトのエッジを特定します。 位置が特定されると、位置が記録され、周囲のエッジが検出されます。 検出アルゴリズムが時計回りに移動するか反時計回りに移動するかに応じて、現在の位置は元の位置に戻るまでエッジに沿って一方向または他方向に移動します。
現在位置が移動するたびに、チェーンコードに番号が記録されます。 通常、この番号は、オブジェクトのエッジに沿って移動した方向を示します。 たとえば、チェーンコードアルゴリズムが右から左に直線のエッジをたどっている場合、エッジが左にトレースされるたびに、左の数値コードがコードの最後に追加されます。 結果のコードは数字の文字列で、任意の開始点からシーケンスをたどり、各ステップにピクセルを配置すると、オブジェクトの輪郭が再描画されます。
コードを構成する数字の文字列が完成したら、いくつかの異なるアルゴリズムをそれに適用して、他のチェーンコードシーケンスとの比較に役立てることができます。 最初に、最小整数値が決定されるまで開始番号を回転させることにより、番号が正規化されます。 このようにして、各オブジェクトのどこでエンコードが開始されたかに関係なく、同じアウトラインを持つ2つのオブジェクトを比較できます。
チェーンコードアルゴリズムには、さらに複雑なバージョンがあります。 これらには、オブジェクトの輪郭が線で結ばれた一連の座標で記述されるベクトルベースのエンコードが含まれますが、この方法は、詳細な輪郭で使用すると損失が大きくなる可能性があります。 また、ランレングスエンコーディング(RLE)を使用して、非常に大きいまたは複雑なオブジェクトのコードをさらに圧縮し、より効率的な方法で格納できるアルゴリズムのバージョンもあります。