【Python・OpenCV】傾斜文字画像の画角を自動で補正をする方法(slant補正)

今回は、PythonのOpenCVを用いて、文字画像の角度推定を行い、画角を自動的に補正する方法を解説していきます。この補正のことを「slant補正」といいます。

過去の記事では、 slant補正以外にも、イタリック体に対応する傾斜補正の方法についても解説しています。よろしければそちらも参考にしてみてください。

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

プログラミングでお悩みではありませんか?

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

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

サンプル

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

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

元画像出力結果補正角度
15度
0度
3度
0度
10度
11度

文字の角度推定の方法

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

画像引用

こちらの論文での文字の角度補正の方法を参考にアレンジしました。

文字の推定方法は、上の画像のように、方向ごとのヒストグラムを作成します。画像では、横画がまっすぐで、縦画が傾いています。しかし、日本人が書く文字は、次の画像のように右肩上がりの文字のため、横画に傾きがあります。

ex)漢字の「一」

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

比 = (各行の投影値の2乗の合計) / (文字の高さの幅)

ratio = (3^2 + 3^2 + 3^2) / 3 = 9
ratio = 7^2 / 1 = 49

各画像に対して求められた比は「9」と「49」でした。

左側の画像に対して、右側の方が比の値が大きいため、この時に補正した角度を暫定の補正角度とします。

角度のレンジは0度から15度とし、一連の処理を繰り返すことで、最も比の値が大きかった角度を最終的な補正角度と設定します。このような処理を「slant補正」といいます。

実装

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

今回用いた画像ファイルを置いておきます。画像のみで安全ですよ。

画像の傾き補正

文字を傾けるためには、画像全体を画像内のある座標を(x, y)、変換後の座標を(x’, y’)としたときに、以下の行列で変換する必要があります。

$$\begin{bmatrix}x’ \\y’ \\ 1 \end {bmatrix}=\begin{bmatrix}1 &0 &0\\\tan\theta &1 &0\\0 &0 &1\end{bmatrix}\begin{bmatrix}x \\y\\ 1 \end{bmatrix}$$

プログラム中の「src」と「dest」の決定方法を説明します。

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

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

比を求める

関数名いかれてますが気にしないでください。

画像の切り取りで行っていることは、配列「x_dot」と「y_dot」に0以外の何かしらの値だった場合に文字部分と判断するようにしています。

下の画像の場合、np.min(np.where(x_dot != 0)) == 1となります。

メイン関数

全体のコード

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

出力結果

結果はこんな感じです。

画像の1枚目が元画像で、2枚目は、slant補正を行った画像です。「theta」には、slant補正が行われたときの角度を示しています。

文字の横画が水平になっているのが分かると思います。

まとめ

最後までお読みいただきありがとうございます。

今回は、傾斜文字の画角をアフィン変換を用いて自動補正する方法を記述しました。

過去の記事では、slant補正以外にも、イタリック体に対応する傾斜補正の方法についても解説しています。よろしければそちらも参考にしてみてください。

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

プログラミングでお悩みではありませんか?

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

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

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

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

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

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

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA