解析エンジニアの自動化 blog

コツコツと自動化した方法を残す blog

【 ocr の認識率を上げる画像処理】初心者でも簡単な補間



こんにちは。
仕事の自動化にやりがいと達成感を感じるガッくんです。



この記事の目次



目的


補間はノイズ除去の一種だと思います。

ノイズ除去では文字周りに小さな点が散らばっていました。

しかし、いつも文字の周りにあるとは限りません。
文字の中にも小さな点が入り込む事があります。
この記事では、この入り込んだノイズを除去する処理をまとめます。

今回もノイズ除去と同じ様に PythonOpen CV を使って、すごく簡単に補間をやってみます。

収縮、膨張処理を行うので、画像はあらかじめ二値化されていること。また、処理したい線が白であることが必要です。

やり方としては膨張処理を行ってから収縮処理を行うだけです。

ノイズ除去と逆の順番で処理を行うだけです。

今回は Open CV にもともと収縮処理の後に膨張処理を行うメソッドがあるので、そのメソッドを使いますが、自分で膨張処理の後に収縮処理を行うソースコードを書いても出来ます。

ノイズ除去はリンクの記事でまとめています。

【 ocr の認識率を上げる画像処理】初心者でも簡単なノイズ除去 - 解析エンジニアの自動化 blog

また、膨張処理と収縮処理はリンクの記事でまとめています。
なお、リンクの記事で二値化と白黒反転処理もさせているので、参考にしてみてください。

【 ocr の認識率を上げる画像処理】画像をキレイにする基本〜膨張処理〜 - 解析エンジニアの自動化 blog

【 ocr の認識率を上げる画像処理】画像をキレイにする基本〜収縮処理〜 - 解析エンジニアの自動化 blog



プログラム

ソースコード


# -*- coding: utf-8 -*-
###############################################################################
# ライブラリインポート
###############################################################################
import os                       # os の情報を扱うライブラリ
import pytesseract              # tesseract の python 用ライブラリ
from PIL import Image, ImageOps # 画像処理ライブラリ
import numpy as np              # データ分析用ライブラリ
import cv2                      # OpenCV ライブラリ
 
# 白黒反転関数
def ColorInverter(img):
    img.convert('RGB')
    Inv_img = ImageOps.invert(img)
    return Inv_img
 
# 補間(膨張⇒収縮)
def Interpolation(img):
    kernel = np.ones((2, 2))
    Close_img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
    return Close_img
 
# カレントディレクトリを変更する
os.chdir("C:\\作業\ocr-Preprocessing")
 
# ファイル名定義
Image000 = '000_Crack_On_Const_Image.jpg'
Image005 = '005_Inv_Crack_On_Const_Image.jpg'
Image010 = '010_CleanUp_Crack_On_Const_Image.jpg'
 
# pytesseract に tesseract のパスを通す
pytesseract.tesseract_cmd='C:\Program Files (x86)\Tesseract-OCR\tesseract.exe'
 
#################### 画像の読み込み ####################
img = Image.open(Image000)
 
# 白黒反転
Inv_img = ColorInverter(img)
Inv_img.save(Image005)
 
#################### 画像の読み込み ####################
img = cv2.imread(Image005, 0)
 
# 補間(膨張⇒収縮)
CleanUp_img = Interpolation(img)
cv2.imwrite(Image010, CleanUp_img)



画像処理の結果

図1 は入力画像、図2 は二値化・白黒反転画像、図3 は補間画像です。


図1 入力画像



図2 二値化・白黒反転画像


図3 補間画像



コメント

図1 と図2 の文字の中にある点々のノイズが図3 にはありません。

文字の欠けていた部分が、補間されています。

文字の中に入り込んでいるノイズの除去とも言えます。

この方法はプログラムがノイズを認識しているわけではないので、使い方には注意が必要です。



以上