説明の為に、3x3pixで表現される1つのパターンにP0〜P8の番号を振ります。各列の先頭2bitに00を付加し、1バイト/列で表現すると、1パターンは3バイトになります。パターン1の除去パターンであれば、ここで、ある画素を含む3x3pixの状態が次の様になっているとするとこれは、パターン1・非除去パターンの6番目とマッチします。この論理式が成り立つ場合に、パターンマッチと認定できます。簡単なコーディングで済みます。クリック!(Chrome,FireFoxだと0.5秒程度ですが、IE10だと変換に5秒程度掛ります。実装では、変えています。(内容的に変わるものではありません。)Zhang-Suen,NWG,田村で、どの方法が良いかは、入力画像によって変わるので一概には言えません。サンプルを動かすとわかりますが、処理時間に関しては、NWGより、Zhang-Suenの方が早いです。NWGは、Zhang-Suenの改良版であるため若干処理が増えているためです。人間の目で見ると僅かな違いですが、NWGの方が綺麗になっているようです。田村に関しては、サンプルの画像1・画像2では速度が劣りますが、画像3では圧倒的に早いです。文字系では妙なひげが出やすいですが、写真等のエッジ抽出画像に対しては良い結果が出ています。(論文発表順では、【Hilditch(1968)】→【田村(1978)】→【Zhang-Suen(1984)】→【NWG(1989)】)今回実装していませんが、Hilditchの方法は細線化処理の元祖とも言えますが、十分な結果が得られない場合があるらしい。Rosenfeldは、Zhang-Suen,NWG,田村に比べ、かなり処理が重くなるらしい。)実行サンプルはこちらIE10/Chrome/FF/Androidで、確認しています。IE9は、TypedArray(Uint8Array)に対応していないので、削除リストを使う方式に修正する必要があります。IE10でも、Uint8ClampedArray(飽和演算付き8bit)には対応していないので、このサンプルでは、Uint8Arrayを使っています。(Chrome,FFでの、ImageData.dataの型はUint8ClampedArrayです。Workersによるマルチスレッド化を検討する必要があります。IEではImageData.dataの型(CanvasPixelArray)が異なるので、注意が必要です。