Posted on

用兩張圖片來偵測圖像是否在靜止狀態

實踐概念

使用 TensorFlow 的圖像處理函數,將兩張圖片讀入並進行比對。

比如您可以使用 OpenCV 庫將圖片讀入,然後使用 TensorFlow 庫對兩張圖片進行比對。 您可以使用 TensorFlow 的圖像處理函數,例如圖像縮放、旋轉和鏡像轉換等,對兩張圖片進行預處理。接著您可以使用 TensorFlow 中的數值計算函數,例如 mean square error (MSE) 或 structural similarity index (SSIM)等,對兩張圖片進行比對。

如果比對結果的值非常小,則可以認為兩張圖片非常相似,反之則表示兩張圖片不相似。

Structural Similarity Index (SSIM)

Structural Similarity Index (SSIM) 是一種用於評估圖像相似度的指標。它是基於人眼視覺系統的特性,模擬人眼對圖像質量的敏感度,並使用三個要素來評估圖像相似度:亮度、對比度和結構。

亮度(luma): 表示圖像中所有像素的平均亮度
對比度(contrast): 表示圖像中各像素亮度值的差異程度
結構(structure): 表示圖像中各像素之間的相關性
SSIM 使用這三個要素的加權和來計算圖像之間的相似度,其值介於 -1 到 1 之間,值越大則表示圖像相似度越高。

SSIM 有很好的相似度表示能力,在圖像壓縮、還原和質量評估等領域有著廣泛的應用。

使用Tensorflow實現SSIM的簡單範例

以下是使用 TensorFlow 實現 SSIM 的簡單範例,該範例使用兩張圖片來比較它們的相似度:

import tensorflow as tf

# 讀入兩張圖片
img1 = tf.io.read_file('image1.jpg')
img2 = tf.io.read_file('image2.jpg')
img1 = tf.image.decode_jpeg(img1, channels=3)
img2 = tf.image.decode_jpeg(img2, channels=3)

# 計算兩張圖片的 SSIM
ssim = tf.image.ssim(img1, img2, max_val=255)

# 顯示 SSIM 值
print(ssim)

這個範例中,我們使用 TensorFlow 的 I/O 函數來讀入兩張圖片,使用 decode_jpeg 函數將圖片解碼為 Tensor,然後使用 ssim 函數對兩張圖片進行比對,最終顯示 SSIM 值。

注意: 這個範例中,由於是在計算兩張圖片的 SSIM,所以需要兩張圖片大小相同,如果不同需要先對兩張圖片進行resize或pad。