Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

OpenCV – cv2.equalizeHist でヒストグラムを平坦化する方法

OpenCV – cv2.equalizeHist でヒストグラムを平坦化する方法

概要

OpenCV でヒストグラムの平坦化を行う方法について解説します。

Advertisement

ヒストグラムの平坦化

ヒストグラムの平坦化は、偏って分布しているヒストグラムを $[0, 255]$ に均等になるように調整することで、画像の明るさを調整する手法です。

画像の画素数を $n$、輝度値 $i$ の画素数を $n_i$ とし、輝度値 $i$ の画素数の割合を $p(i) = \frac{n_i}{n}$ で定義したとき、ヒストグラム平坦化は次の階調変換関数で行います。

$$ f(x) = \text{floor}(255 \sum_{i = 1}^x p(i)) $$

以下はヒストグラム平坦化前後の画像及びヒストグラムを表しています。ヒストグラム平坦化により、画像全体が明るくなりました。

同様に明るすぎる画像を調整することもできます。

cv2.equalizeHist

OpenCV では、cv2.equalizeHist() でヒストグラムの平坦化が行えます。

sample.jpg

In [1]:
import cv2
import numpy as np
from IPython.display import display, Image


def imshow(img):
    """ndarray 配列をインラインで Notebook 上に表示する。
    """
    ret, encoded = cv2.imencode(".jpg", img)
    display(Image(encoded))


# 画像をグレースケール形式で読み込む。
img = cv2.imread("sample.jpg", cv2.IMREAD_GRAYSCALE)

# ヒストグラムの平坦化
dst = cv2.equalizeHist(img)
imshow(dst)
0 199