一般的な問題(フォントマッチング)にアプローチするには、シンボリックと統計の2つの基本的な方法があります。良い解決策はおそらく両方を何らかの方法で組み合わせるでしょう。
象徴的なアプローチでは、問題に関する知識を直接使用します。たとえば、(インテリジェントな人間として)フォントの特性を明らかにするために使用するもののリストを作成できます。identifontが使用する種類の質問。このアプローチは、さまざまなプロパティ(たとえば、ストローク幅、特定のループが閉じているかどうか、セリフの存在など)を検出するのに十分スマートなルーチンと、yes / no / unsureを配置する決定木(または「ルールエンジン」)を作成することを意味します。一緒に答えて、答えを思いつきます。
統計的アプローチはあなたが考えていたもののように聞こえます、そしておそらくフォントがどのように機能するかです。ここでのアイデアは、いくつかの一般的なプロパティを見つけ、それらを重みとして使用して「最良の」選択を見つけることです。たとえば、フォントがたくさんある場合は、ニューラルネットをトレーニングできます(入力はサンプル解像度のピクセルです)。そこでは、ネットが「どのように」決定するかを知る必要はありません。十分なトレーニングデータがあれば、それを行う方法が見つかります。または、すべての暗いピクセルの合計を確認することもできます。これにより、上記のパーセンテージと同様の結果が得られる可能性があります。
これは単純に聞こえますが、多くの場合、必要なすべての方法で違いをうまく示す単純な統計測定値を見つけるのはそれほど簡単ではありません。
したがって、2つの間に大きな中間点があります。最初のグループからいくつかのアイデアを引き出すことができれば、2番目のグループのアプローチをはるかに効率的にすることができるという考えです。最も単純なニューラルネットアプローチは「オールインワン」(計算と決定を含む)ですが、それらを分離することができます。したがって、ネットに大量のピクセルを与えるだけでなく、より「意味のある」入力を与えることができます。これは、異なるフォント間での検出に役立つことがわかっていることです。ストロークの幅や、キャラクターの「穴」の数などです。また、スマートを追加して、結果を混乱させる可能性のあるものを削除することもできます。たとえば、同じ高さに事前スケーリングします(フルフォントが設定されている場合は、小文字の「m」の高さになるようにすべてをスケーリングできます。 、は一定です)。
フーリエ記述子は、何かの「外形」を特徴付ける方法であるため、上記で説明したように、統計的アプローチへの入力として使用できます。この例では、フーリエ記述子を指定すると、下のGのセリフの「スパイク」が検出されるため、左側のGとは非常に異なることがわかります。しかし、彼らはストローク幅についてはあまり気にせず、スケール(倍率/ズーム)についてはまったく気にしません(これは良いことでも悪いことでもあります-異なるサイズのランダムな文字が与えられている場合は、敏感になりたくありませんサイズですが、アルファベット全体の標準の「m」に正規化した場合は、それを含める必要があります)。
他のアイデアは、2d相互相関(正規化された相関の最大値により、2つのものがどれほど類似しているかについてのアイデアが得られます)、または単に両方の文字でピクセルのどの部分が共通であるかを確認することです。
コメントが言うように、これは大きな問題です(そして私は専門家ではありません-上記は興味のある傍観者であることからの単なるランダムなでたらめです)。
しかし、最終的にあなたの質問に答えるために、あなたが持っているものがアウトラインであるならば、フーリエ記述子は始めるのに良い場所でしょう。それは「重さ」ではなく形に焦点を合わせているので、私はそれを輪郭で囲まれた総面積のようなものと組み合わせます。次に、それらを計算するためのコードを記述し、アルファベットの例で得られる数値を確認します。一部の文字を区別しているように見えても、他の文字を区別していないように見える場合は、それらの場合に役立つ他の測定値を探してください。かなりの数のアプローチを組み合わせて、高速で信頼性の高いものを取得することになります。
または、単純なものが必要な場合は、高さ、幅、輪郭の「内側」のピクセルの総数、垂直線または水平線に沿って交差するストローク数など、測定しやすい値を組み合わせて使用してみてください。フーリエ変換などに関連する数学に慣れていない場合は、目的によっては「十分に良い」ものが得られる可能性があります。