Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】A 3x3 median cut my OCR errors from 11 to 2, then broke a half-size scan

2026年11月05日に「Dev.to」が公開したITニュース「A 3x3 median cut my OCR errors from 11 to 2, then broke a half-size scan」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

OCR処理の画像前処理としてメディアンフィルタは有効だが、最適なカーネルサイズは画像解像度に依存する。元サイズの画像では3x3フィルタがOCRエラーを11個から2個へ大幅削減したが、半分のサイズでは同じフィルタでエラーが4個から28個へ激増した。画像サイズに合わせ、フィルタ設定を調整する重要性が示された。

ITニュース解説

ITシステムを開発する中で、紙の文書をデータとして取り込む「OCR(光学文字認識)」の技術が使われる場面は多い。OCRは、スキャンした画像から文字を読み取り、テキストデータに変換する技術のことだ。しかし、スキャンされた画像は必ずしもきれいな状態ではないため、そのままOCRにかけると文字の認識間違い(エラー)が発生しやすい。そこで、OCRの前に「画像処理」を行うことで、画像の質を向上させ、認識精度を高める工夫がよく行われる。今回のニュース記事は、この画像処理の一つである「メディアンフィルター」という技術がOCRの精度にどのように影響するかを、具体的な実験を通して検証した結果について述べている。

メディアンフィルターとは、画像のノイズ(ざらつきやごみ)を取り除くためによく使われる画像処理の手法だ。このフィルターは、画像のある一点(ピクセル)とその周辺のピクセルを範囲(これを「カーネル」と呼ぶ)として選び、その範囲内のピクセルの色や明るさの値の「中央値」を、中心のピクセルの新しい値として適用する。例えば、黒い文字が書かれた白い紙に小さな黒いごみが点々と付いている場合、メディアンフィルターをかけると、ごみのような孤立した黒い点が周囲の白いピクセルに囲まれていれば、その点も白に変わることが期待できる。逆に、白い紙に黒い文字の線がある場合、周囲に比べて線の幅が十分に広ければ、文字として認識され続ける。このフィルターの「適用範囲」、つまりカーネルのサイズは、例えば「3x3」や「5x5」のように指定され、このサイズによってフィルターの効果が大きく変わる。

今回の実験では、歴史的な書籍のスキャン画像(H. G. ウェルズの「タイムマシン」のページ、幅1516ピクセル)を使用し、オープンソースのOCRエンジン「Tesseract」の認識精度を評価した。評価基準は、正解となるテキストデータと比較して、どのくらい文字の認識間違い(「編集距離」という指標で表現されるエラー数)があるかというものだ。エラー数が少なければ少ないほど、認識精度が高いということになる。

まず、元のサイズのスキャン画像に対して、さまざまなカーネルサイズのメディアンフィルターを適用し、その効果を調べた。結果は驚くべきものだった。フィルターを全く適用しない状態では、1002文字中11文字のエラーが発生し、認識精度は98.9%だった。しかし、カーネルサイズが「3x3」のメディアンフィルターを適用したところ、エラー数はわずか2文字にまで減少し、精度は99.8%に向上した。これは、3x3フィルターが画像のノイズや小さな汚れを効果的に除去し、文字がより鮮明になったためだと考えられる。一方で、カーネルサイズを「5x5」にするとエラーは6文字に増え、「7x7」では14文字、「9x9」では90文字と、フィルターサイズが大きくなるにつれて認識精度は悪化していった。このことから、画像処理フィルターは万能ではなく、適切なサイズを選ばなければ、かえって文字の形を歪めたり、細い線を消してしまったりして、OCRの精度を下げてしまうことがわかる。特に9x9のような大きなカーネルでは、文字のストローク(線の太さ)自体がノイズと判断されて消されてしまうことが起こりうる。

次に、このスキャン画像を半分のサイズ(幅758ピクセル)に縮小し、同じ実験を行った。画像を縮小したのは、解像度が低いスキャン画像や、文字が小さく印刷された文書を模倣するためだ。この半分のサイズになった画像でも、カーネルサイズ3x3のメディアンフィルターが最適な働きをするのだろうか?結果は元のサイズとは大きく異なった。半分のサイズでは、フィルターを全く適用しない状態でのエラー数は4文字だった。興味深いことに、これは元のサイズ(11文字)よりも少ないエラー数だったが、その理由は今回の実験では特定されていない。そして、カーネルサイズ3x3のメディアンフィルターを適用すると、エラー数は一気に28文字にまで増加してしまった。さらに、5x5では142文字、7x7では765文字と、フィルターをかけることで認識精度が大幅に悪化するという結果になった。この半分のサイズのスキャン画像では、どのメディアンフィルターも良い効果をもたらさず、むしろフィルターをかけない状態が最も良い選択肢となった。

これらの結果から、メディアンフィルターの効果は、単に「きれいな画像にする」というだけでなく、画像中の「文字の大きさ」や「解像度」に大きく依存することが強く示唆される。記事では、画像を半分のサイズに縮小して3x3のフィルターを適用することは、元のサイズの画像に6x6のフィルターを適用するのと似た効果を持つ、と推測している。これは、フィルターの適用範囲が、画像が縮小されたことで相対的に文字の大きさに対して大きくなった、と考えることができる。つまり、文字のストローク(線)の太さが、フィルターのカーネルサイズに対して小さすぎると、その文字の線が周囲の背景色と区別されず、フィルターによって消されてしまう可能性が高まる。メディアンフィルターは「局所的な多数決」のようなもので、文字の線がカーネル内で占める割合が小さいと、その線は「ノイズ」とみなされて負けてしまうのだ。

また、OCRの精度には、メディアンフィルターのような前処理だけでなく、どのOCRエンジンを使うかという点も大きく影響する。今回の記事では、Tesseractの他にmacOSに内蔵された認識器や「ImgIng」という別のOCRエンジンも試している。それぞれのエンジンは、画像の傾き(デスキュー)やノイズ除去(デノイジング)といった前処理に対して異なる反応を示した。例えば、ImgIngは画像のわずかな傾きに非常に敏感で、わずか3度の傾きで文字の行順が乱れたり、認識できる文字数が激減したりした。しかし、適切な前処理(ノイズ除去と傾き補正)を行うことで、認識エラーを大幅に減らすことができたという。このことは、OCRシステムを構築する際には、利用するOCRエンジンの特性を理解し、それに合わせた最適な前処理を施すことが重要であることを示している。

最終的に、この実験は「メディアンフィルターのカーネルサイズは、普遍的に最適な定数として使うべきではない」という重要な教訓を与えている。OCRを行う文書の解像度や文字の大きさは様々であり、それに合わせてフィルターのパラメータを調整する必要がある。もしOCR処理を大量に行う予定があるなら、事前に代表的な文書ページを選び、手作業で文字起こしした正解データと照らし合わせながら、今回の実験のように様々なカーネルサイズを試してみて、最も認識精度が高くなる設定を見つけるべきだ。もし、テストページを半分のサイズに縮小して同じ実験をしたときに、最適なカーネルサイズが元のサイズから移動するようなら、それは入力画像のサイズや文字の大きさに応じてフィルター設定を柔軟に変える必要があるというサインだ。システムエンジニアとしてOCRシステムを開発する際には、入力されるデータの多様性を考慮し、固定値に頼らず、適切な画像処理のパラメータを動的に決定する設計が求められる。

関連コンテンツ

関連IT用語

関連ITニュース