黨媛媛,陳兆學
(上海理工大學健康科學與工程學院,上海 200093)
在圖像處理和計算機視覺領域,標準色卡通常用于定位和校準圖像中的顏色信息[1]。傳統(tǒng)的標準色卡定位方法通常需要人工交互手動提取色卡中的顏色信息,當有大量的色卡待提取顏色信息時,該方法效率極低。因此,研究如何自動實現標準色卡的定位和識別是當前的研究熱點之一。目前,國內外已有相關研究及成果,JACKOWSKI等[2]提出了一種半自動色卡檢測的算法,即先手動注釋補丁角,再利用有理高斯曲面和超曲面建模及模板匹配知識對色卡進行幾何變形。樊明杰[3]和KORDECKI等[4]提出了基于顏色聚類的色卡自動識別方法,均先對圖像進行形態(tài)學處理,再利用K-means算法聚類顏色簇定位標準色卡。葛超[5]提出了一種將尺度不變特征(SIFT)與隨機抽樣一致匹配算法相結合的色卡信息提取方法。
在真實采集環(huán)境下,不可避免地存在色卡傾斜、旋轉、彎曲及多色卡同時采集等情況。以上方法針對性強但魯棒性差,難以實現各種場景下色卡自適應識別和精準定位。為彌補上述既有方法的不足,本文提出了一種結合AKAZE 特征檢測、FLANN特征匹配與RANSAC算法的色卡自動識別與顏色信息自動提取方法。通過實驗表明該方法能快速、準確地定位不同場景下的色卡圖像和提取顏色信息,便于后續(xù)的顏色校正和圖像特征自動分析處理工作。
標準色卡是一種用于標準化和比較顏色的工具,通常由國際標準化組織(ISO)或其他行業(yè)組織制定,并根據特定的顏色空間(如RGB、CMYK 或LAB等)和顏色體系進行編碼和標識,其中X-Rite Color Checker 24色標準色卡具有極佳的穩(wěn)定性,在顏色校正領域被廣泛使用。該顏色檢查器包含24個色標,其RGB參考值由官方提供,確保目標值的準確性。這些色標的很多顏色代表自然界對象,例如天空、草地和皮膚等,可以在任何光照條件下與其自然物體的色彩互相匹配[6],帶有24個色標的X-Rite色卡如圖1所示。在采集目標物體圖像的同時,拍攝標準色卡,則可將其用作視覺參考以輔助任何色彩再現流程,也常常用于評價成像設備拍攝圖像的顏色校正質量。
圖1 愛色麗24色標準色卡Fig.1 X-Rite Color Checker Classic with 24 colors
本文提出的結合AKAZE特征檢測、FLANN 特征匹配與RANSAC誤匹配剔除的標準色卡自動識別與顏色信息提取方法的主要實現步驟如下。
(1)利用AKAZE算法提取標準色卡及包含標準色卡的待檢測圖像中的特征點,并利用FLANN算法建立兩幅圖像特征點集合的映射關系,從而得到特征匹配點集合,進而大致識別出標準色卡在待檢測圖像中的位置[7]。
(2)通過RANSAC算法過濾特征匹配點集合中的誤匹配點,從而得到更準確的匹配點集[8]。
(3)根據“步驟(2)”中的匹配點集,將匹配條件設為10,選擇兩幅圖像中相似性最高的關鍵點位置坐標計算透視變換矩陣M。
(4)根據透視變換矩陣M,校正待檢測圖像中標準色卡的角度,并提取24個色標的顏色信息。由于X-Rite顏色檢查器的材質會造成漫反射,色卡上或多或少地存在噪聲,因此這里選取每個色標中心的一定區(qū)域,采用基于均值的方法計算每個色塊的顏色值[9]。設計的算法流程架構如圖2所示。
圖2 本文算法流程圖Fig.2 Algorithm flow chart
在計算機視覺圖像處理領域提取圖像局部特征的各種算法中,比較經典的有尺度不變特征(Scale-Invariant Feature Transform,SIFT)和加速穩(wěn)健特征(Speeded Up Robust Features,SURF)算法[10-11]。這兩種算法提取的圖像特征都具有旋轉和尺度不變性,并且采用金字塔結構;然而在構造不同尺度空間時,常用的高斯模糊算法難以保持目標物體的邊緣信息,于是ALCANTARILLA等[12]提出了AKAZE特征檢測方法。相比傳統(tǒng)的線性尺度空間,非線性尺度空間能夠更好地模擬圖像的局部結構,并且在多尺度特征檢測中能夠更好地保留特征。與SIFT、SURF等算法相比,AKAZE算法利用非線性尺度空間進行圖像特征檢測的速度更快,并且其可重復性與魯棒性更高。
1.1.1 構造非線性尺度空間
為了解決高斯尺度空間邊緣模糊的問題,引入非線性擴散濾波[13]。該方法描述了圖像亮度L在不同尺度上隨時間變化的規(guī)律,可以描述如下:
其中,div表示散度,?代表梯度算子,L表示圖像亮度,c(x,y,t)取決于圖像差分結構的傳導函數,決定了圖像平滑程度和邊緣保留程度,可以根據像素相似性自適應地調整,公式表示如下:
為了實現特征的快速計算,提高尺度空間的構建速度,利用快速顯性擴散算法(Fast Explicit Diffusion,FED)求解公式(1)的非線性偏微分方程,得到非線性尺度圖像[14],定義如下:
公式(4)和公式(5)中,I是單位矩陣,τj為時間步長,τmax表示最大時間步長,L i表示第i次迭代包含的圖像像素點灰度值的向量,通過計算第i幅圖像傳導矩陣A(L i)就可以得到第i+1幅圖像,從而構造出非線性尺度空間圖像序列關系。
AKAZE算法在構建非線性尺度空間時采用金字塔型結構,其中尺度級別按對數遞增排列[15]。算法構建了一個包含多個圖像的金字塔結構,每個圖像在空間和尺度上都不同,尺度空間的構建是通過對原始圖像進行多次高斯模糊實現的,每個模糊后的圖像被稱為一個尺度級別,與SIFT、SURF算法等其他線性構造尺度空間方法都不同。具體來說,一共O組圖像,每組圖像有S個子層,各層圖像尺度參數表示如下:
公式(6)中,σ0表示尺度參數的初始基準值,N=O×S是整個尺度空間中圖像的總數。由于非線性擴散濾波是用于時間序列的方法,而公式(6)計算得到的結果是像素級別的灰度值,因此需要將像素尺度轉化為時間尺度,以便構造非線性尺度空間。具體而言,可以將像素尺度轉化為時間尺度,進而得到每層尺度空間中的時間參數,然后按照時間參數構造非線性尺度空間,從而實現對圖像的多尺度特征提取和匹配:
1.1.2 特征點檢測
非線性尺度空間構造完成后,需要計算不同尺度下金字塔每一層濾波圖像L i的Hessian行列式[16]:
圖3 特征點檢測原理圖Fig.3 Schematic diagram of feature point detection
特征具有旋轉不變性,在確定圖像特征點的位置后,以此為原點尋求特征點的主方向。計算特征點圓形區(qū)域內所有鄰點的一階微分值并進行高斯加權,接著將其作為響應,采用一個60°扇形滑動窗口局部遍歷所有的像素點,并對滑動窗口內像素點的響應值進行求和。在求和過程中,值最大的方向即為特征點的主方向。
為了提高算法的運行速度,實現特征匹配的實時性,本文選擇快速最近鄰搜索算法(Fast Library for Approximate Nearest Neighbors,FLANN)對特征點進行匹配[17]。FLANN算法與其他特征匹配方法(如暴力匹配法)相比,可以更有效地匹配具有高維或大規(guī)模數據集的特征。FLANN基于歐式距離從實例點的最近鄰域搜索到最近的點,當兩個關鍵點之間的距離小于匹配閾值時,它們會被標記為匹配對。在本實驗中,將匹配閾值設置為0.8。N維空間中,歐式距離的數學定義如下:
其中,D(x,y)表示歐式距離,i代表空間維度。FLANN 算法流程如下。
(1)構建隨機樹:首先建立隨機樹將N維空間中的數據進行排序,選擇中位數作為根節(jié)點,然后將數據集分成兩個子集,分別遞歸構建左子樹和右子樹,直到每個葉節(jié)點只包含一個數據點或者達到預設樹的深度。
(2)索引:將構建好的隨機樹分別按照深度優(yōu)先、廣度優(yōu)先、最近鄰優(yōu)先等方式進行遍歷,對每個節(jié)點進行索引,計算每個節(jié)點的劃分平面和劃分維度,記錄節(jié)點的左、右子節(jié)點等信息。
(3)利用K-最鄰近算法搜索與剪枝:給定正整數K,計算所有測試數據的歐式距離,根據距離進行升序排序,選取距離最小的K個點,根據單個數據占前K個數據距離的比值綜合計算前K個數據的類別,從而判斷測試數據的類別。在訪問每個節(jié)點時,計算查詢點到節(jié)點劃分平面的距離,如果小于當前最近鄰的距離,則更新最近鄰。在搜索過程中,根據查詢點與節(jié)點的距離和當前最近鄰的距離,可以預測查詢點到其他節(jié)點的距離是否可能更小,如果不可能,則不再遞歸訪問該節(jié)點的子樹。
(4)使用FLANN算法進行近似最近鄰搜索高維數據時,可能會出現“維數災難”,導致搜索時間急劇增加。為解決這個問題,FLANN算法采用局部敏感哈希(LSH)和隨機樹等技術實現高維數據的近似最近鄰搜索。此外,FLANN 算法提供了自動調參的方法,可以根據數據集的特點自動選擇最佳參數。當檢查的樹葉節(jié)點數滿足預先設定的值時,停止搜索,搜索的精度可由用戶設定。
1.3.8 膨脹度(SC)的測定。準確稱取約1 g的樣品,記為M,將其加入量筒中,使其所占的體積記為V1,加入10 mL蒸餾水,振搖使其均勻分散,置于25 ℃的水浴鍋恒溫24 h,使樣品充分膨脹后記錄其體積V2,并按以下公式計算:
圖像匹配對中不可避免地會存在一些錯誤的匹配,鑒于隨機抽樣一致匹配優(yōu)化算法(RANSAC)對樣本數據有較強的勘誤能力且魯棒性較高,可應用于消除特征匹配過程中產生的誤匹配點。該算法基本思想是從樣本集中給定一組(通常很小的)內群,利用迭代方法擬合一個模型,這個模型可以估算出最佳解釋或最適用于這一數據模型的參數,然后對該模型進行評價。通過不斷迭代重復這一過程,當迭代次數足夠大,隨機給定的樣本點有可能全部屬于內點,從而找到最優(yōu)的擬合模型[18]。
本實驗中RANSAC算法篩選剔除錯誤的匹配對的步驟如下。
(1)從匹配對樣本中隨機抽取4組匹配對組成一個樣本集,計算其單應性矩陣,模型記為Q,設定閾值為5。
(2)計算數據樣本中所有數據與模型Q的誤差,若誤差小于5,則將其視為內點,加入內點集N。
(3)根據內點集中元素個數判斷組成的內點集是否為最大一致集。
(4)當足夠多的點進入內點集,選擇此時的模型,重復“步驟(1)”和“步驟(2)”的操作過程,直至內點集元素個數達到一定閾值,將內群最多的模型作為該問題的解。RANSAC剔除誤匹配后的特征檢測與匹配結果如圖4所示。
圖4 特征檢測與匹配結果Fig.4 Feature detection and matching results
本文色卡定位與顏色信息提取實驗使用Python 語言及Pytorch框架實現,實驗環(huán)境如下:Windows 10操作系統(tǒng),處理器為Intel(R)
圖5為本文方法與基于SIFT和SURF算法的色卡檢測效果的對比圖,從實驗結果可知,大矩形框所框選的部分即為場景中的標準色卡,24個小正方形大致為各色塊中心位置,盡管場景中有其他物體,但本文方法可以對標準色卡進行準確且有效的自動識別。在實際的圖像采集過程中,應盡可能地平整擺放場景中標準色卡,有效地避免色卡形變或陰影等因素對后期顏色校正結果的影響。此外,以上兩種方法也可以定位圖像中的色卡區(qū)域,但是基于SIFT和SURF算法的定位效果易受高斯模糊影響而難以保存邊緣信息。
圖5 色卡檢測及定位結果Fig.5 Color checker detection and positioning results
從圖5可以看出,在提取色卡中心位置,基于SIFT 和SURF的方法定位結果會有個別色塊明顯偏離色塊區(qū)域中心位置,而本文算法的結果較為準確。表1是本文算法對一幀圖像進行識別所得的24色標準色卡色塊中心位置及顏色提取結果。
表1 色卡信息Tab.1 Color checker information
為驗證本文算法的有效性,進一步比較不同算法的色卡檢測效果,對數據集中114幅包含標準色卡的圖片進行色卡定位及顏色提取。圖6為使用本文方法開展部分實驗的結果,24個小正方形的位置即算法定位的各色塊中心位置。利用Matlab R2018a軟件搭建手動標定色卡各色塊中心系統(tǒng)(數據均進行3次標定且標定過程互不干擾,取其平均值),將該結果作為標準色卡各色塊中心位置。圖7是基于SIFT、SURF算法與本文算法對115幅圖像進行色卡檢測所得的24色色塊中心數據與標準色卡色塊中心位置距離的平均誤差,圖7中,“方法一”對應SIFT算法,“方法二”對應SURF算法,“方法三”對應AKAZE-FLANN算法。
圖6 部分實驗結果Fig.6 Partial experimental results
圖7 中心位置距離的平均誤差Fig.7 Center position distance error
通過圖7可知,本文提出的方法檢測出的24色色塊中心的像素誤差基本穩(wěn)定在 0~15 pixels,基本可以滿足場景下色卡定位與顏色信息提取要求。相比之下,基于SIFT 算法和SURF算法的誤差穩(wěn)定在小于30 pixels,較本文方法識別精度略低。表2是用手動標定SIFT、SURF算法與本文算法的色卡檢測效果的對比結果。實驗結果顯示,運用本文算法檢測色卡結果與人工標定結果的一致性比其他方法好且算法運行時間更短,表明該算法能夠更準確地檢測色卡且實時性更好。
表2 算法性能對比Tab.2 Algorithm performance comparison
此外,本文算法也適用于同一場景下多色卡識別任務,如圖8所示,圖中數據樣本包含標準色卡及膚色色卡,本文算法在色卡平整擺放、色卡傾斜擺放及色卡彎曲擺放三種情景下均可較好地完成多色卡場景下的色卡識別,具有一定的魯棒性。
圖8 多色卡場景的檢測及定位結果Fig.8 Detection results of multi-colorchecker scene
實現標準色卡的自動檢測,在中醫(yī)診斷、光學估計和計算機視覺等領域都有著重要且廣泛的應用價值。本文在人機交互技術高度發(fā)展的背景下,為了在還原采集圖像本征色彩的過程中節(jié)約人力和時間成本,提出了一種基于AKAZE特征檢測與匹配的標準色卡自動化提取方法,在AKAZE特征提取的基礎上,考慮運用FLANN 算法進行特征匹配并應用RANSAC算法剔除誤匹配點。經實驗檢驗,本文提出的算法較好地實現了標準色卡中各色塊中心的快速定位與顏色信息的自動提取,具有一定的實用價值,可以推廣應用于醫(yī)療、食品、紡織、化妝、印刷等領域。