スポンサーリンク

【Python】画像のピーク検出。〜 numpy行列の射影投影をplt描写 〜

Python
スポンサーリンク

今回の記事は画像なのピーク値、正確に言うと画像の白でない部分と白以外の部分の充当率を軸方向に射影投影し、ピークちを検出します。(ピーク値と呼んでいいのかは謎笑)

必要なスキルとしては、画像のnumpy配列としての読み込み、ピークち検出のアルゴリズム、plt描写と比較的簡単になっております。

機械学習などで文字判別を行う際に文字感覚が狭すぎると困るなどの場合があると思われるので、そういった際に使用してみてください。

完成図は下記のようになります。

ではメインの早速メインの記事に進ん行きます。

以下の環境はdocker に構築したpythonの環境です。イメージはtensorflowベースのものを利用しております。詳しくはリンクより環境構築手順を確認ください。pythonバージョンは3.6.5です。

スポンサーリンク

画像のピーク検出。〜 numpy行列の射影投影をplt描写 〜

まずは画像の読み込みと白黒画像への変換を行います。

import cv2
import numpy as np
import matplotlib.pyplot as plt

#対象の画像読み込み
img = cv2.imread("./test_cv.png")
print(img.shape)

gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#print(img.shape)
ret, bw_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_OTSU)

height, width = bw_img.shape

必要なライブラリのインストールと、画像の読みこみを行なっております。画像読み込みはopencvで読み込んでおりますが、ここはPILとかでも代用可能。
流れとしては「画像読み込み」→「グレースケール化」→「白黒化」です。

次にアルゴリズムによる白と黒の判別を行なっていきます。

#射影投射###########################################
array_V = np.zeros(width)
#画像を横から縦に回す
for i in range(width):
    total_count = 0
    for j in range(height):
        temp_pixVal = bw_img[j, i]
        if temp_pixVal == 0:
            total_count += 1
    array_V[i] = total_count
#図を写す
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
x_axis = np.arange(width)
ax.bar(x_axis, array_V)
###################################################

array_Vという配列に画像を回していきどのまでの画像が入っているかを確認していきます。

まとめると下記のようなコードになっております。

import cv2
import numpy as np
import matplotlib.pyplot as plt

#対象の画像読み込み
img = cv2.imread("./test_cv.png")
print(img.shape)

gray_img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#print(img.shape)
ret, bw_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_OTSU)

height, width = bw_img.shape

#射影投射###########################################
array_V = np.zeros(width)
#画像を横から縦に回す
for i in range(width):
    total_count = 0
    for j in range(height):
        temp_pixVal = bw_img[j, i]
        if temp_pixVal == 0:
            total_count += 1
    array_V[i] = total_count
#図を写す
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
x_axis = np.arange(width)
ax.bar(x_axis, array_V)
###################################################

これで上記のような結果が得られると思います。

今回の記事は以上です。この射影投影を用いた技術で画像の文字間隔を拡張させる記事を記載しております。きになる方はそちらの記事もご参照ください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Python
スポンサーリンク
スポンサーリンク

コメント

  1. […] こちら詳しい解説はこちらの記事で解説しているのできになる方はご参照ください。 […]

タイトルとURLをコピーしました