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