scikit-imageを使い、2つの画像の類似度を測ってみます。OpenCVなども使うことができると思います。
scikit-image: Image processing in Python — scikit-image
If you find this project useful, please cite: [BiBTeX]
画面がソフトラップしてくれないので見にくいですね。対策を考えなくては
from skimage.metrics import structural_similarity as ssim
from skimage import io, transform
import os
import numpy as np # Import numpy
# 画像を読み込む
# Get the current working directory
current_directory = os.getcwd()
# Load the images using the full path
image1 = io.imread("/content/image1.png")
image2 = io.imread("/content/image2.png")
# Resize image2 to match the dimensions of image1
image2 = transform.resize(image2, image1.shape, anti_aliasing=True)
# SSIMを計算
# Dynamically adjust win_size based on image dimensions, ensuring it's odd
win_size = min(7, min(image1.shape[0], image1.shape[1]) - 1)
win_size = win_size if win_size % 2 != 0 else win_size - 1
# Further reduce win_size if still too large
# This loop iteratively reduces win_size until it fits within the image dimensions.
while win_size > 1 and np.any((np.asarray(image1.shape) - win_size) < 0):
win_size -= 2
# Calculate SSIM with the adjusted win_size and actual data range
ssim_score = ssim(image1, image2, multichannel=True, win_size=win_size, data_range=image1.max() - image1.min())
# 0から100の指標に変換
similarity_score = (ssim_score + 1) * 50
print(f"類似度: {similarity_score:.2f}")
構造的類似性指標 (SSIM):
- 画像の輝度、コントラスト、構造を考慮して類似度を評価します。
- 人間の視覚 perception に近い評価ができます。
上のサンプルコードは、Google の Colab で簡単に試すことが可能です。画像の準備が必要です。