OpenCVのヒストグラムとヒストグラム等化(cv2.calcHist、cv2.equalizeHist)

機能評価画像ヒストグラム:cv2.calcHist()

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]]) ->hist

imaes:入力画像
チャンネル:チャンネル選択画像
マスク:マスク、及び指定された部分を処理することを特徴とする請求NP画像アレイは、処理のどの部分が、典型的には、画像全体の処理を示す、Noneに設定され、ゼロではないことを指定する、1であるのと同じサイズであります
HISTSIZE:一般的に、256をビン(柱)の数を使用します
範囲:ピクセル値の範囲は、通常、[0、255]は0〜255であり、
管の二つの基本的なパラメータの背後。
さらにマスクに、他の4つのパラメータは、[]数を取らなければならなかったことに留意されたいです。
ここに画像を挿入説明

img = cv2.imread('cat.jpg',0) #0表示灰度图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
hist.shape#(256, 1)

1、無マスクパラメータ

img = cv2.imread('cat.jpg') 
color = ('b','g','r')
for i,col in enumerate(color): 
    histr = cv2.calcHist([img],[i],None,[256],[0,256]) 
    plt.plot(histr,color = col) 
    plt.xlim([0,256]) 

ここに画像を挿入説明
図2に示すように、マスクパラメータを使用

# 创建mask
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:300, 100:400] = 255

img = cv2.imread('cat.jpg', 0)
masked_img = cv2.bitwise_and(img, img, mask=mask)#与操作

hist_full = cv2.calcHist([img], [0], None, [256], [0, 256])
hist_mask = cv2.calcHist([img], [0], mask, [256], [0, 256])

plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.imshow(mask, 'gray')
plt.subplot(223), plt.imshow(masked_img, 'gray')
plt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask)
plt.xlim([0, 256])
plt.show()

ここに画像を挿入説明

第二に、画像ヒストグラム等化関数:cv2.equalizeHist()およびcv2.createCLAHA()

ヒストグラム等化は説明
簡単で効果的な画像強調技術、画像は画像ヒストグラムの各画素の階調を変更することによって変更され、画像のコントラストを向上させるために使用されるダイナミックレンジが小さいヒストグラム等化。元の画像の強度分布に起因する画像が明らかに十分ではありません、その結果、狭い範囲に集中してもよいです。例えば、オーバー露光画像のグレーレベルは、高輝度範囲に集中しているが、濃縮低輝度範囲のアンダー画像のグレーレベルを生じさせます。ヒストグラム等化を用いて、ヒストグラムは画像全体のコントラストを向上させる効果を達成するように、変換元の画像は、このように画素階調ダイナミックレンジとの間の差の値を大きく、均一な分布(バランス)形態であってもよいです。換言すれば、ヒストグラム均等化の基本的な原理は、拡大する画像の階調値の画素数(すなわち、画像が主要な役割階調値を再生)、及び画素のグレースケール値の数が少ない(すなわち画像の階調値に大きな役割を果たしていない)、マージ、それによって増加コントラスト、画像の鮮明さ、強化の目的を達成します。

cv2.equalizeHist(img)  

パラメータ:入力映像のIMG表現
ここに画像を挿入説明
ここに画像を挿入説明

img = cv2.imread('clahe.jpg',0) #0表示灰度图
plt.hist(img.ravel(),256); 
plt.show()

ここに画像を挿入説明

equ = cv2.equalizeHist(img) 
plt.hist(equ.ravel(),256)
plt.show()

ここに画像を挿入説明

res = np.hstack((img,equ))
cv_show(res,'res')

ここに画像を挿入説明このグローバルイコライゼーションは、部分画像の詳細が不鮮明になりそうという、リフト全体の明るさに起因するいくつかの問題になります。私たちはより良い適応等を使用することができますので、

cv2.createCLAHA(clipLimit=8.0, titleGridSize=(8, 8))  

パラメータ:clipLimit色コントラスト閾値、titleGridSize等化画素グリッドサイズ、多くのメッシュで、すなわち、ヒストグラム等化動作

clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) 
res_clahe = clahe.apply(img)
res = np.hstack((img,equ,res_clahe))
cv_show(res,'res')

ここに画像を挿入説明これは、人の顔の細部が消えることはありませんでした適応等を見ることができます

公開された27元の記事 ウォン称賛20 ビュー1545

おすすめ

転載: blog.csdn.net/qq_39507748/article/details/104596171