Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ

Python OpenCV 365日学習プラン、消しゴムで画像フィールドに入力します。このブログはこのシリーズの50番目です。
この一連の記事のナビゲーションリファレンス:https//blog.csdn.net/hihell/category_10688961.html

先に学ぶ

ヒストグラムの一部は前のブログで学習したので、自分で確認できます。
Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ
ヒストグラムは、画像処理プロセスの分析ツールであり、グレーレベルの観点からグレー値または統計的画像特徴を使用します。

統計的な観点から、ヒストグラムは画像の各グレーレベルが表示される回数をカウントし、ヒストグラムの横軸はピクセルのグレーレベル、縦軸はグレーレベルの数です。

5x5グレースケール画像がある場合、つまり、各ピクセル値のヒストグラムについて統計を行います。
Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ
Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ
上記の2つの図はヒストグラム統計に関するものですが、ヒストグラムは表ではなくグラフであるため、上記のデータを描画することでヒストグラムを取得できます。
ヒストグラムのx軸は、8ビットビットマップの256のグレーレベルを表し、y軸は、対応するグレーレベルのピクセル形式を表します。

これに基づいて、正規化ヒストグラムと呼ばれる知識を追加する必要があります。多くの場合、ヒストグラムのx軸はグレーレベルを表しますが、y軸はグレーレベルの頻度を表します。具体的には、数値です。次のように回/合計数の、例えば、上記の表を改訂することができます
Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ
ヒストグラム概念を理解した後、いくつかの新しい単語が次への注意を払うする必要があります、DIMSBINSRANGE

  • DIMS:現在の知識に基づくと、灰色の値は1つだけです。これは、ヒストグラムの収集時に収集されたパラメーターの数を表す1です。
  • RANGE:統計的グレースケール範囲、グレースケール画像の場合、範囲は[0,255];
  • BINS:パラメータサブレベルの数、おおよその意味は、現在のグレーレベルをグループ化することとして理解でき、通常はデフォルトのままです。

以下のためにBINS精巧な、グレースケール画像に関するパラメータ、階調範囲である[0,255]ことをBINSデフォルトは16階調を16に分割するように設定されているによると、256ですBINS

ヒストグラムの描画

学習の旅の25日目であるPythonOpenCV画像処理の画像ヒストグラム。このブログでは、ヒストグラムの描画についてすでに説明しているので、全体を確認しましょう。

plt.hist()ヒストグラムを作成するためのコード関数に基づいて、関数プロトタイプは次のようになります。plt.hist(X,BINS)

次のコードを実行し、画像を探すときに、色の分布が比較的均一で、白や黒が特に広い領域を占めていないことを確認してください。そうしないと、得られたヒストグラム効果が明確になりません。

import cv2 as cv
import matplotlib.pyplot as plt

src = cv.imread("./2.png", 0)
cv.imshow("src", src)

plt.hist(src.ravel(), 256)
plt.show()

cv.waitKey()
cv.destroyAllWindows()

Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ
コードはノートsrc.ravel()関数でもあり、図1に示すように、2次元配列を1次元配列に縮小するための関数である。

Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ
場合はBINS、結果は16に設定されている以下の通りでした。
Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ

PythonOpenCVでのヒストグラム描画

OpenCVcv.calcHist関数は画像のヒストグラムを計算しますが、この論文の焦点は関数の戻り値を説明しています。

import cv2 as cv
import matplotlib.pyplot as plt

src = cv.imread("./2.png", 0)
cv.imshow("src", src)
hist = cv.calcHist([src], [0], None, [256], [0, 255])
print(hist)
print(len(hist))
cv.waitKey()
cv.destroyAllWindows()

hist 出力形式は次のとおりです。

# 省略一部分输出数据
……
 [ 115.]
 [ 122.]
 [ 115.]
 [ 142.]
 [ 148.]
 [ 152.]
 [  61.]
 [   6.]
 [   0.]]
256

hist256桁の配列の最終的な戻り値を確認できます。配列内の要素は、各グレーレベル統計の数です。後に
取得するhistと、それplt.plotを引き出すように機能することができます。

import cv2 as cv
import matplotlib.pyplot as plt

src = cv.imread("./2.png", 0)
cv.imshow("src", src)
ret_hist = cv.calcHist([src], [0], None, [256], [0, 255])
print(ret_hist)
print(len(ret_hist))
plt.plot(ret_hist)
plt.show()
cv.waitKey()
cv.destroyAllWindows()

Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ

マスク描画ヒストグラム

次に、マスク描画ヒストグラムについて説明します。マスクは、画像の一部を選択して描画するためのものです。マスクの白い領域は透明で画像を表示でき、黒い領域は不透明で画像を表示できません。

マスキングの原理は、以前のブログを読むことでも学ぶことができます。要約すると、次の2つの文

  1. マスクの黒の位置に対応する元の画像の部分は表示されなくなり、グレー値は0に設定されます。
  2. マスクの白い位置に対応する元の画像の部分は、元の値を保持します。
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
src = cv.imread("./2.png", 0)
cv.imshow("src", src)
print(src.shape)
mask = np.zeros(src.shape, np.uint8)
# 前面是行,后面是列
mask[10:150, 40: 200] = 255
mask_img = cv.bitwise_and(src, mask)
cv.imshow("mask", mask_img)
ret_hist = cv.calcHist([src], [0], None, [256], [0, 255])
mask_hist = cv.calcHist([src], [0], mask, [256], [0, 255])

plt.plot(ret_hist)
plt.plot(mask_hist)
plt.show()
cv.waitKey()
cv.destroyAllWindows()

Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ

ヒストグラム均等化に関する補足知識

ヒストグラム均等化により、画像に可能なすべてのグレーレベルを設定し、ピクセル値のグレーレベルを均等に分散させることができます。具体的な手順は次のとおりです。

  1. 累積ヒストグラムを計算する
  2. 累積ヒストグラムを変換する

次のグレースケールマトリックスを参照できます。画像サイズは5x58グレーレベルで、範囲は[0,7]です。正規化された統計ヒストグラムと累積統計ヒストグラムは次のように計算されます。

Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ

上図に基づいて、元のグレーレベル空間を変換できます。1つは元のグレー空間範囲内、もう1つは[0,7]より広い範囲で変換するタイプです。

最初に元の範囲での等化の実現を確認し、現在の累積確率に7(最大グレーレベル)を掛けて、新しいグレーレベルを取得します。

Python OpenCV画像処理ヒストグラム関連の知識の詳細、いくつかの詳細を学ぶ

新しいグレーレベルと元のグレーレベルの数を比較できます。

等化前に、グレーレベルが2つのグループに分割されている場合、データは次のようになります。

  1. 0~3:4ピクセル、カウントされるピクセル数は19です。
  2. 4~7:4ピクセル、カウントされたピクセル数は6です。
    等化後、グレーレベルを2つのグループに分割すると、データは次のようになります。
  3. 0~3:4ピクセル、カウントされるピクセル数は11です。
  4. 4~7:4ピクセル、カウントされたピクセル数は14です。

より広い範囲のヒストグラムを取得したい場合は、累積確率に大きなグレーレベルを掛けるだけで済みます。自分で試すことができます。

消しゴムバー

今日の1時間で何かを学んだことを願っています。次のブログでお会いしましょう〜

関連資料


テクニカルコラム

  1. 100個のPythonクローラーチュートリアル、優れたクローラーチュートリアル、今すぐ購読
  2. Pythonクローラーレッスン、9つの素晴らしい講義

今日は連続執筆の94日目/ 100日目です
緊密な関係のブロガーを構築したい場合は、同じ名前のドリームイレーサーの公開番号に焦点を当て、面白いシニアインターネットワームと緊密に連絡を取ることができます
ブロガーID:Dream Eraser、みんなが好きコメントお気に入りだといいのですが。

おすすめ

転載: blog.csdn.net/hihell/article/details/114245686