本文主要介紹,如何介紹歐氏距離。
在影像處理中,歐式距離有許多應用,以下是幾個常見的例子:
歐式距離可以用來檢測影像中的邊緣。透過計算像素之間的強度差異,可以確定哪些像素屬於邊緣。這個差異通常以歐式距離的形式來衡量,特別是在 Sobel 或 Canny 邊緣檢測算法中。
在影像分割中,歐式距離可以用來計算像素與某個參考點(如種子點或中心點)之間的距離。這樣可以將影像分成不同的區域。例如,在分水嶺算法中,使用歐式距離來確定各個區域的分界線。
在影像處理中,如果需要比較兩個像素或兩個區域的顏色是否相似,可以將顏色值視為三維向量(例如 RGB 值),並使用歐式距離來衡量它們之間的相似度。距離越小,顏色越相似。
在圖像匹配過程中,歐式距離用於衡量不同影像特徵點之間的差異。
在影像匹配和特徵識別中,像是 SIFT、SURF 這類特徵檢測算法會提取影像的局部特徵點,然後用歐式距離來比較這些特徵點之間的相似性,從而找到相同或相似的物體。
在影像分割或分類中,K-means 聚類算法會使用歐式距離來將像素或特徵點聚集到最近的中心點。這可以用來分割影像中的區域或進行物體分類。
歐氏距離(Euclidean Distance)
歐氏距離是最易於理解的一種距離計算方法,源自歐氏空間中兩點間的距離公式。
(1)二維平面上兩點a(x1,y1)與b(x2,y2)間的歐氏距離:
(2)三維空間兩點a(x1,y1,z1)與b(x2,y2,z2)間的歐氏距離:
(3)兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的歐氏距離:
import numpy as np
import matplotlib.pyplot as plt
# 定義兩個點的座標
x1, y1 = 1, 2
x2, y2 = 4, 6
point1 = np.array([x1, y1])
point2 = np.array([x2, y2])
# 計算歐式距離
distance = np.linalg.norm(point1 - point2)
# 開啟畫布繪製座標點
plt.figure(figsize=(6, 6))
plt.plot([x1, x2], [y1, y2], 'ro-', label=f'Distance = {distance:.2f}')
plt.scatter([x1, x2], [y1, y2], color='blue')
# 標記兩個點
plt.text(x1, y1, f'({x1}, {y1})', fontsize=12, ha='right')
plt.text(x2, y2, f'({x2}, {y2})', fontsize=12, ha='left')
# 增加坐標軸標籤
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 設置畫布範圍
plt.xlim(0, 5)
plt.ylim(0, 7)
# 增加右上角數據圖示說明
plt.legend()
# 設置標題
plt.title('Euclidean Distance between Two Points')
# 畫格子線
plt.grid(True)
# 顯示圖形
plt.show()
在這裡,np.linalg.norm
函數會計算兩個點之間的歐式距離。
歐式距離越小,代表這兩個特徵點越相似,通常是找出特徵點之間的最佳匹配,這樣就能夠找到兩張影像中最相似的特徵點。