【Python・OpenCV】イタリック体の自動文字補正(文字の傾き補正・Italic補正)

※このサイトの記事内では広告を掲載している場合があります。

今回は、PythonのOpenCVやアフィン変換を用いて、イタリック体の文字の縦画を自動的に垂直に補正する方法を解説していきます。

ローマン体を補正する「slant補正」に関しては次の記事が参考になると思います。

参考:【Python・OpenCV】傾斜文字画像の画角を自動で補正をする方法(slant補正)
参考:【Python・OpenCV】斜体文字画像の画角を補正する方法(アフィン変換・slant補正・傾斜補正)

目的とサンプル

本記事の目的は、イタリック体(左のように文字が斜めに傾いていること)文字画像の縦画を垂直に自動的に補正することです。

下の表は、元画像に対して、角度推定を行い、文字画像を補正した時のサンプルです。

各画像に対して各々の角度を自動推定しています。機械学習において、文字の正規化は文字認識率の向上につながることが考えられています。

元画像補正後補正角度
10度
9度
0度
10度
12度
12度

文字の角度推定の方法

参考論文:傾斜文字認識のための正規化方法

画像引用

イタリック体の文字の自動補正には、参考にした論文での手法がそのまま使えます。

まずは、方向ごとのヒストグラムを作成します。その後、縦方向に対する投影値の2乗の値の合計と、横幅との比が最も大きくなる時の角度を文字の補正角度とします。具体的な例は下のようになります。

どちらの画像もある角度で傾けた後の画像だと思ってください。

Italic
ratio=(1^1+3^2+5^2+3^2+1^1)/5=9
Italic
ratio = (2^2+7^2+2^2)/3=19

実装

ここからは具体的にサンプルコードを紹介していきます。

今回用いた画像ファイルを置いておきます。画像のみで安全ですよ。怖い場合には各自で文字画像を準備してくださいね。

画像の傾き補正

ここでの「src」と「dest」の決定方法を説明します。

「src」では、変換前の3つの座標(A, B, C)を設定します。そして、イタリック補正を行うときの変換後の座標を(A’, B’, C’)とすると次のようになります。

・ A(0, 0) → A'(0, 0)
・ B(0, 1) → B'(sin(theta), 1)
・ C(1, 0) → C'(1, 1)

Italic補正

比を求める

この関数では、ある角度で補正が行われた後の画像を受け取り、その画像に対する比と必要な部分を切り取った画像を返り値としています。

比の求め方に関してはすでに解説した通りです。

必要な部分の切り取り方法は、下記の画像の様に、黒画素が存在する最小と最大のインデックス番号をx軸とy軸でそれぞれ取得します。

ex)np.min(np.where(x_dot != 0))==2, np.max(np.where(x_dot != 0))==6

Italic

メイン関数

全体のコード

最後にコメントなしの全体のコードを載せます。

出力結果

結果についてです。

最初の1枚目が元画像で、2枚目が補正後の画像です。また、「theta」と書かれた2行目が、画像を傾けた実際の角度です。

この結果を見ると、文字の縦画が垂直に補正されており、目的通りイタリック体の補正ができていることが分かります。

まとめ

今回は、イタリック体で書かれた文字画像の画角をアフィン変換を用いて自動補正する方法を記述しました。

過去の記事では、ローマン体での自動補正を行う「slant補正」ついても解説しています。よろしければそちらも参考にしてみてください。

参考:【Python・OpenCV】傾斜文字画像の画角を自動で補正をする方法(slant補正)
参考:【Python・OpenCV】斜体文字画像の画角を補正する方法(アフィン変換・slant補正・Italic補正)

こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。

プログラミングを学びたい人におすすめのスクール5選!

パソコン操作にお困りではありませんか?

ExcelやWordなど、基本的なソフトの使い方がいまいちわからないという方には、「PCHack」という講座をオススメしています。スクールの中でもコストパフォーマンスに優れ、オンラインなのでどこでも好きな時間に学習できます。

3万円ほどでPC初心者を脱出したい方は参考にしてください。

【PC初心者必見!】パソコンの勉強方法が分からないならPCHack講座がオススメ!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA