Official Blog
恰到好處的體貼:Synology Photos 如何堆疊你的相似相片,讓演算法幫你整理歸類
Nicola Hung
2025-07-29

恰到好處的體貼:Synology Photos 如何堆疊你的相似相片,讓演算法幫你整理歸類

為了捕捉孩子最燦爛的笑容,你可能連按了十次快門;為了調出完美的夕陽色調,你也許儲存了五個不同濾鏡的版本。現代人拿起手機就能輕鬆攝影,卻讓相簿在記錄美好瞬間的同時,照片數量也會變得愈來愈龐大。所以不少相簿 App 都會主打整理重複、類似的照片,但這時候一個有趣的問題就來了:這些功能提到的「相似」定義,到底是什麼?

是同一個場景下,太陽位置略有不同的連拍夕陽嗎?是相同個構圖中,多了或少了一個人物嗎?還是同張相片,經過不同軟體裁切、修圖後的眾多版本?事實上,光是每一個人的判斷標準,都可能搖擺不定,那麼一套固定的演算法,要如何應對人類如此靈活、甚至帶點主觀的整理邏輯?

這些疑問,也是 Synology Photos 開發團隊在推出「堆疊相似相片」(Stack Similar Items)功能時,所探討的議題。此篇文章將帶你一虧幕後,解剖開發過程一系列關於技術與使用體驗的權衡。

權衡一:如何拿捏演算法的「相似」標準?

開發之初,Photos 團隊面臨的第一個哲學問題便是:演算法認定的「相似」,和人類眼中的「相似」,應該是什麼關係?

我們發現,人類的判斷極富彈性:在整理孩子的生日派對相片時,可能會把幾張表情略有差異的連拍視為「相似」;但在挑選一張要沖印出來的風景照時,雲彩位置的些微不同,可能就足以將其視為兩張獨立的作品。

一套演算法無法完全複製這種複雜的人類心智。它需要一個客觀、一致的標準。因此,在教 Synology Photos 程式如何「看懂」相似相片之前,必須先教會它如何「抓住重點」。

Synology Photos 採用的是 PDQ(Perceptual Hash)演算法。它運作的邏輯非常聰明,會自動忽略相片中那些無關緊要的「表面細節」,比如你把相片存成了 PNG 還是 JPG、解析度是高還是低,或相片上是否有一點點數位雜訊。這套演算法只專注於捕捉整張相片最核心的輪廓、線條和明暗分佈,為每一張相片快速繪製獨一無二的「靈魂速寫」。這位「演算法畫家」的速寫過程大致分為幾個步驟:

  1. 專注於本質首先,演算法會將彩色相片轉換為灰階。這就像畫家在打草稿時,會先忽略顏色,專注於捕捉人物的輪廓、明暗和光影。這一步能確保聚焦在人眼最敏感的視覺結構上,而不是被多變的色彩所干擾。

  2. 統一視角接著,不論你的相片是手機拍的直式大圖,還是相機拍的橫式廣角,演算法都會先將它們縮放到一個固定的尺寸。這就像畫家把所有參考相片,都放在同一張畫布上比對,確保比較的基準是一致的,不會因為原始尺寸不同而產生誤判。這一步的挑戰在於找到「最佳解析度」。如果縮得太小,雖然計算速度極快,但會流失過多圖像細節,導致一些明明不像的相片被誤判為相似。因此 Synology Photos 採用了一個相對大得多的標準尺寸,既能保留足夠的關鍵特徵,又能保持高效的運算,達成了準確性與效能的最佳平衡。

  3. 解構與提煉這是最關鍵的一步。演算法會使用一種稱為「離散餘弦變換(DCT)」的數學工具,將圖像分解成最基本的「視覺紋理」和「佈局模式」。你可以想像成,畫家將人物的五官拆解成最基本的幾何形狀,並分析它們之間的相對位置,有效地提煉出圖像最重要的視覺特徵。

  4. 生成指紋最後,演算法會根據這些提煉出的核心特徵,生成一串由 256 個 0 和 1 組成的代碼。這就是這張相片獨一無二的「靈魂速寫」——它的視覺指紋。

有了靈魂速寫作為判斷依據,下一個關鍵問題是:兩幅速寫要「多像」,才能認定它們是同一組相似相片?這是一個關於門檻值(Threshold)的設定,也是開發團隊內部進行無數次辯論和測試的核心。

最後,Synology Photos 用一種稱為「漢明距離(Hamming Distance)」的方法,量化兩幅速寫的差異。你可以想像成,每一幅速寫都由 256 個關鍵特徵點組成,接著將兩幅速寫疊在一起,逐一比對這 256 個特徵點,然後數一數,總共有多少個點是不一樣的。這個「不一樣的數量」,就是它們之間的漢明距離。

  • 漢明距離為 0 至 15,意味著兩幅速寫完全相同,幾乎可以肯定是同一張相片的複製檔。

  • 漢明距離很小(例如在 16 到 40 之間),通常代表相片只是經過了輕微的裁切、縮放或亮度調整,視覺內容高度相似。

  • 漢明距離較大(例如在 41 到 80 之間),則意味著兩張相片雖然可能主題相關,但在構圖、人物或場景上已有明顯差異。

如果門檻值過於嚴格,稍微調整亮度或裁切,演算法就會認為是兩張不同的相片,失去了自動整理的意義。如果門檻過於寬鬆,構圖類似但主題迥異的相片(例如白天的沙灘、夜晚的雪地)可能會被錯誤地堆疊在一起,造成更大的整理困擾。

在無數次的測試與討論後,開發團隊確立了一條核心設計原則:寧可多堆疊,也不願錯漏。我們選擇了一個相對寬鬆、但經過嚴格驗證的門檻。

Synology Photos 的目標是,讓演算法找到的相似相片,在使用者眼中「有很高的機率是相關的」。使用者或許會覺得「這幾張雖然像,但我更想分開看」,但很少會覺得「這兩張相片八竿子打不著,怎麼會堆在一起?」

這個決策背後的思考是:當使用者從一個已經被初步整理好的集合中,手動剔除幾張照片所需的時間,其實會遠低於散落各處的相片中,手動找出並合併。這也是為什麼 Synology Photos 現階段只提供取消堆疊(Unstack),以及從堆疊移除(Remove from stack)的功能,而未開放手動建立堆疊的原因。

我們希望將演算法,定位為一個高效的「篩選助理」,而不是一個替你做最終決定的「老闆」。它為你完成 80% 的繁瑣工作,而那最後 20% 充滿個人偏好的整理樂趣,我們選擇完整地保留給你。

權衡二:如何在海量資料中,高效地完成比對?

定義了相似之後,下一個挑戰則回到技術面:如何在一座可能存放了數百萬張相片的數位圖書館裡,高效地完成比對工作,而不拖垮整台 NAS 的效能?試著想想看,每一張新上傳的相片,都要和資料庫裡的所有相片比對視覺指紋的話,將是一場運算災難。為此,我們設計了一套多層次的任務分配與改善機制

首先,我們為演算法的「視野」加上了限制。絕大多數的相似相片(如連拍、修圖版本)都誕生於相近的時間點。因此,無論是新上傳的相片,還是系統背景排程的比對任務,演算法都只會和拍攝時間相距在正負 24 小時內的相片進行比對。這個時間窗的設計,將比對範圍縮小了數個數量級,從源頭上避免了無謂的效能浪費。

其次,Synology Photos 充分利用了生態系中的每一分運算力。例如當你透過手機上傳相片時,利用手機本身強大的處理器,在本地預先計算好相片的 PDQ 速寫,然後再連同相片一起上傳到 NAS。這意味著,最耗費運算資源的一步,由你的手機分擔了,NAS 只需要專注於接收資料和進行指紋的資料庫比對即可。

最後,開發團隊將後端的比對與堆疊任務,無縫地整合進 DSM 核心的系統排程器中。這個設計讓 Synology Photos 的比對任務不再是單獨運作,而是成為整個系統智慧資源調度的一部分。它確保了相似度的計算不會頻繁地喚醒休眠中的硬碟,從而維持你 NAS 的節能效率。

透過這種方式,它能與其他套件的背景任務(例如 Download Station 的下載排程或 Hyper Backup 的備份排程)進行協調運作。這意味著 Photos 的整理工作會被安排在一個更合適的時機執行,避免了多個背景任務在同一時間互相競爭系統資源,從而提升了 NAS 整體的穩定性與可預測性。

智慧輔助,由你作主

Synology Photos 的「相似相片堆疊」功能,從一開始就圍繞著一個核心理念來打造:讓技術成為你的得力助手,而非取代你的決策。

開發團隊投入大量資源,去改善演算法的準確性、提升大規模比對的效率,並確保整個過程不會對 NAS 效能造成負擔。同時,還賦予了使用者自由度——從設定堆疊封面,到一鍵取消堆疊,再到從中移除任何一張相片。

我們相信,最好的自動化,是為使用者完成繁瑣的初步工作,然後交還充滿樂趣的最終整理權。希望你在享受整潔時間軸的同時,也能感受到這份 Synology Photos 為你精心設計的「恰到好處的體貼」。