Core Image 濾鏡應用:結合 SwiftUI 找出圖像差異


本篇原文(標題:Image Difference Using Computer Vision in iOS 14 )刊登於作者 Medium,由 Anupam Chugh 所著,並授權翻譯及轉載。

人的眼睛是很容易接受視覺呈現的東西,同樣地,電腦視覺就是讓系統能夠理解並處理圖像。

Core Image 和 Vision 是 iOS 電腦視覺的兩大框架。在 WWDC 2020 中,Apple 為這兩個框架添加了許多新功能。

現在 iOS 14 的 Core Image,新增了一些內建的圖像處理濾鏡。舉例來說,其中一個新增的 CIColorThreshold 濾鏡,讓我們可以設定閾 (threshold) 值,來將圖像轉換為黑白。另外 CIColorThresholdOtsu 濾鏡,可以從圖像的直方圖 (histogram) 中確定合適的閾值。

更重要的是,我們現在可以使用一個新濾鏡 CIColorAbsoluteDifference,來比較兩個圖像,這就是本篇文章的重點。

在文章接下來的部分,我們將看看不同的範例,來應用分析圖像差異這個濾鏡。

絕對圖像差異 (Absolute Image Difference)

在這個圖像處理範例中,我們想要計算兩個圖像上每個像素的絕對差異,並將其相加。

如此一來,我們就會得到一個轉換過的圖像,當中會顯示兩個圖像的差異。

在新的 Core Image 濾鏡中,如果兩個圖像完全相同,輸出圖像將為黑色。

利用比較圖像之間的色差這個功能,我們可以:

  • 分析影像幀 (frame)。舉例來說,我們可以確定幀是否一致,或是檢查每一張幀會不會有一些陰影。
  • 作異常檢測 (anamoly detection),來找出肉眼可能遺漏的異常情況。這對於找尋圖像之間的差異很有用,例如信用卡或紙幣的符號是否有缺。

接下來,我們將探討一些比較圖片的範例。

Core Image 濾鏡:CIColorAbsoluteDifference

首先,建立一個執行圖像處理的 SwiftUI App。

在 Core Image,我們需要設定一個輸入 CIImage(我們會把圖象從 UIImage 轉換為 CIImage),並設置在 CIFilter 上。接著,我們就可以設置閾值(如有),並從濾鏡中取得 outputImage 實例。這個 outputImage 實例基本上是 inputImage 的副本,然後我們會把實例傳遞給 CIContext 的函數 createCGImage 中,以做轉換。

CIContext 就是執行圖像處理的地方。

在 SwiftUI 內找出圖像的差異

以下範例是典型「找出圖像差異」的情況,不過這次我們套用了電腦視覺。

swift-ui-image-difference

我們用 CIFilter.colorAbsoluteDifference() 建構一個 CIFilter,並將兩個圖像傳遞給它。

我們也可以在比較前,將兩張照片轉換成灰階。

浮水印偵測/擷取

這也是一個非常常見的範例。如果你想要確認圖像是否已經疊加了浮水印或是 Logo,就可以使用 CIColorAbsoluteDifference 如下判別:

ios-14-logo

信用卡的異常偵測

在手機 App 掃描信用卡並擷取資訊,是一個常見的電腦視覺任務。

我們現在可以進一步應用上述的濾鏡,來判定信用卡的圖像有沒有被篡改。我們可以利用一個空白的信用卡圖像作參考,與一個掃描圖像來比較,以擷取所需的資訊。

看看以下範例,你會了解如何達到這兩個目標:

ios-14-anomaly-detection

在左側圖像中,如果我們想更進一步使用電腦視覺全面偵測異常值,可以再將輸出圖像和一個不透明的黑色圖像作比較。

你可以在 Github 程式庫 上,找到文章中所有 SwiftUI + CoreImage App 的程式碼。

結論

在準備資料集 (data set) 時,Apple 的圖像處理框架 CoreImage 就可以大派用場,讓我們方便地進行圖像轉換與增強 (augmentation)。

在這篇文章中,我們討論了 iOS 14 的新濾鏡 CIColorAbsoluteDifference,它讓我們可以不使用 OpenCV,來比對兩個圖像中每個像素的顏色。

這個濾鏡非常好用,讓我們從圖像中找出差異,或是從影像或資料庫判定和移除重複的圖像。

本篇文章到此為止。謝謝你的閱讀。

本篇原文(標題:Image Difference Using Computer Vision in iOS 14)刊登於作者 Medium,由 Anupam Chugh 所著,並授權翻譯及轉載。

作者簡介:Anupam Chugh,深入探索 ML 及 AR 的 iOS Developer。喜愛撰寫關於想法、科技、與程式碼的文章。歡迎到我的 Blog 閱讀更多文章,或在 LinkedIn 上關注我。

譯者簡介:Oliver Chen-工程師,喜歡美麗的事物,所以也愛上 Apple,目前在 iOS 程式設計上仍是新手,正研讀 Swift 與 Sketch 中。生活另一個身份是兩個孩子的爸,喜歡和孩子一起玩樂高,幻想著某天自己開發的 App,可以讓孩子覺得老爸好棒!聯絡方式:電郵 [email protected]


此文章為客座或轉載文章,由作者授權刊登,AppCoda編輯團隊編輯。有關文章詳情,請參考文首或文末的簡介。

blog comments powered by Disqus
Shares
Share This