OpenCV – equalizeHist でヒストグラムを平坦化し、画像の明るさを調整する方法

目次

概要

OpenCV でヒストグラムの平坦化を行い、画像の明るさを調整する方法について解説します。

ヒストグラムの平坦化

ヒストグラムの平坦化とは、偏って分布しているヒストグラムを $[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))
In [2]:
# 画像をグレースケール形式で読み込む。
img = cv2.imread("sample.jpg", cv2.IMREAD_GRAYSCALE)

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

コメント

コメントする

目次