如何通過多幀影像進行超解析度重構?

超解析度重構_百度百科

問題技術大致意思是通過一系列低解析度的圖像以特定演算法得到一幅較高解析度的圖像,
不知道能否利用PS實現,或者有其他軟體可以實現的。
-------------------------
某些答友沒有看清問題,不是單純的低解析度轉高解析度技術,而是一種通過序列圖像計算處理得到高解析度圖形的技術。


如果對單幀去馬賽克有興趣的朋友,可以參考我的專欄文章:提高駕駛技術:用GAN去除(愛情)動作片中的馬賽克和衣服 - 知乎專欄

=========== 分割線:20170625 ===========

鑒於這個問題收到過不少反饋,補充兩句為什麼要用遺傳演算法:
1) 回答問題的時候手頭剛好有個GA工具包(基於MIT的GALib),2)「屌」的例子是個二值圖案,3)可以做出相變般酷炫的動畫(http://images.cnitblog.com/blog/609274/201411/141950421945566.gif)
作為一個玩具例子,我覺得屌還是挺不錯的,但是強調下如果用到實際中,1)GA是不合適,屌字也不合適,尤其是這麼極端的圖案,不管L幾Norm都是降不下去的。
另,排版更佳的答案請移步:http://www.cnblogs.com/frombeijingwithlove/p/4098072.html

=========== 分割線:20151103 ===========

舉個玩具例子來講一下大概的思想吧:

首先打開畫圖板,寫下一個

線條分明,軟綿無力,面對這麼屌的一個字,我決定拍一段長達一秒的8x8解析度的視頻:

注意到知乎居然不能現實動圖,站外鏈接如下:

http://images.cnitblog.com/blog/609274/201411/141950421945566.gif

取出幾幀示意如下:

因為手抖,並且相機解析度低,已經沒了屌樣。

其實上面是我先把原圖的圖像隨機平移,然後線性插值降採樣到8x8解析度得到的。在這個過程中我模擬了兩件事:1) 隨機平移模擬視頻拍攝過程中的隨機抖動,這是從多幀圖像中重建超解析度圖像的關鍵,後面我會講到,同時這也是符合現實生活規律的,雖然宏觀來說拍攝一段靜止的視頻很容易,可是在像素級別任何微小的畫面移動都可以被體現出來。2) 線性插值降採樣模擬在CMOS上成像時圖像元素小於像素時細節的丟失,線性插值是因為像素記錄的值是在像素原件有效感光面積上的平均曝光強度。這兩個過程的示意圖如下:

首先看第一個圖中兩個圓的例子,這兩個圓大小完全一樣,因為成像位置不同,圓在每個像素上覆蓋的面積也不一樣,對應像素的灰度會不一樣,最後在像素陣列上對應了不同的圖案,而這個信息正是進行超解析度重建的基礎。同樣的對於寫下的屌字,在不同的抖動位置上,也會得到不一樣的低解析度圖案。

所以問題可以描述為,一幅高解析度的圖像I_{H},經過n次某種變換[{{I}_{L}}=Fleft( {{I}_{H}} 
ight)]後得到了n幅低解析度圖像,其中第i幅圖像為I_{L,i}。而具體到視頻錄製中,"某種變換"就是每次拍攝每一幀的時候記錄圖像的過程,具體到這個例子中F()就是手抖導致的圖像平移和線性插值的降採樣。

所以本質上來講從多幀低解析度圖像中進行超解析度重建是個Inference的問題,高解析度圖像中的細節信息在錄製成低解析度幀的時候導致了丟失,然而抖動帶來的位移相當於給了多一個維度的信息讓我們可以通過演算法對信息進行恢復,從某種意義上講抖動保存了原來圖像的細節信息。

抖動有多重要呢,先來做一個簡單的試驗,儘管採樣到的幀解析度都低得可憐,可是我們如果把抖動的信息恢復出來,也就是把抖動後的這些低解析度圖片對齊,然後求一個平均,結果如下:

這時候已經可以勉強看出屌樣了。。

進一步的,我們想推斷出更高解析度的圖像,一個很自然的想法就是對超解析度圖像進行猜測,把猜測的圖像變換後的結果和錄製採樣到的結果進行對比,然後把差異作為目標函數進行優化:

[min sumlimits_{i=1}^{n}{left| {{I}_{L,i}}-Fleft( {{I}_{H,i}} 
ight) 
ight|}]

對於上面這個優化問題,如果抖動的範圍完美覆蓋了一個像素周期以內的所有區域,並且每一幀都採樣到了這個區域內的所有的點的話,那麼理論上是可以恢復出高解析度圖像的,然而通常情況並非如此,比方說我想把我例子中24幀8x8的視頻恢復成一幅48x48的高解析度圖像,也就是6倍的解析度提升,那麼24幀顯然不夠,這種情況叫做ill-posed,也就是說有無數個解可以滿足這個優化問題,所以需要一些regularization。通常而言我們看到的圖像一般都是較為平滑的,而不是像老式電視機里沒信號是那樣滿屏的雪花斑雜訊,所以可以加入一項抑製圖像梯度的項:

[min sumlimits_{i=1}^{n}{left| {{I}_{L,i}}-{{F}_{i}}left( {{I}_{H}} 
ight) 
ight|}+left| 
abla {{I}_{H}} 
ight|]

注意我這裡用的都是L1 Norm,一般來說L1的優點是使梯度的分布更為稀疏,這樣能更好的保存邊緣,另外計算量也小。

用遺傳演算法來解這個優化問題試試,得到結果如下:

0代:

10代

20代

50代

100代

200代

500代

1000代

2000代

20000代

進化過程動圖的鏈接:
http://images.cnitblog.com/blog/609274/201411/181506083165247.gif
因為是GA,所以看上去還是有一點瑕疵,不過屌樣已經很明顯了,如果繼續優化應該能得到完美的結果。當然了,如前所述,我只是用一個玩具例子講一下超解析度重構的基本思想,具體的問題中,除了抖動和低解析度採樣,還有鏡頭PSF(Point Spread Function),圖像的轉動和其他形變,場景中的物體移動等因素,優化演算法也不會是GA這種相比起來漫無目的的搜索(雖然我還修改了變異和交叉函數)。另外降採樣我這裡用的是線性插值,這包含一個假設,就是每個像素的感光元件的有效感光面積接近這個元件在感測器表面佔用的面積,而這個假設通常是很難成立的,尤其是對現在消費級相機和手機中流行的CMOS,還有一種常見的降採樣是點採樣,這個就比線性採樣相對而言簡單一些,然而這個通常也不成立,並且一般應用的消費級CMOS還要考慮Bayer陣列的問題。

至於樓主問到PS能否實現,據我所知應該沒有。不過OpenCV里做這件事已經非常簡單了,一個簡化版的代碼如下:

cv::Ptr& frames = cv::superres::createFrameSource_Video( "diao.mp4" );
cv::Ptr& super_res = cv::superres::createSuperResolution_BTVL1();
super_res-&>setInput( frames );

cv::Mat super_resolved_image;
super_res-&>nextFrame( super_resolved_image );

cv::imshow( "Super Resolved Image", super_resolved_image );
cv::waitKey( 0 );

我用我的高級智能手機拍了一段長達2秒的176x144解析度的視頻測試了一下這段代碼:

視頻截圖(為方便比較用Nearest Neighbor放大到和重建圖像等同解析度):

重建的超解析度圖像:

效果還行。通常情況下超解析度重建運算量還是比較大的,所以實際情況代碼不會這麼簡單,一個用到GPU的基於OpenCV的例子可以在OpenCV的sample code里找到。


這個Photoshop是可以做到的。先貼效果(圖片來自於http://photoncollective.com/enhance-practical-superresolution-in-adobe-photoshop)

反例。。。

演算法和高票答案說的差不多,但相對簡單很多。就是先對齊然後取平均。沒有任何啟發搜索,或者字典重建,這是因為在實際產品中,用戶會塞進來各種各樣奇怪的圖片,而且對質量期待很高。但是這些複雜的演算法往往有各自的優勢和局限,所以現在先弄了最簡單但是普適的演算法。

然後至於這個怎麼做,可以看上面貼的英文原貼,也可以看我的這個回答:https://www.zhihu.com/question/52629233/answer/131628360 只要把最後一步從median改成mean,然後圖片尺寸拉大就好。


這個沒有系統的研究過,但是對高分辨成像系統設計有一些了解的。第一答案@達文西已經相對精彩了,那我就對他說的相對模糊的地方從航天應用和相機設計領域進行簡要解答一下,因為手機碼子 對於圖片和公式 難以插入和修改,請見諒。
成像系統 因為 ccd 和cmos 感測器的 感光元 尺寸和讀出電路的設計 很難做到像元在 焦平面上 百分百填充(ccd可以做到,這樣的感測器我是沒有遇到和聽過報導),因此可以肯定 在成像的過程中 是對真實場景的欠採樣,即成的像不是 真實場景的 完全表達,有信息缺失,若考慮到 成像時 相機抖動,平台轉動等因素 信息缺失就更多了。高解析度重建就是 盡量從一系列 欠採樣的圖像中恢復原圖想(信號處理的角度就是 在低於奈奎斯特採樣頻率的條件下恢復出真實信號,信號重建)。系統傳遞函數 MTF 可以用來表徵 整個相機的,物理場景與 MTF的卷積 就是 我們相機出來的 圖像了,MTF 與光學系統相關的部分 通常被稱為點擴散函數@達文西有提到),同時 MTF與探測器像元的尺寸和排列有關,與探測器的曝光時間有關 ,與探測器的讀出電路(ROIC)有關,還與 探測器後端的 處理電路帶寬等有關,在設計過程中需要各專業人員配合的,從相機需求開始 確定相機的各個參數,然後 探測器人員進行探測器的設計,光學鏡頭的設計,電子學部分設計的。
對真是場景進行完全採樣才是 活的 高解析度的根本保證,高解析度 圖像的獲取有 時間過採樣 和 空間過採樣兩種方式(微掃描亦是,用於凝視成像系統中)。先說時間過採樣,這個通常被用在推掃成像系統中,使相機沿推掃方向每半個像元解析度(瞬時視場)進行一次成像,得到二倍過採樣圖像(同理有三倍,四倍~),相對於一倍採樣解析度提高接近二倍,需要進行一個方向的融合才能恢復原圖像;空間過採樣在推掃成像系統中是 通過像元結構的排列設計實現的,即垂直推掃方向,像元排列錯開一個像元的(至少兩列)可以實現完全採樣(錯開半個像元的就是二倍空間過採樣了,~),輸出的兩幅圖像可以像元簡單拼接 實現高解析度圖像(垂直掃描方向)。最後將兩個方向得到的一個成像組(時間採樣倍數*空間採樣倍數 幅)進行融合就可以實現真正的高解析度影像了。@達文西的 插值擬合 講採樣其實實現的就是這個過程(空間降採樣),他的高解析度重建就是對 空間講採樣圖像 高解析度重建。微掃描技術亦是提高 成像系統解析度的手段,多用與凝視成像系統中,就是每次拍攝的時候 在第一次成像之後,相機左移一個瞬時視場 進行一次成像,然後下移一個瞬時視場再次成像,再次右移一個瞬時視場再次成像,這樣一組圖像(四幅)就是對一個空間的完全採樣了,對他們進行重建即可實現真實高解析度圖像。(微掃描技術因微掃描方式不同,也被分為幾類的,具體的應該能搜到的)
從以上分析過程中 最明顯的 結論 就該是 航天相機 對 掃描控制的精讀 要求了,在地面(星下點)1m解析度,相機(光學鏡頭) 要移動 多少″(秒,度數單位)了。

以上就是作為成像系統設計人員對高解析度重建的物理實現的認識了。
%%%
一個半小時過去了,寫的扔不形象具體,以後有時間慢慢給大家貼圖(pc端知乎玩的少)。


關注問題,也是剛剛自己了解的相關信息,但願對大家有所幫助。
突然發現很有意思的一個技術,但是沒多少比較新的信息。
---------------------------------------------
1.開發相關技術的公司和軟體。

CEVA公司推出世界首個用於嵌入式應用的基於軟體的Super-Resolution (超解析度, SR)技術,為低功率移動設備帶來PC系統同等成像性能,這個Super-Resolution演算法是由CEVA公司內部的軟體工程技術專家開發,並且經過全面優化,在CEVA-MM3101成像和視覺平台上實時運行使用最少的處理工作負荷和極小的存儲器帶寬,例如,採用28nm工藝,CEVA-MM3101處理器能夠處理四個500萬像素圖像,並且在幾分之一秒內將它們融合進單一高解析度2000萬像素圖像中,同時僅僅消耗低於30mW的功率。

2.一份有關超解析度的...報告(PPT),英語渣,看不懂

[轉載]一周小記+Super Resolution_水滴石穿

3.一個國產超解析度重建軟體(我沒下載成功)。

本人第一件軟體作品——圖像超解析度重建軟體ViV_lancer_新浪博客

4.相關技術信息。

小波變換在圖像壓縮中的應用


ok,我來填坑了,這種實現方式叫做序列超分辨重建。

首先,為了說明白重建的原理,我們得先了解明白拍攝的圖像為什麼會模糊。

實際獲得的低解析度圖像可以認為是利用光學成像設備對原始高解析度場景進行觀測的結果,而觀測過程不可避免的會受到鏡頭光學模糊、欠釆樣、雜訊等降質因素的影響。

所以對於一個圖像採集的系統來說,在不考慮雜訊得情況下解析度取決於前方光學系統的解析度和後方CCD/CMOS的空間採集頻率。一般來說,在光學系統的解析度低的情況下我們拍到的一副圖像就在邊緣或者細節處是模糊的,在圖像感測器的空間解析度較低的時候,圖像呈現出的效果就是細節上的混淆(如果對一個標準的解析度卡進行拍攝就會看到高頻的地方會產生摩爾條紋)。一般來說,目前我們能買到的相機鏡頭的解析度都很高,空間截止頻率會高於我們圖像感測器的空間採樣頻率。這樣我們圖像模糊的主要部分就來自與感測器本身的採樣頻率。(像元間距)

可以從上圖中看到,隨著線對數的變密,拍攝到的條紋發生了混疊(9左右),再向後就直接重合在了一起。混疊的部分是就是摩爾條紋。

為什麼會產生摩爾條紋,或者說我們所說的邊緣模糊。奈氏採樣定理(這裡忽略大神們的壓縮感知)告訴我們,在只有採樣頻率大於實際頻率的二倍的時候我們才能完整的還原出一個信號。同樣,對於二維的空間採樣來說,如果空間頻率和CCD的採樣頻率相接近的時候我們也獲得不到一個完整的圖像,會發生採樣的重疊。

好的,我覺得有些同學看到這裡會懵掉,我們換一個方式來看一下這個問題,假設這裡我們所採用的圖像感測器的像素之間的間隔為10um,空間中的一個物體A

它由一半黑色和一半白色組成,經過光學系統的成像和縮小後,我們假設到達相面的像的大小只有8um小於感測器一個像元的大小,那麼這樣我們最終獲得A在相機上成的像就是黑色和白色光強的平均,一個灰色的點。這是理想情況,實際上由於雜訊的影響即使A在相面有20um的大小我們也有可能分辨不出來。

這裡的A代表著我們圖像拍攝的細節部分,如果要拍攝的細節經過光學系統到達相面的大小會小於或者接近與和感測器的像元尺寸,或者說處於一個數量級我們都可能會損失掉這些細節部分。

由此看來,我們如果要提升圖像的解析度也就是清晰程度,最直接解決方法就是換一個像元更小的感測器或者更換光學系統,讓其到達相面的像更大一些。

-----------------------------------------------先寫這麼多,晚上回來接著補----------------

----------------------------------------------------------------------------------------------------------

這可可以用凸集投影或者迭代反投影的方法解決。

前兩天剛剛自己寫過這個,如果樓主感興趣可以貼出來一些實驗過程


我聽說過有個牛人 本科的時候學的計算機 碩士的時候學的影像分析 聽說當年照片偽造野生華南虎就是他們小組給偵破的 博士的時候學的好像是印表機刑偵 具體怎麼叫的記不得了

這個技術肯定是有 如果是個大神 可能會通過自己的技術 綜合多張照片再進行模擬運算 還原出來高清圖像 類似於蒙太奇效果吧 我估計這個多用於藝術創作

但是如果說用某個軟體去把幾個照片捏成一個高清照片(能達到取證效果)如果可能的話 估計個例要求條件是比較高的 也就是說估計只有幾個特殊符合要求的才能達到滿意的效果 普遍性估計不大 畢竟從有做到無很簡單 但是從無做到有 就不是能通過計算機根據幾個參數能算出來的了 上文提到人專門的 就把這個當成一個學科去研究呢 題主要想做到這個 估計不是那麼容易 或許找專業從事這個工作的人諮詢一下 能有更大的收穫


讓我想起了我的本科論文,基於稀疏編碼的超解析度重建,不過重建的是視頻里的每一幀圖像……


本發明公開了一種基於KSVD字典學習的多任務超解析度圖像重構方法,主要解決現有方法在高放大因子下重構圖像質量下降比較嚴重的問題。其主要步驟為:首先輸入訓練圖像,對其進行濾波提取特徵;再抽取圖像小塊構造一個矩陣M,將其分成K類,得到K對初始字典H1,H2...Hk和L1,L2...Lk;然後利用KSVD方法將K對初始字典H1,H2...Hk和L1,L2...Lk,訓練成K對新的字典Dh1,Dh2...Dhk和Dl1,Dl2...Dlk;最後利用多任務演算法和字典Dh1,Dh2...Dhk和Dl1,Dl2...Dlk,對輸入的低解析度圖像進行超解析度重構,得到最終重構圖像。本發明能夠對各種自然圖像,包括動植物和人等非紋理類圖像以及建築物等紋理性比較強的圖像進行重構,並且在高放大因子條件下能夠有效提高重構圖像質量。


推薦閱讀:

除了 ArcGIS 還有沒有其他比較好的地圖製作軟體?
索尼(Sony)的軟體實力究竟如何?
微軟的哪些產品是收購來的?

TAG:AdobePhotoshop | 軟體 | MATLAB |