🌌
画像の複雑度を求める
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))
Discussion