本公開總體涉及用于將圖像存儲在計算機存儲器中的方法和計算機程序產(chǎn)品,具體涉及用于以樹形數(shù)據(jù)結(jié)構(gòu)存儲多個jpeg編碼圖像的方法和計算機程序產(chǎn)品,其中,使用上部樹節(jié)點中的圖像的共同部分壓縮樹的下部中的圖像。
相關(guān)申請的交叉引用
本申請要求2015年2月9日提交的美國第14/617325號專利申請的優(yōu)先權(quán),在此以引證的方式將該申請的整個公開并入。
背景技術(shù):
大型社交網(wǎng)絡公司例如facebook每月取得提交的非常大量的圖像。在2013年,facebook每天從用戶接收到3億5千萬張相片,總計達到2500億張相片或300拍字節(jié)(petabyte)。
而且,可穿戴照相機(也被稱為生活記錄照相機)在增加,并且因為這些裝置總是在工作中,所以它們在普通的一天期間生成大量圖像。
這意味著用戶越來越可能用相似的內(nèi)容收集相片。低存儲成本和普遍存在的移動電話照相機意味著許多用戶存儲有大量圖像但很少檢索它們。即使存儲成本多年以來已經(jīng)降低,但相片的尺寸(分辨率)和數(shù)量以相同速率增加,這仍然限制用戶??紤]用戶每天可能存儲多于1000張圖像的生活記錄場景,優(yōu)化存儲是有必要的。
技術(shù)實現(xiàn)要素:
本發(fā)明總體致力于消除或至少減少上面討論的問題以及其他問題。這用根據(jù)所附獨立權(quán)利要求的方法和軟件來完成。
根據(jù)第一方面,本發(fā)明由一種用于以樹形數(shù)據(jù)結(jié)構(gòu)存儲多個jpeg編碼圖像的方法來實現(xiàn),該方法包括以下步驟:針對每個jpeg編碼圖像,計算僅一個特征向量,每個特征向量表示jpeg編碼圖像的內(nèi)容;使用針對每個jpeg編碼圖像的所計算的一個或更多個特征向量,計算多個jpeg編碼圖像中的每個jpeg編碼圖像之間的距離量度;基于所計算的距離量度以樹形數(shù)據(jù)結(jié)構(gòu)對所述多個jpeg編碼圖像排序,其中,所述多個jpeg編碼圖像中的每個jpeg編碼圖像對應于所述樹形數(shù)據(jù)結(jié)構(gòu)中的節(jié)點,并且其中,所述多個jpeg編碼圖像中的一個jpeg編碼圖像對應于所述樹形數(shù)據(jù)結(jié)構(gòu)中的根節(jié)點。
方法還包括以下步驟:對于樹形數(shù)據(jù)結(jié)構(gòu)中不是根節(jié)點的每個節(jié)點,通過以下對對應的jpeg編碼圖像進行編碼:對于jpeg編碼圖像中的dct塊中的至少一些dct塊,計算到與節(jié)點的父節(jié)點對應的jpeg編碼圖像中的至少一個圖像塊的經(jīng)dct編碼的差異,并且如果至少一個經(jīng)dct編碼的差異小于閾值差異,則用與經(jīng)dct編碼的差異中的最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)代替dct塊。
可以提取圖像中的關(guān)注點,以提供特征描述符,例如,圖像中的點、邊緣或物體。
術(shù)語“特征向量”在本說明書的語境中應被理解為定義圖像的特征描述符的一個描述符或組合。特征向量可以具有任意維數(shù)。描述符的示例可以為圖像中顏色的直方圖或sift/surf向量的集合。
術(shù)語“距離量度”在本說明書的語境中應被理解為定義在考慮圖像的內(nèi)容時兩個圖像多么相似。通過使用特征向量來計算這種距離量度,在計算距離量度時不考慮無關(guān)的事情,如圖像中的噪聲或圖像之間葉子位置的小差異等。
術(shù)語“圖像塊”在本說明書的語境中應被理解為具有當前被看的(例如,到圖像的差異對應于節(jié)點的父節(jié)點的)dct塊對應的尺寸的塊。圖像塊可以在像素域中或在dct域中。
通過建造基于圖像之間的距離(或差異)對圖像排序的這種樹形數(shù)據(jù)結(jié)構(gòu),樹結(jié)構(gòu)的根節(jié)點將為最一般的圖像,然后可以基于該根節(jié)點圖像有利地壓縮剩余圖像。
因為樹形數(shù)據(jù)結(jié)構(gòu)如上的來排序,所以可能jpeg編碼圖像中的圖像區(qū)塊(patch)(即,dct塊)相似于樹結(jié)構(gòu)中的父節(jié)點的jpeg編碼圖像中的圖像區(qū)塊。因此,有可能的是,對于jpeg編碼圖像中過的至少一些塊,存儲dct塊之間的差異比存儲dct塊的實際內(nèi)容需要的存儲量少。
因此,通過使用用于表示圖像內(nèi)容的經(jīng)dct編碼的差異而不是表示初始編碼dct塊來執(zhí)行的壓縮是基于相似性的,面不是基于時間的(如視頻編碼算法)。這使得可以壓縮相似(諸如坐在計算機前面)但在完全不同的場合下拍攝的圖像。
根據(jù)第二方面,本發(fā)明由一種用于將多個jpeg編碼圖像以樹形數(shù)據(jù)結(jié)構(gòu)存儲在計算機存儲器中的方法來實現(xiàn)。該方法包括以下步驟:對于每個jpeg編碼圖像,計算一個或更多個特征向量,每個特征向量表示所述jpeg編碼圖像的內(nèi)容;使用針對每個jpeg編碼圖像的所計算的一個或更多個特征向量來計算所述多個jpeg編碼圖像中的每個jpeg編碼圖像之間的距離量度;基于所計算的距離量度將所述多個jpeg編碼圖像聚類到圖像的一個或更多個聚類中,其中,每個聚類包括一個或更多個圖像。
根據(jù)這些聚類,通過以下處理來創(chuàng)建樹形數(shù)據(jù)結(jié)構(gòu):對于包括僅一個jpeg編碼圖像的每個聚類,創(chuàng)建包括僅一個根節(jié)點的新的樹形數(shù)據(jù)結(jié)構(gòu),其中,所述jpeg編碼圖像對應于所述根節(jié)點;對于包括多個jpeg編碼圖像的每個聚類,基于所計算的距離量度來對所述多個jpeg編碼圖像以樹形數(shù)據(jù)結(jié)構(gòu)排序,其中,所述多個jpeg編碼圖像中的每個jpeg編碼圖像對應于所述樹形數(shù)據(jù)結(jié)構(gòu)中的節(jié)點,并且其中,所述多個jpeg編碼圖像中的一個jpeg編碼圖像對應于所述樹形數(shù)據(jù)結(jié)構(gòu)中的根節(jié)點。
方法還包括以下步驟:對于樹形數(shù)據(jù)結(jié)構(gòu)中不是根節(jié)點的每個節(jié)點,通過以下處理來對對應的jpeg編碼圖像進行編碼:對于所述jpeg編碼圖像中的dct塊中的至少一些dct塊,計算到與所述節(jié)點的父節(jié)點對應的所述jpeg編碼圖像中的至少一個圖像塊的經(jīng)dct編碼的差異,并且如果至少一個經(jīng)dct編碼的差異小于閾值差異,則用與所述經(jīng)dct編碼的差異中最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)代替所述dct塊。
通過該方法,創(chuàng)建了樹形數(shù)據(jù)結(jié)構(gòu),每個樹形數(shù)據(jù)結(jié)構(gòu)包括相似圖像。聚類可以被調(diào)整使得樹形數(shù)據(jù)結(jié)構(gòu)內(nèi)的圖像之間的距離量度較小或較大,這意味著樹形數(shù)據(jù)結(jié)構(gòu)內(nèi)的圖像可以或多或少相似。
使用針對聚類的相同的所計算的舉例測度來排序每個樹形數(shù)據(jù)結(jié)構(gòu)有利地降低了執(zhí)行該方法的計算復雜性。
本發(fā)明的其他目的、特征以及優(yōu)點將從以下具體實施方式、從所附權(quán)利要求以及從附圖顯現(xiàn)。
通常,用于權(quán)利要求中的所有術(shù)語根據(jù)它們在技術(shù)領(lǐng)域中的普通含義來解釋,除非在這里另外明確定義。對“一個【元件、裝置、部件、裝置、步驟等】”的所有參考要被開放地解釋為提及元件、裝置、部件、裝置、步驟等的至少一個實例,除非另外明確敘述。
附圖說明
本發(fā)明的上述以及另外目的、特征以及優(yōu)點將參照附圖借助本發(fā)明的實施方式的以下例示性非限制性詳細描述來更佳地理解,在附圖中,相同的附圖標記將用于類似的元件,附圖中:
[圖1]圖1用示例的方式描述了根據(jù)第一實施方式的用于以樹形數(shù)據(jù)結(jié)構(gòu)存儲多個jpeg編碼圖像的方法;
[圖2]圖2用示例的方式描述了根據(jù)第二實施方式的用于以樹形數(shù)據(jù)結(jié)構(gòu)存儲多個jpeg編碼圖像的方法;
[圖3]圖3描述了用于對兩個jpeg編碼圖像之間的差異編碼的流程圖;
[圖4]圖4描述了根據(jù)第一實施方式的經(jīng)dct編碼的差異的計算;
[圖5]圖5描述了根據(jù)第二實施方式的經(jīng)dct編碼的差異的計算;
[圖6]圖6示出了樹形數(shù)據(jù)結(jié)構(gòu)的示例;
[圖7]圖7描繪了圖6所示的樹形數(shù)據(jù)結(jié)構(gòu)中的節(jié)點的刪除;以及
[圖8]圖8描述了再平衡圖7所示的樹形數(shù)據(jù)結(jié)構(gòu)。
具體實施方式
圖1描述了可以如何以樹形數(shù)據(jù)結(jié)構(gòu)duui多個jpeg編碼圖像排序以及與樹形數(shù)據(jù)結(jié)構(gòu)中根節(jié)點以下的層對應的可以如何可以通過計算并編碼圖像及其父節(jié)點之間的差異以樹形數(shù)據(jù)結(jié)構(gòu)存儲。如上所述,由數(shù)碼照相機(例如,生活記錄照相機)拍攝的許多圖像具有相似的內(nèi)容。圖像可以共享大量相似性,例如圖像在以下時間拍攝時:
-同一天的同一時間。這可能產(chǎn)生非常相似的圖像。
-同一時間、同一位置,但不同的天(常見生活記錄照相機)。這可能產(chǎn)生非常相似的圖像。
-不同的時間、不同的位置、同一天(攝影旅游)。這可能產(chǎn)生稍微相似的圖像(例如,天空、工作場所的會議室)。
-不同時間、不同天、但相同的位置。這可能產(chǎn)生非常相似的圖像,特別是對于室內(nèi)。
即使完整圖像不完全相似,也經(jīng)常存在來自可能與之前拍攝的圖像幾乎相同的圖像的子塊。
在存儲這些圖像時,可以利用這些相似性,例如出于壓縮原因。對于圖1所描述的情形,假定已經(jīng)識別出“足夠相似”以被認為可壓縮的多個jpeg編碼圖像。
首先,方法包括以下步驟:對于每個jpeg編碼圖像,計算s102一個或更多個特征向量,每個特征向量表示jpeg編碼圖像的內(nèi)容。
針對全部多個jpeg編碼圖像,應當使用相同的算法來計算一個或更多個特征向量。存在許多合適的可用算法。根據(jù)一些實施方式,對于每個圖像僅計算全局特征向量。這意味著該全局特征向量表示被計算的圖像的整個內(nèi)容,諸如圖像的顏色直方圖。在這種情況下,顏色直方圖可以在圖像的降采樣版本上來計算,或者可以聚集顏色直方圖。
全局特征向量的另外示例是描述圖像的迷你縮略圖(例如,降至64*64像素大)或(例如,聚類到64、128或256個離散群中)像素值的直方圖的向量。
根據(jù)一些實施方式,圖像被分成例如5*4個塊的網(wǎng)格,并且對于每個塊計算顏色直方圖。然后,將(具有可選地已聚類的值的)顏色直方圖連結(jié)到一個特征向量中。這具有以下優(yōu)點:在兩個圖像在圖像的子部分相似的情況下,可以使用該方案找到這種相似性。
如果僅這種全局特征向量用于表示圖像的內(nèi)容,則方法中的下一步驟,計算s104多個jpeg編碼圖像中的每個jpeg編碼圖像之間的距離量度,可以包括計算每個全局特征向量之間的歐氏距離并將該距離用作距離量度。根據(jù)其他實施方式,當計算兩個圖像之間的距離量度時,可以使用陸地移動距離(emd)算法。例如,兩個圖像中的每個圖像可以被分成一些大區(qū)域(例如,2*2塊、3*2塊等),然后可以通過使用emd算法計算塊之間的顏色直方圖相似性。該方法對于色移的變化不是非常敏感,對于噪聲也不敏感。
根據(jù)其他實施方式,圖1的方法中的第一步驟s102包括:對于每個jpeg編碼圖像,計算多個特征向量,每個特征向量表示jpeg編碼圖像的內(nèi)容。當對于每個圖像計算s104多個特征向量時,每個特征向量可以表示圖像中的子區(qū)域(例如,局部特征向量)。每個子區(qū)域?qū)趫D像中存在關(guān)注點的區(qū)域(例如,邊緣),并且從該關(guān)注點,可以計算梯度并用作特征向量。這種多個特征向量可以使用任何合適的特征檢測算法來計算,例如,通過使用來自以下算法的列表的一個或更多個算法:比例不變特征變換(sift)算法、加速魯棒特征(surf)算法、加速段測試特征(fast)算法以及二進制魯棒獨立基本特征(brief)算法)。進一步地,用于jpeg編碼圖像的多個特征向量可以包括這種局部特征向量和全局特征向量之間的混合。
當計算針對每個圖像的多個特征向量時,每個特征向量可以被不同地加權(quán)。例如,全局特征向量可以具有1/3的權(quán)重,而局部特征向量可以具有2/3的權(quán)重。兩個圖像之間的局部特征向量之間的距離量度可以由任何合適的方法來計算,例如,使用在matlab中實施的sift匹配算法或歐氏距離。總之,歐氏距離可以在第一圖像或聚類的特征向量與具有第二圖像和聚類的所有特征向量之間計算,然后在計算兩個圖像之間的最終距離量度時將忽視較大(在閾值以上)的所有距離。另外選項是如果對于每個圖像計算多個不同類型的局部特征向量,則使用通用框架命名的adaboost來計算兩個圖像之間的距離。各個上面討論的特征向量的維數(shù)依賴于算法,并且還可以在實施方法時選擇。使用sift計算的特征向量通??梢园?28維,但由其他算法計算的特征向量可以具有更多或更少維。
應注意的是,一個或更多個特征向量可以基于jpeg編碼圖像照原樣或基于jpeg編碼圖像的內(nèi)插版本來計算。例如,jpeg編碼圖像的內(nèi)插版本可以基于由在編碼jpeg編碼圖像時由jpeg編碼算法自動創(chuàng)建的縮略圖。將jpeg編碼圖像的內(nèi)插版本用于計算一個或更多個特征向量具有多個優(yōu)點。第一,它需要更少的數(shù)值計算。第二,在執(zhí)行內(nèi)插時可以去除了圖像中不關(guān)注的特征(例如,噪聲)。
例如,因為顏色直方圖在分辨率增大或減小時不大變化,所以用于jpeg圖像的全局特征向量可以使用jpeg縮略圖來計算,而不是使用全jpeg圖像來計算。
下一步驟是基于所計算的距離量度對多個jpeg編碼圖像以樹形數(shù)據(jù)結(jié)構(gòu)排序s106。這意味著多個jpeg編碼圖像中的每個jpeg編碼圖像對應于樹形數(shù)據(jù)結(jié)構(gòu)中的節(jié)點,并且多個jpeg編碼圖像中的一個jpeg編碼圖像對應于樹形數(shù)據(jù)結(jié)構(gòu)中的根節(jié)點,換言之,具有到所有其他圖像最短的距離的圖像將被選擇為“根”。剩余圖像將根據(jù)到根和到彼此的距離量度來排序。這種排序是周知的且留給技術(shù)人員來實現(xiàn)。
圖1所描述的方法中的下一步驟是檢查是否可以使用節(jié)點(不是根節(jié)點)的父節(jié)點的圖像中的dct塊與dct塊之間的差異來對節(jié)點的圖像中的dct塊編碼。為了更佳地說明該步驟,下面簡要說明jpeg變換或編碼的主要步驟。
jpeg變換由算法的流水線構(gòu)成。主要步驟是:
1、顏色變換。將rgb轉(zhuǎn)換成yuv,其中,亮度被保持在y通道中,并且色度信息被保持在u和v通道中。
2、降采樣。因為人眼對對比度比對顏色變化更敏感,所以y通道被保持為照原樣,但色度通道被降采樣至2*1或2*2的塊。
3、前向dct。離散余弦變換將8*8像素塊轉(zhuǎn)換成頻率分量。產(chǎn)生的塊將具有少量高值(低頻分量)和許多低值(高頻分量)。
4、量化。因為人眼對低規(guī)模/詳細規(guī)模的高頻變化不是非常敏感,所以使用量化表以將系數(shù)分組到不同的值。量化本身僅是公式[dct_val/q_cal]。
例如,給定100的dct_val(dct系數(shù)的值,例如在dct在8*8像素塊上計算時)和35的q_val,則結(jié)果將為[100/35]=2。較高的量化系數(shù)(q_val)意指較少級別,其等同于較低的熵和較佳壓縮。應注意的是,jpeg編碼器通常每通道僅具有一個量化表(8*8個值),并且相同的三個表通常用于要編碼的所有圖像。存在嘗試依賴于圖像內(nèi)容來優(yōu)化這些量化表的照相機。這可以給出較佳的圖像質(zhì)量和/或較佳的壓縮。
5、編碼。在量化之后,塊在系數(shù)上將含有更少的級別。這可以用諸如霍夫曼這樣的熵編碼器來壓縮。
在視覺上相似的dct塊將隨著頻率分量幾乎相同而具有相似的dct系數(shù)。因此,利用與到父節(jié)點的圖像中的dct塊的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)代替dct塊可以是用于實現(xiàn)更高壓縮的好構(gòu)思。換言之,圖1所述的方法的下一步驟包括:對于樹形數(shù)據(jù)結(jié)構(gòu)中不是根節(jié)點的每個節(jié)點,通過以下處理來對對應的jpeg編碼圖像進行編碼s112:對于jpeg編碼圖像中的dct塊中的至少一些dct塊,計算s108到與節(jié)點的父節(jié)點對應的jpeg編碼圖像中的至少一個圖像塊的經(jīng)dct編碼的差異,并且如果至少一個經(jīng)dct編碼的差異小于閾值差異,則用與經(jīng)dct編碼的差異中最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)代替dct塊。這意味著如果在父節(jié)點圖像中(例如,在像素域中或在dct域中)找到合適的圖像塊,使得要被編碼的圖像中的當前檢查dct塊與在父節(jié)點圖像中找到的圖像塊之間的差異小于閾值差異,則在對由當前檢查的dct編碼塊表示的圖像的部分編碼時可以使用該差異。
為了找到父節(jié)點圖像中的合適圖像塊,可以采取多個方案。在圖4和圖5中,在dct域中進行對父節(jié)點中的合適圖像塊的搜索。然而,應注意的是,如下面將關(guān)于圖3說明的,這種搜索還可以在像素域中進行。圖4中示出了用于找到合適dct塊的一種方案。在圖4中,示出了圖像402和圖像404。上圖像404與下圖像402的節(jié)點的父節(jié)點對應。在圖4中,確定下圖像中的dct塊406是否可以用經(jīng)dct編碼的差異來代替。根據(jù)圖4中的實施方式,計算到dct塊的僅一個經(jīng)dct編碼的差異。這通過計算到jpeg編碼圖像404中的相應位置處的dct塊408的差異來進行。通過使用該策略,可以在兩個圖像中的相同位置處找到在兩個圖像之間尚未移動的任何圖像內(nèi)容或已經(jīng)移動的相似內(nèi)容(例如,天空)的大區(qū)域。在圖4中,圖像402中的dct塊406與父節(jié)點圖像中的相應位置處的dct塊408之間的差異較低。換言之,兩個塊406、408之間的比較410將產(chǎn)生小于閾值差異的小差異。由此,dct塊406將被與經(jīng)dct編碼的差異中的最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)代替。
對于圖4中的第二組dct塊412、414,比較416得到經(jīng)dct編碼的差異在閾值差異以上。因此,dct塊412將被保持為原樣。
圖5示出了用于找到父節(jié)點圖像504中的合適dct塊的第二方案,其中,不只是在父節(jié)點中的相應位置處的dct塊是可能的應選方案。
在20mp的圖像中,每通道存在2000000(8*8)=312500個塊。在圖像區(qū)域之間的長距離不太可能發(fā)現(xiàn)匹配塊,因此搜索可以被局部化到較小的區(qū)域。例如,搜索區(qū)域可以被減小至父節(jié)點中相應位置處的dct塊周圍2mp的圖像區(qū)域。然而,這意味著32768個dct塊是用于找到父節(jié)點圖像中的合適dct塊的可能候選。計算如此多的塊之間的最佳匹配可以為計算上復雜的過程,并且在處理資源不足時可以使用遠遠較小的區(qū)域。
在圖5中,在圖像502中的dct塊506與父節(jié)點圖像504中的九個dct塊50819之間計算九個dct編碼的差異。換言之,計算s108(圖1)到與節(jié)點的父節(jié)點對應的jpeg編碼圖像504中的至少一個圖像塊的經(jīng)dct編碼的差異的步驟包括:計算到處于與節(jié)點的父節(jié)點對應的jpeg編碼圖像中的相應位置處的dct塊5085的閾值距離內(nèi)的dct塊5081…9的多個經(jīng)dct編碼的差異。
在圖5的示例中,因為圖502、504中的對象在圖像之間已經(jīng)移動了一些,所以在dct塊5084中找到最佳匹配。
因此,dct塊506被與(dct塊506與所有dct塊5081…9之間的)經(jīng)dct編碼的差異中(例如,dct塊506與dct塊5085之間的)最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)代替。
如果采用第二方案,則與經(jīng)dct編碼的差異中最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)包括最小的經(jīng)dct編碼的差異與對應于父節(jié)點的所述jpeg編碼圖像中的哪個dct塊有關(guān)的引用。
例如,數(shù)據(jù)中的第一位可以告知是否將跟隨有引用。
-位0:存在引用嗎?0=否,1=是。
-如果該位被設(shè)置為0,則普通dct塊將在沒有任何特殊編碼的情況下直接跟隨。
-位1-n(n依賴于可以被尋址的父節(jié)點圖像中的dct塊的可能數(shù)量)。對根節(jié)點中的相似的塊的引用。例如,n=15給出可以被尋址的32768個不同塊。
現(xiàn)在返回到圖1,方法可以可選地包括以下步驟:使用熵編碼器或區(qū)間編碼器壓縮s110最小的經(jīng)dct編碼的差異,并且其中,與最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)對應于壓縮后的經(jīng)dct編碼的差異。因為兩個dct塊之間的德爾塔值或差異可能將較小,所以它們可以使用例如霍夫曼編碼來進一步壓縮。
如果不執(zhí)行對經(jīng)dct編碼的差異的進一步壓縮s110,實現(xiàn)不與樹形數(shù)據(jù)結(jié)構(gòu)的根節(jié)點對應的圖像的無損壓縮。然而,可能的是,這種樹中的較低級別處的圖像將不像對應于根節(jié)點的圖像那樣經(jīng)常被查看,因為這些圖像看起來像是對應于根節(jié)點的圖像。因此,有損壓縮是可接受的。
圖3用示例的方式示出了用于對兩個jpeg編碼圖像(例如,根jpeg編碼圖像302與葉jpeg編碼圖像304)之間的差異進行編碼的流程圖。因為dct塊系數(shù)經(jīng)常在jpeg圖像302、304中壓縮,所以首先需要兩個圖像302、304中的已壓縮dct塊被解碼306、308為使得dct系數(shù)可以在純文本中讀取。當進行了這一點時,根jpeg編碼圖像302包括可搜索圖像塊310,其可以用于找到針對葉jpeg編碼圖像304中的dct塊312的匹配塊。在這種搜索之后,可以找到兩個密切匹配的圖像塊314、316,一個圖像塊316來自葉jpeg編碼圖像304,并且一個圖像塊314來自根jpeg編碼圖像302。如果搜索在dct域中執(zhí)行(參見下文),則對這些塊進行解量化318、320,并且通過執(zhí)行逆dct332來取得與匹配dct塊314、316對應的圖像區(qū)域的像素值。然后,通過將像素值從彼此減去326來計算兩個圖像區(qū)域之間的差異。產(chǎn)生的差異通過執(zhí)行前向dct328被變換回頻域。可選地對dct系數(shù)再次量化330(如關(guān)于圖1中的步驟s110描述的)。在用經(jīng)dct編碼的差異代替332在葉jpeg編碼圖像中的初始dct編碼塊之前執(zhí)行(使用例如霍夫曼編碼器或區(qū)間編碼器)對經(jīng)dct編碼的差異的最后編碼332。
應注意的是,可搜索圖像塊310可以為像素域中的8*8像素塊。在這種情況下,方法包括額外步驟:在找到葉jpeg編碼圖像304中的dct塊312的匹配塊的步驟之前,將根jpeg圖像302解碼到像素域中。在這種情況下,還需要在找到葉jpeg編碼圖像304中的dct塊312的匹配塊之前將葉jpeg圖像304中的dct塊解碼到像素域中。當在像素域中搜索匹配塊時,用于匹配的候選圖像塊不約束到例如8個像素邊界(根據(jù)一些實施方式的dct塊的尺寸),相反基于像素的方案可以是逐像素的,如果使用圖像內(nèi)插則甚至是逐子像素的。例如,如果物體在圖像之間向右移動了3個像素(或在圖像內(nèi)插情形下移動了2.5個像素),則這可以在基于像素的方案中被有利地處理。在另一方面,如果使用在dct域進行對匹配塊的搜索,則壓縮可以實際上增大圖像中具有相同噪聲特性的區(qū)域?;谙袼氐姆桨缚赡軐υ肼暶舾校鴇ct將低頻系數(shù)置于向量的開頭,而不管噪聲如何。
圖6用示例的方式示出了樹形數(shù)據(jù)結(jié)構(gòu),該樹形數(shù)據(jù)結(jié)構(gòu)包括根節(jié)點502和多個后繼節(jié)點506、506、508、510、512、514。采用這種樹形數(shù)據(jù)結(jié)構(gòu)的優(yōu)點在于:因為樹形數(shù)據(jù)結(jié)構(gòu)使用圖像之間的差異量度來建造,所以可以以高效方式對與樹形數(shù)據(jù)結(jié)構(gòu)中的節(jié)點對應的圖像之間的差異編碼。
當應將附加jpeg編碼圖像添加到樹形數(shù)據(jù)結(jié)構(gòu)時,使用與用于樹中的其他圖像的算法相同的算法來計算一個或更多個附加特征向量。使用這些附加特征向量,計算附加jpeg編碼圖像與多個jpeg編碼圖像中的每個jpeg編碼圖像之間的附加距離量度?;诙鄠€jpeg編碼圖像中的哪個jpeg編碼圖像最靠近附加jpeg編碼圖像,將與附加jpeg編碼圖像對應的附加節(jié)點添加到樹形數(shù)據(jù)結(jié)構(gòu)。然后如上所述對該附加jpeg編碼圖像進行編碼,即,通過對于附加jpeg編碼圖像中的dct塊中的至少一些dct塊,計算到與附加節(jié)點的父節(jié)點對應的jpeg編碼圖像中的至少一個dct塊的經(jīng)dct編碼的差異,并且如果至少一個經(jīng)dct編碼的差異小于閾值差異,則用與經(jīng)dct編碼的差異中最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)代替dct塊。在附加jpeg編碼圖像被插入樹形數(shù)據(jù)結(jié)構(gòu)中使得它將具有子圖像的情況下,這些圖像可能需要重新編碼。
圖7描述了刪除樹形數(shù)據(jù)結(jié)構(gòu)中的圖像時的情形。圖8描述了可能在樹形數(shù)據(jù)結(jié)構(gòu)的圖像的刪除(或添加)之后需要執(zhí)行的再平衡操作。
在圖7中,刪除對應于兩個不同圖像的節(jié)點504、508。首先假定首先刪除兩個節(jié)點504、508中的節(jié)點504。因為被刪除的、對應于jpeg編碼圖像的節(jié)點504不是葉節(jié)點,所以兩個選項存在。無論哪一個選項,都永久直接刪除節(jié)點504(和圖像)。在這種情況下,在刪除之前,需要使用對應于節(jié)點502的圖像作為應計算dct塊之間的差異的圖像來對其子節(jié)點508的圖像重新編碼(如圖3所描述)。這可能是昂貴的操作。第二個另選是僅將該節(jié)點標記為已刪除,這可以意味著在包括具有指令的計算機可讀存儲介質(zhì)的圖像瀏覽程序中(例如,在智能電話、膝上型電腦、平板計算機等中)中不再示出對應的圖像,這些指令(例如,已安裝的計算機程序產(chǎn)品)適于使用其處理能力來進行這里描述的方法。通過僅將節(jié)點標記為已刪除,對“被刪除”節(jié)點的子節(jié)點的圖像的上述重新編碼不需要發(fā)生。如果稍后刪除對應于節(jié)點508的圖像(如圖6所示),則還可以永久地刪除其父節(jié)點504。
另一方面,如果首先刪除兩個節(jié)點504、508中的節(jié)點508,則可以因為該節(jié)點是葉節(jié)點而被永久刪除。如果隨后刪除節(jié)點504,則該節(jié)點也將是葉節(jié)點,由此可以被安全地永久刪除。
當刪除兩個節(jié)點504、508時,樹形數(shù)據(jù)結(jié)構(gòu)僅包括5個節(jié)點,但仍然具有四層。因為如果例如要在圖像瀏覽程序中示出對應于節(jié)點514的jpeg編碼圖像(例如,使恢復至不包括經(jīng)dct編碼的差異的、其初始的jpeg編碼狀態(tài)),則需要將dct塊之間的大量差異考慮在內(nèi),所以這從壓縮的角度來說是良好的,但從性能的角度來說是不好的。
從這個角度,對樹形數(shù)據(jù)結(jié)構(gòu)再平衡可以是有利的。這可以在每當計算機系統(tǒng)處于低負荷時進行(因為平衡的唯一效果是較佳的性能和較小的文件尺寸,而不是功能上的任何變化)。如果如上所描述的,這種再平衡在將jpeg編碼圖像到樹形數(shù)據(jù)結(jié)構(gòu)的添加之后進行,則這種再平衡可以通過以下方式來執(zhí)行:使用包括附加jpeg編碼圖像的每個jpeg編碼圖像的所計算的一個或更多個特征向量來計算包括附加jpeg編碼圖像的每個jpeg編碼圖像之間的新的距離量度,并且基于所計算的新的距離量度將包括附加jpeg編碼圖像的多個jpeg編碼圖像以樹形數(shù)據(jù)結(jié)構(gòu)排序。然后需要重新編碼圖像中的一些圖像,因為已經(jīng)給予這些圖像新的父節(jié)點圖像。如從上面理解的,可以有利的是,將用于所有圖像的所有所計算的一個或更多個特征向量以樹形數(shù)據(jù)結(jié)構(gòu)存儲在存儲器中,使得在需要執(zhí)行再平衡操作、刪除操作和/或添加操作時可以容易地訪問這些向量。
在圖8中,對圖7的樹形數(shù)據(jù)結(jié)構(gòu)再平衡。因為僅節(jié)點514在經(jīng)再平衡的樹形數(shù)據(jù)結(jié)構(gòu)中取得了新父節(jié)點,所以僅對應于已移動的節(jié)點514的圖像需要被重新編碼。
圖2示出了用于將多個jpeg編碼圖像以樹形數(shù)據(jù)結(jié)構(gòu)存儲在計算機存儲器中的方法。圖1的方法與圖2的方法之間的差異是不假定要使用圖2的方法存儲的全部多個jpegp編碼圖像的“足夠相似”以被認為可壓縮。因此,首先需要將多個圖像聚類到具有這種相似性的圖像組。第一步驟包括:對于每個jpeg編碼圖像,計算s102一個或更多個特征向量,每個特征向量表示jpeg編碼圖像的內(nèi)容。這些一個或更多個特征向量可以如上所描述的來計算。下一步驟是也如上所描述的使用用于每個jpeg編碼圖像的所計算的一個或更多個特征向量來計算s204多個jpeg編碼圖像中的每個jpeg編碼圖像之間的距離量度。
下一步驟與圖1的方法相比是新的。下一步驟包括基于所計算的距離量度將多個jpeg編碼圖像聚類到圖像的一個或更多個聚類,其中,每個聚類包括一個或更多個圖像。可以使用任意合適的聚類方法,例如,對于距離量度使用硬閾值,使用最近的相鄰算法,使用隨機抽樣一致(ransac)算法等。
從一個或更多個聚類,創(chuàng)建s208相同數(shù)量的樹形數(shù)據(jù)結(jié)構(gòu)。
對于包括僅一個jpeg編碼圖像的每個聚類,創(chuàng)建僅包括根節(jié)點的新的樹形數(shù)據(jù)結(jié)構(gòu),其中,該jpeg編碼圖像對應于根節(jié)點。如上所述,在該樹形數(shù)據(jù)結(jié)構(gòu)上不進行另外的步驟,直到另外的jpegp編碼圖像被加到該單個節(jié)點樹形數(shù)據(jù)結(jié)構(gòu)為止。
對于包括多個jpegp編碼圖像的每個聚類,執(zhí)行關(guān)于圖1描述的步驟。為了總結(jié)這些步驟,首先,基于所計算的距離量度來將多個jpeg編碼圖像以樹形數(shù)據(jù)結(jié)構(gòu)排序s210,其中,多個jpeg編碼圖像中的每個jpeg編碼圖像對應于樹形數(shù)據(jù)結(jié)構(gòu)中的節(jié)點,并且其中,多個jpeg編碼圖像中的一個jpeg編碼圖像對應于樹形數(shù)據(jù)結(jié)構(gòu)中的根節(jié)點,其次,對于樹形數(shù)據(jù)結(jié)構(gòu)中不是根節(jié)點的每個節(jié)點,通過以下對對應的jpeg編碼圖像進行編碼s216:對于jpeg編碼圖像中的dct塊中的至少一些dct塊,計算s212到與節(jié)點的父節(jié)點對應的jpeg編碼圖像中的至少一個圖像塊的經(jīng)dct編碼的差異,并且如果至少一個經(jīng)dct編碼的差異小于閾值差異,則用與經(jīng)dct編碼的差異中最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)代替dct塊??蛇x地,還可以如上所描述的來壓縮s214最小的經(jīng)dct編碼的差異。
當添加計算了一個或更多個附加特征向量的jpegp編碼圖像時,首先確定是否應將附加jpegp編碼圖像添加到已有聚類,如果是,則確定將另外jpegp編碼圖像應添加到哪個已有聚類。這可以通過使用附加特征向量來計算附加jpeg編碼圖像與對應于已有樹形數(shù)據(jù)結(jié)構(gòu)中的根節(jié)點的多個jpeg編碼圖像中的每個多個jpeg編碼圖像之間的附加距離量度來進行,并且如果至少一個附加距離量度小于閾值距離,則將附加jpeg編碼圖像添加到與附加距離量度中的最小的附加距離量度對應的樹形數(shù)據(jù)結(jié)構(gòu)。如果沒有距離量度在閾值以下,則另外的jpegp編碼圖像將形成僅包括一個節(jié)點的新的樹形數(shù)據(jù)結(jié)構(gòu)。
如果附加jpegp編碼圖像要被添加到已有樹形數(shù)據(jù)結(jié)構(gòu),則這如上說明的來進行。作為總結(jié),通過使用附加的一個或更多個特征向量來計算附加jpeg編碼圖像與對應于樹形數(shù)據(jù)結(jié)構(gòu)的節(jié)點的各個jpeg編碼圖像之間的附加距離量度,并且基于哪個jpeg編碼圖像對應于樹形數(shù)據(jù)結(jié)構(gòu)的最靠近附加jpeg編碼圖像的節(jié)點,將與附加jpeg編碼圖像對應的附加節(jié)點添加到樹形數(shù)據(jù)結(jié)構(gòu),并且通過以下處理來對附加jpeg編碼圖像進行編碼:對于附加jpeg編碼圖像中的dct塊中的至少一些dct塊,計算到與附加節(jié)點的父節(jié)點對應的jpeg編碼圖像中的至少一個圖像塊的經(jīng)dct編碼的差異,并且如果至少一個經(jīng)dct編碼的差異小于閾值差異,則用與經(jīng)dct編碼的差異中最小的經(jīng)dct編碼的差異有關(guān)的數(shù)據(jù)代替dct塊。
根據(jù)一些實施方式,附加jpeg編碼圖像首先被添加到新的樹形數(shù)據(jù)結(jié)構(gòu),或者以“普通”方式存儲在拍攝圖像的裝置中。然后上述步驟可以在時間上稍后執(zhí)行,例如,當計算機系統(tǒng)處于低負載時執(zhí)行。
本領(lǐng)域技術(shù)人員認識到,本發(fā)明并不限于上述方法的示例性實施方式中的步驟的順序。而且,另外變體在所附權(quán)利要求的范圍內(nèi)是可能的。例如,可以采用除了上面指定的、用于計算一個或更多個特征向量的算法之外的其他算法。這種其他算法包括峰檢測或方向梯度直方圖。