画像の複雑度を求める

2024.04.17
このエントリーをはてなブックマークに追加

GPT-4 Visionの検証をしている中で、画像が複雑であるほど回答精度が下がっているように感じた。 画像の複雑度を定量的に評価する方法を調べる。

複雑度とは

今回の複雑度とは、画像の情報量の多さを指す。色の分布が均一であるほど複雑度が低く、色の分布が偏っているほど複雑度が高いと仮定し、色の分布のエントロピーを複雑度として評価する。その他の考え方として画像内のオブジェクトの数や大きさ、輪郭の複雑さなどがあるが、今回は考えない。

エントロピー

エントロピーは情報理論の概念で、情報の平均的な不確かさを表す指標である。 エントロピーが高いほど情報が不確かであることを示す。

ヒストグラムのエントロピーはscipyで計算できる。

poetry add opencv-python scipy
import cv2
from scipy.stats import entropy

def calculate_image_complexity(image_path):
    # 画像をグレースケールで読み込む
    img = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)

    # 画像のヒストグラムを計算する
    hist = cv2.calcHist([img], [0], None, [256], [0,256])

    # ヒストグラムを正規化する
    hist /= hist.sum()

    # ヒストグラムのエントロピーを計算する
    hist_entropy = entropy(hist)

    return hist_entropy

image_path = "sample.jpg"
print(calculate_image_complexity(image_path))

参考