Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
景
創意平臺是一個擁有豐富素材、模板的多場景在線設計平臺。
眾所周知,顏色在設計中扮演著極為重要的角色,它不僅僅是美感的體現,還深刻影響用戶的感知、情緒和行為。為了提升用戶的檢索效率,提高作品的最終視覺效果,我們需要支持顏色檢索圖片。
在最初版本中,我們通過人工識別的方式,將顏色作為標簽與圖片關聯起來,顯然,這與創意平臺設計的初衷背道而馳,所以我們決定在系統層面上實現圖片顏色識別及關聯自動化。
目的
實現素材&模板的主色識別及關聯自動化。換句話說,就是讓用戶在上傳素材&模板之后,不經過人工處理,就能夠通過顏色檢索到對應的素材&模板。
實現方案
通過分析用戶的使用場景,我們可以將流程細化成四步:用戶上傳素材&模板->服務器提取主色->服務器關聯顏色與素材&模板->用戶檢索素材&模板,其中服務器需要做三件事,提取主色、顏色歸類、顏色關聯,那么接下來我們將對這三件事進行詳細闡述。
1.主色提取
計算機是如何表達圖像的?
在提取主色前,我們首先需要知道計算機是如何表達圖像的。首先給出結論:計算機是通過像素和顏色信息來表達圖像的。圖像是由多個不可分割的單元組成的,這些單元被稱為像素,每個像素代表圖像中的一個點,像素都包含顏色信息、位置信息。像素的顏色信息通常使用RGB(紅、綠、藍)模型表示。
RGB顏色模型
在RGB模型中,顏色由紅色、綠色和藍色三個顏色通道的組合來表示。每個通道的強度可以在0到255之間變化,其中0表示沒有該顏色,255表示該顏色的最大強度。例如,RGB(255, 0, 0) 表示紅色,因為紅通道的強度是255,而綠和藍通道的強度為0。
主色提取算法
知道了圖像在計算機中的表達方式后,那么自然而然的想法是,可以通過統計圖像中像素個數排名靠前的顏色來得到主色,顯然,這種提取方式在一些簡單場景上(如:純色圖片)效果不錯,但是在復雜場景(如:顏色漸變)上就不太合適了。
常見的主色提取算法有Kmeans算法、中位切分法、八叉樹算法等,相較于其他語言,Java在圖像處理方面有著明顯的劣勢,雖然有基礎的圖像處理API,但缺少強大的圖像處理庫,通過調研這三種算法的實現難度、實現效果后,我們更傾向于Kmean算法和中位切分法,幸運的是,我們在github上找到開源的顏色提取項目Color thief,它是基于中位切分法實現的。此開源項目的核心思想簡述如下:
在引用開源項目后,我們成功提取出圖片的主色,但是在實驗過程中發現以下兩個問題:
針對問題1:
經過對比分析,我們猜測是透明的像素點被識別成了黑色,為了驗證這一猜想,我們調研了PNG圖片的格式,PNG圖片分為三通道PNG(RGB PNG)、四通道PNG(RGBA PNG),其中R G B A分別代表紅色通道、綠色通道、藍色通道、透明度通道,所以我們在獲取像素點顏色這一步驟中過濾了全透明像素點,成功解決這一問題。
針對問題2:
我們都知道采樣是一種近似方法,對圖像進行采樣可能導致信息丟失、顏色提取的精確度降低。另外,減少像素數量,可以提高計算效率,對于大尺寸的圖像,可以顯著減少處理時間、減少資源消耗。我們期望在盡可能還原圖像最真實的顏色的基礎上,降低對服務器的影響,在創意平臺中,96.8%的圖片大小處于5M以內,我們對于這類圖片使用最高的采樣標準,對于超過5M的圖片,盡可能使用最高的采樣標準,對于處理失敗的圖片,未來將采取壓縮或者轉格式的方式來降低圖像文件大小。
主色提取數量的變化會影響提取的主色范圍。最初,在參考常規的顏色提取網站后,我們選定了主色數量為4個,在大多數場景下效果不錯,但在特殊場景下,肉眼感知的主色和圖片識別的主色不一致。
我們第一反應:這張圖片應包含橙色、灰色、黑色、棕色。
但提取出來的顏色是這樣的:
為什么沒有識別出橙色?我們知道,中位切分法是通過不斷二分顏色直方體,使得直方體數量等于主色數量,最后得出主色,所以在二分的過程中可能導致顏色精度損失。因此我們的策略是盡可能提取多的顏色,但不可能全量提取,所以我們在原有4個主色的基礎上,分別增加1、2、3個進行對比測試。
提取5個主色
提取6個主色
提取7個主色
測試結果顯示,在把主色數量設置為5時,提取的主色基本就能覆蓋所有主色,再增加提取的主色數量也不過是增加"重復"的棕色,因此選定主色提取數量為5個。
然而,這又引入一個新問題,當把主色提取數量設置為5個后,簡單類型的圖像主色包含占比很低的顏色。為了避免這一情況,就需要過濾占比較低的顏色,但是占比多少算低,沒有一個準確的定論,只能通過不斷調整主色在原圖上的占比閾值來反復測試,最后,我們找到一個相對合適的占比范圍。
2. 顏色歸類
首先,我們回顧一下RGB顏色空間,以r g b為軸,建立空間坐標系,如下圖所示。
可以看到,在RGB空間中,八個頂角分別代表了黑色、紅色、綠色、藍色、黃色、洋紅色、青色、白色。顯然,通過主色rgb值就確定主色屬于什么顏色是一件非常困難的事情,原因有二,第一,rgb三個分量是高度相關的,即使在rgb分量上有些許的變化,也會導致顏色分類改變;第二,RBG顏色空間是面向機器的,顏色均勻性很差,無法通過空間點之間的關系進行分類;所以我們不能使用RGB顏色空間。
為了將主色進行顏色歸類,我們需要更合適的顏色模型。通過調研,常見的顏色模型有CMYK、LAB、HSV。
常見的顏色模型
CMYK顏色模型
CMYK顏色模型是一種用于印刷和出版的顏色模型,它表示顏色通過四個顏色通道:青(Cyan)、洋紅(Magenta)、黃(Yellow)和黑(Key,通常表示黑色)。這四個顏色通道可以組合產生多種顏色。
LAB顏色模型
LAB顏色空間是一種顏色空間,也稱為CIE Lab*顏色空間,由國際照明委員會(CIE)定義。它是一種基于人眼感知的顏色空間,與設備無關,用于更準確地描述和測量顏色,更適用于顏色編輯
LAB顏色空間如下所示:
HSV顏色模型
HSV顏色模型是一種描述顏色的方式,其中顏色由三個屬性組成:色調(Hue)、飽和度(Saturation)和明度(Value)。HSV模型相對于RGB模型更加直觀,更符合人類對顏色的感知。
HSV顏色空間如下所示:
按照角度劃分出顏色范圍如下所示:
通過對比這三種顏色模型,我們最終選擇了HSV顏色模型。原因有二,第一,HSV顏色空間只需要通過一個變量就能控制顏色的線性變化,而LAB顏色空間需要兩個;第二,HSV顏色空間更加容易確定顏色空間范圍。
如何歸類
通過觀察HSV顏色空間,顏色歸類可以抽象成在局部三維空間中找到指定的點,在這個局部顏色空間中,所有的像素點均被歸類成同一個顏色。我們需要做兩件事,第一,將主色轉換成空間中的點;第二,確定顏色在HSV顏色空間的范圍
我們將rgb映射成hsv,構建成三維空間坐標系。rgb轉hsv公式如下,由于java中Color工具類中已實現rgb轉hsv,因此不需要再重復實現。
其中 max 等于 r, g, b 中的最大者
其中 min 等于 r, g, b 中的最小者
為了方便計算,hsv的取值范圍分別映射成[0-180] [0-255] [0-255],如下圖所示:
參考網上資料給出的顏色取值表,我們經過了一系列的主色轉換測試,發現部分顏色的分類不能夠滿足需求,所以,在原有取值表的基礎上,耗費了大量時間進行調整范圍測試,最終找到一個相對合適的取值范圍。原hsv顏色取值表如下所示:
3.顏色檢索實現及效果展示
在確定主色所在的顏色分類空間范圍后,我們有兩種實現思路:
第一種方案,存儲素材&模板的主色hsv值,使用給定范圍空間作為入參去檢索素材&模板,也就是在空間里找點。創意平臺目前是使用ElasticSearch和MySQL對素材&模板進行存儲和檢索的,雖然兩者都支持了空間檢索,但是僅支持二維空間檢索。如果要使用其他的空間檢索工具,成本會非常高,因為需要保證數據一致性。
第二種方案,存儲素材&模板的主色hsv對應的顏色分類,即"色卡",效果等同于顏色標簽,再通過"色卡"進行檢索。實現簡單,數據一致性也可通過內部自研的數據同步工具保證。
經過多方面考量,最終,我們選擇了第二種實現方案,通過ElasticSearch實現存儲與檢索,效果不錯。我們支持了PNG、SVG、JPEG、JPG、GIF、PPT、PPTX類型文件的主色提取及關聯自動化,自動識別成功率達到99%。
"色卡"紫色檢索圖片素材的效果如下所示:
在設計團隊視角上,資源中心展示的素材&模板均由設計師設置并展示,如果要使用顏色篩選功能則需要設計師人工識別顏色并打標。現在,由系統自動化處理,可節省時間成本20~30s/次(至少節省原人工處理流程時間的70%)。另外,資源中心內展示的圖片素材&模板存量約為9000,通過系統處理可節省時間50~75h;周均上傳圖片素材&模板約100,周均節省時間33~50min;
在業務團隊視角上,圖片主色識別&關聯自動化功能上線前,日均檢索總次數為95,上線后,日均檢索總次數為122(提升約27%),其中使用"色卡"檢索的次數為18(占比約15%),由此可見,顏色檢索素材&模板功能是很重要的。
總結及展望
在顏色檢索2.0版本中,我們將顏色檢索圖片抽象成在三維空間中尋找點,首先使用中位切分法提取圖像的主色,然后構建主色的hsv空間坐標系,在空間坐標系中劃分各顏色空間領域,最后通過將主色歸類到各顏色所在空間,實現顏色關聯圖像,從而達成顏色檢索圖片的目的。
顏色檢索只是CBIR(Content-Based Image Retrieval)領域的冰山一角,而我們在功能上使用到的技術更是微不足道的一粒冰粒,在圖像特征的其他方向如紋理、形狀上,我們還有許多的路要走。
參考資料
1.https://github.com/sergeyk/rayleigh
2.https://github.com/SvenWoltmann/color-thief-java
3.https://immortalqx.github.io/2020/08/17/opencv-notes-2/
4.https://blog.csdn.net/xxboy61/article/details/88356005
5.https://www.mathworks.com/help/images/understanding-color-6.spaces-and-color-space-conversion.html
7.https://blog.csdn.net/qq_42475234/article/details/122746811
8.https://blog.csdn.net/lly_3485390095/article/details/104570885
作者:石開
來源:微信公眾號:高途技術
出處:https://mp.weixin.qq.com/s/Smf2BRoeNenaK96FPs8S0w
迎觀看 Premiere Pro 教程,小編帶大家學習 Pr 的基本編輯技巧,了解如何創建顏色溶解過渡。
在此項目中,將在兩個剪輯之間創建一個過渡,該過渡看起來與典型的交叉溶解非常不同。從編輯工作區開始,將剪輯放在時間線上,以便第一個(“傳出”)剪輯與第二個(“傳入”)剪輯重疊。重疊的長度應該至少與您希望溶解效果持續的時間一樣長。
將顏色鍵效果應用于頂部的傳出剪輯。在「效果控件」面板中,單擊「主要顏色」吸管以對要用于啟動過渡效果的顏色進行采樣。
對于戲劇性的外觀,選擇占主導地位的場景,例如天空。
在短時間內將「顏色容差值」從零到最大值 (255) 設置關鍵幀,重疊時間的一半。
會看到傳出的剪輯逐漸消失,露出其下方的傳入剪輯。
在「效果控件」面板中選擇「顏色鍵」效果并復制它。
使用快捷鍵 Command+C,然后按 Command+V。
在下面的副本中,拖動選擇,然后向前移動「顏色容差」關鍵幀,以便第一個關鍵幀與上面副本中的第二個關鍵幀對齊。
將關鍵顏色更改為仍出現在傳出剪輯中的顏色。
如果它有助于您對顏色進行采樣,放大播放序列。
添加第二個顏色關鍵點效果將刪除傳出剪輯的所有痕跡,完全顯示傳入剪輯。如果沒有,稍微增加「邊緣細化」值。
嘗試不同的起始鍵顏色,看看它們如何影響過渡。還可以使用顏色遮罩(或任何圖形)作為傳入的剪輯,使傳出的剪輯逐漸融合到另一個視頻以外的其他內容中。
以上就是在 Premiere Pro 中創建顏色溶解過渡的方法。
https://www.macz.com/mac/6072.html?id=NzY4OTYwJl8mMjcuMTg2LjkuMzM%3D
法的實現可以訪問鏈接了解:
https://github.com/hyperparameters/tracking_via_colorization
簡單地說,它可以理解為在整個視頻序列中識別唯一的對象。要跟蹤的對象通常稱為目標對象,跟蹤可以通過邊界框或實例分割來完成,有兩種類型的公共對象跟蹤挑戰。
1. 單目標跟蹤:在整個視頻序列中跟蹤感興趣的目標,例如VOT挑戰
2. 多目標跟蹤:在整個視頻序列中跟蹤多個感興趣的目標。例如:MOT挑戰
一些著名的經典的用于解決目標跟蹤CV算法的是:
1. Mean shift
2. Optical flow
3. Kalman filters
其中最著名的一種多目標跟蹤算法是SORT,是以卡爾曼濾波器為核心,并且非常成功的一種算法。
隨著深度學習時代的到來,社會上出現了非常有創新性的研究并且深度學習方法成功地勝過了傳統的CV方法來應對公共跟蹤挑戰。盡管在公共挑戰方面取得了巨大成功但深度學習仍在努力為現實世界中的問題陳述提供通用的解決方案。
在訓練深度CNN模型時,我們面臨的主要挑戰之一是訓練數據。
訓練數據:深度學習方法需要大量的數據,這幾乎每次都會成為一個瓶頸。此外,像多目標跟蹤這樣的任務很難注釋,而且這個過程變得不切實際而且成本高昂。
深度模型數據永遠不嫌多
我們都知道有監督和非監督學習技術。這是一種被稱為自監督學習的新型學習方式。在這些類型的學習中,我們試著利用數據中已經存在的信息,而不是任何外部標簽,或者有時我們說模型是自己學習的。實際上,我們所做的就是訓練CNN模型去完成一些其他的任務,間接地幫助我們實現我們的目標,這個模型自我監督。這些任務被稱為“代理任務”或“借口任務”。
代理任務的示例如下:
CNN模型學習從灰度圖像預測顏色。(來源:https://arxiv.org/abs/1603.08511)
從圖像中提取補丁并將其打亂。模型學習如何解開拼圖并按照正確 的順序排列,如圖3所示。(來源:https://arxiv.org/abs/1603.09246)
該模型學習在視頻序列中對打亂的幀進行排序。[來源:https://arxiv.org/abs/1708.01246]
許多這樣的任務可以用作計算機視覺問題的代理任務。這種訓練的一個主要好處是訓練不需要手動注釋數據,并且適合解決生活中實際的用例。
我們已經看到了并了解了什么是自監督模型,您一定猜到了我們將使用著色作為我們的代理任務的名稱。
通過給視頻著色來實現跟蹤
我們使用大量未標記視頻學習模型的視覺跟蹤無需人工監督。
arxiv.org(https://arxiv.org/abs/1806.09594)
簡介
著色是代理任務或借口任務,目標跟蹤是主要任務或下游任務。采用大規模的無標記視頻對模型進行訓練,不需要人工進行任何單一像素的標注。該模型利用視頻的時間相干性對灰度視頻進行著色。這看起來可能有點混亂,但我會慢慢給大家講明白。
模型將如何學習跟蹤
我們將取兩個幀,一個目標幀(時刻t),一個參考幀(時刻t-1),并通過模型。該模型期望通過對參考幀顏色的先驗知識來預測目標幀的顏色。通過這種方式,模型內部學會了指向正確的區域,以便從參考框架復制顏色,如圖所示。這種指向機制可以用作推理期間的跟蹤機制,我們將很快看到如何做到這一點。
模型接收一個彩色幀和一個灰度視頻作為輸入,并預測下一幀的顏色。模型學會從參考系復制顏色,這使得跟蹤機制可以在沒有人類監督的情況下學習。[來源:https://ai.googleblog.com/2018/06/self-supervised-tracking-via-video.html]
我們不復制網絡中的顏色,而是訓練我們的CNN網絡學習目標幀的像素和參考幀的像素之間的相似度(相似度是灰度像素之間),然后線性組合時使用此相似度矩陣參考幀中的真實顏色會給出預測的顏色。從數學上講,設C?為參考幀中每個像素i的真實顏色,C?為目標幀中每個像素j的真實顏色。
[資源鏈接:https://arxiv.org/abs/1806.09594]
公式1:預測顏色與參考顏色的線性組合
無論是圖像、參考幀還是目標幀都經過模型學習后對每個像素進行了低層次的嵌入,這里f?是像素i在參考幀中的嵌入,類似地,f是像素j在目標幀中的嵌入。然后,計算相似度矩陣:
公式2:用softmax歸一化的內積相似度
相似矩陣中的每一行表示參考幀的所有像素i和目標幀的像素j之間的相似性,因此為了使總權重為1,我們對每一行應用softmax。
Lets look an example with dimension to make it clear,we try to find a similarity matrix of 1 pixel from target frame.An illustration of this example is shown below.Consider reference image and target image, size (5, 5) => (25,1)for each pixel, cnn gives embedding of size (64, 1), embedding for reference frame, size (64, 25), embedding for target frame, size (64, 25), embedding for 3rd pixel in target frame, size (64, 1)Similarity Matrix, between reference frame and target pixel, j=2 =softmax , size (25, 64) (64, 1) => (25,1) => (5, 5)we get a similarity between all the ref pixels and a target pixel at j=2.Colorization, To copy the color (here, colours are not RGB but quantized colour of with 1 channel) from reference frame,, Colors of reference frame size (5, 5) => (25, 1), Similarity matrix, size (5, 5) => (1, 25)Predicted color at j=2, , size (1, 25) (25, 1) => (1, 1)From the similarity matrix in below figure, we can see reference color at i=1 is dominant(0.46), thus we have a color copied for target, j=2 from reference, i=1PS:1. ? denotes transpose2. matrix indices starts from 0
(a)為2幀大小(5,5),(b)為參考幀嵌入與目標像素在j =2處嵌入的內積,(c) softmax后的相似度矩陣,(d)相似度矩陣與參考幀真顏色的線性組合[來源:https://github.com/hyperparameters/tracking_via_colorization]
同樣,對于目標幀中的每個目標像素((5,5)=> 25個像素),我們將會有一個相似矩陣的大小(5,5),即大小為(5,5,25)的完整相似度矩陣A?? =(25,25)。
在實現中,我們將使用(256 x 256)圖像擴展相同的概念。
圖像量化
第一行顯示原始幀,第二行顯示來自實驗室空間的ab顏色通道。第三行將顏色空間量化到離散的容器中,并打亂顏色,使效果更加明顯。[來源:https://arxiv.org/abs/1806.09594]
顏色是空間頻率偏低,所以我們可以處理低分辨率的幀。我們不需要C(255,3)顏色組合,所以我們創建了16個聚類并將顏色空間量化為這些聚類。現在我們只有16種獨特的顏色簇(見上圖第3欄)。聚類是用k-均值完成的。16個群集會有一些顏色信息的丟失,但足以識別物體。我們可以增加聚類的數目來提高著色的精度,但代價是增加計算量。
[來源:https://arxiv.org/abs/2002.07793]
為了將圖像量化成簇,我們將使用LAB顏色空間的AB通道而不是RGB顏色空間通道。上面的圖顯示了RGB和LAB通道間的相關性,從圖中我們可以得出結論
RGB往往比LAB更具相關性。
LAB將強制模型學習不變性,它將強制其學習更強大的表示形式,而不是依賴于本地顏色信息。
可以使用sklearn的KMeans軟件包進行聚類。
這個類將用于制作顏色的簇,我們將把它存儲為一個pickle。
注意:我使用pytorch來進行實現,它遵循(N, C, H, W)格式。在處理矩陣重塑時要記住這一點。如果你對形狀有任何疑問,請隨時與我們聯系。
該模型從參考幀中學習為視頻幀著色。[來源:https://ai.googleblog.com/2018/06/self-supervised-tracking-via-video.html]
輸入
該模型的輸入是四個灰度視頻幀,其下采樣為256×256。三個參考幀和一個目標幀。
首先,我們將所有的訓練視頻壓縮到6fps。然后預處理框架以創建兩個不同的集合。一個用于CNN模型,另一個用于著色任務。
- Video fps is reduced to 6 fpsSET 1 - for CNN Model- Down sampled to 256 x 256- Normalise to have intensities between [-1, 1]SET 2 - for Colourization- Convert to LAB colour space- Downsample to 32 x 32- Quantize in 16 clusters using k-means- Create one-hot vector corresponding to the nearest cluster centroid
所用的主干是ResNet-18,因此其結果與其他方法相當。ResNet-18的最后一層被更新為32 x 32 x 256的尺寸輸出。ResNet-18的輸出隨后被傳送到3D-Conv網絡,最終輸出為32 x 32 x 64。(下面的代碼塊顯示了從ResNet-18網絡獲取輸入的3D網絡)
訓練可分為以下3個步驟:
1. 網絡傳遞
我們將使用SET 1的預處理幀,即通過網絡傳遞大小為(256 x 256)的4個灰度幀,以獲得具有64個通道的(32 x 32)空間圖。對于(32 x 32)圖像的每個像素,這可以解釋為64維嵌入。因此,我們有四個這樣的像素級嵌入,三個用于參考圖像,一個用于目標圖像 。
2. 相似度矩陣
利用這五個嵌入,我們找到了參考幀和目標幀之間的相似矩陣。對于目標幀中的像素我們將獲得一個相似度值,其中所有三個參考幀中的所有像素均通過softmax歸一化為1。
3. Colourization著色處理
我們將使用SET 2的預處理幀,即將四個降采樣為(32 x 32)并量化的幀用于著色。將三個參考幀與相似度矩陣相結合,得到預測的量化幀。我們發現了具有預測顏色的交叉熵損失,(記住,我們量化幀到16個聚類,現在我們有16個類別。我們發現在這些顏色上有多類交叉熵損失。
跟蹤預測的例子[來源:https://ai.googleblog.com/2018/06/self-supervised-tracking-via-video.html]
在學習了著色的任務后,我們有了一個模型,可以計算一對目標框架和參考框架的相似矩陣a??。對于跟蹤的實際任務,我們利用了標簽空間中模型是非參數的這一特性。我們簡單地重復使用等式1來傳播,但不是傳播顏色,而是傳播類別的分布。對于第一幀,我們有真實框掩碼,我們將所有實例掩碼布置為一獨熱矢量c?(這類似于訓練期間使用的量化顏色的一獨熱矢量)。將c?與我們的相似性矩陣A相結合,以找到掩碼的新位置,但請記住,隨后幾幀中的c?預測將變得很柔和,表明模型的置信度。為了做出艱難的決定,我們可以簡單地選擇最自信的那一類。推理算法為:
失效模式
讓我們來討論一下,當模型在某些場景中趨于失敗時,這主要是著色失敗的情況,這意味著著色與跟蹤有很高的相關性。
在以下情況下會發現一些故障:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。