1. 運動估計的搜索演算法
匹配誤差函數,可以用各種優化方法進行最小化,這就需要我們開發出高效的運動搜索演算法,
主要的幾種演算法歸納如下: 為當前幀的一個給定塊確定最優位移矢量的全局搜索演算法方法是:在一個預先定義的搜索區域
內,把它與參考幀中所有的候選塊進行比較,並且尋找具有最小匹配誤差的一個。這兩個塊之間的
位移就是所估計的 MV,這樣做帶來的結果必然導致極大的計算量。
選擇搜索區域一般是關於當前塊對稱的,左邊和右邊各有 Rx 個像素,上邊和下邊各有 Ry個像素。
如果已知在水平和垂直方向運動的動態范圍是相同的,那麼 Rx=Ry=R。估計的精度是由搜索的步長決定的,步長是相鄰兩個候選塊在水平或者垂直方向上的距離。通常,沿著兩個方向使用相同的步長。在最簡單的情況下,步長是一個像素,稱為整數像素精度搜索,該種演算法也稱為無損搜索演算法。 由於在窮盡塊匹配演算法中搜索相應塊的步長不一定是整數,一般來說,為了實現 1/K像素步長,對參考幀必須進行 K倍內插。根據實驗證明,與整像素精度搜索相比,半像素精度搜索在估計精度上有很大提高,特別是對於低清晰度視頻。
但是,應用分數像素步長,搜索演算法的復雜性大大增加,例如,使用半像素搜索,搜索點的總數比整數像素精度搜索大四倍以上。
那麼,如何確定適合運動估計的搜索步長,對於視頻編碼的幀間編碼來說,即使得預測誤差最小化。 快速搜索演算法和全局搜索演算法相比,雖然只能得到次最佳的匹配結果,但在減少運算量方面效果顯著。
1) 二維對數搜索法
這種演算法的基本思路是採用大菱形搜索模式和小菱形搜索模式,步驟如圖 6.4.20 所示,從相應於零位移的位置開始搜索,每一步試驗菱形排列的五個搜索點。下一步,把中心移到前一步找到的最佳匹配點並重復菱形搜索。當最佳匹配點是中心點或是在最大搜索區域的邊界上時,就減小搜索步長(菱形的半徑) 。否則步長保持不變。當步長減小到一個像素時就到達了最後一步,並且在這最
後一步檢驗九個搜索點。初始搜索步長一般設為最大搜索區域的一半。
其後這類演算法在搜索模式上又做了比較多的改進,在搜索模式上採用了矩形模式,還有六邊形模式、十字形模式等等。
2) 三步搜索法
這種搜索的步長從等於或者略大於最大搜索范圍的一半開始。第一步,在起始點和周圍八個 「1」標出的點上計算匹配誤差,如果最小匹配誤差在起始點出現,則認為沒有運動;第二步,以第一步中匹配誤差最小的點(圖中起始點箭頭指向的「1」)為中心,計算以「2」標出的 8個點處的匹配誤差。注意,在每一步中搜索步長搜都比上一步長減少一半,以得到更准確的估計;在第三步以後就能得到最終的估計結果,這時從搜索點到中心點的距離為一個像素。
但是,上述一些快速演算法更適合用於估計運動幅度比較大的場合,對於部分運動幅度小的場合,它們容易落入局部最小值而導致匹配精度很差,已經有很多各種各樣的視頻流證明了這一點。
現在,針對這一缺點,國內外諸多專家學者也提出了相應的應對措施,特別是針對H.264編碼標准要求的一些快速演算法的改進,並取得卓越的效果。例如[7]中提到的基於全局最小值具有自適應性的快速演算法,這種演算法通過在每一搜索步驟選擇多個搜索結果,基於這些搜索結果之間的匹配誤差的不同得到的最佳搜索點,因而可以很好地解決落入局部最小值的問題。
[8]中提到一種適用於H.264的基於自適應搜索范圍的快速運動估計演算法,經過實驗證明對於如salesman等中小運動序列,其速度可接近全局搜索演算法的400倍,接近三步搜索演算法的4倍;而對於大運動序列,如table tennis,該演算法則會自動調節搜索點數以適應復雜的運動。當從總體上考察速度方面的性能時,可以看到,該演算法平均速度是全局搜索演算法的287.4倍,三步搜索的2.8倍。 分級搜索演算法的基本思想是從最低解析度開始逐級精度的進行不斷優化的運動搜索策略,首先取得兩個原始圖象幀的金子塔表示,從上到下解析度逐級變細,從頂端開始,選擇一個尺寸比較大的數據塊進行一個比較粗略的運動搜索過程,對在此基礎上進行亞抽樣(即通過降低數據塊尺寸(或提高抽樣解析度)和減少搜索范圍的辦法)進行到下一個較細的級來細化運動矢量,而一個新的搜索過程可以在上一級搜索到的最優運動矢量周圍進行。在亞抽樣的過程中也有著不同的抽樣方式和抽樣濾波器。這種方法的優點是運算量的下降比例比較大,而且搜索的比較全面。
缺點是由於亞抽樣或者濾波器的採用而使內存的需求增加,另外如果場景細節過多可能會容易落入局部最小點。 由於物體的運動千變萬化,很難用一種簡單的模型去描述,也很難用一種單一的演算法來搜索最佳運動矢量,因此實際上大多採用多種搜索演算法相組合的辦法,可以在很大程度上提高預測的有效性和魯棒性。
事實上,在運動估計時也並不是單一使用上述某一類搜索演算法,而是根據各類演算法的優點靈活組合採納。在運動幅度比較大的情況下可以採用自適應的菱形搜索法和六邊形搜索法,這樣可以大大節省碼率而圖象質量並未有所下降。在運動圖象非常復雜的情況下,採用全局搜索法在比特數相對來說增加不多的情況下使得圖象質量得到保證。 H.264 編碼標准草案推薦使用 1/4分數像素精度搜索。[6]中提到在整像素搜索時採用非對稱十字型多層次六邊形格點運動搜索演算法,然後採用鑽石搜索模型來進行分數像素精度運動估計。
解碼器要求傳送的比特數最小化,而復雜的模型需要更多的比特數來傳輸運動矢量,而且易受雜訊影響。因此,在提高視頻的編碼效率的技術中,運動補償精度的提高和比特數最小化是相互矛盾的,這就需要我們在運動估計的准確性和表示運動所用的比特數之間作出折中的選擇。它的效果與選用的運動模型是密切相關的。
2. 榪愬姩浼拌$殑鍑嗗垯鍒嗙被
榪愬姩鎼滅儲鐨勭洰鐨勫氨鏄鍦ㄦ悳緔㈢獥鍐呭繪壘涓庡綋鍓嶅潡鏈鍖歸厤鐨勬暟鎹鍧楋紝榪欐牱灝卞瓨鍦ㄧ潃濡備綍鍒ゆ柇涓や釜鍧
鏄鍚﹀尮閰嶇殑闂棰橈紝鍗沖備綍瀹氫箟涓涓鍖歸厤鍑嗗垯銆傝屽尮閰嶅噯鍒欑殑瀹氫箟涓庤繍綆楀嶆潅搴﹀拰緙栫爜鏁堢巼閮芥槸鐩存帴
鐩稿叧鐨勶紝閫氬父鏈夊備笅鍑犵被姣旇緝甯哥敤鐨勫尮閰嶅嚱鏁扮殑瀹氫箟錛
璁懼綋鍓嶅撫 f2錛屽弬鑰冨撫f1錛
錛1錛夋渶灝忓潎鏂瑰樊鍑芥暟錛圡SE錛
MSE (MV) =危|f2錛坸錛孧V錛-f1(x)|
2
(3.34)
錛2錛夋渶灝忓鉤鍧囩粷瀵瑰艱宸錛圡AD錛夌瓑鏁堜簬甯哥敤鐨勭粷瀵瑰樊鍊煎拰錛圫AD錛夊噯鍒,鎬ц兘寰堝ソ,鑰屼笖鐩稿圭畝鍗
鐨勭‖浠墮渶奼傦紝鍥犺屽緱鍒頒簡鏈騫挎硾鐨勫簲鐢ㄣ
MAD (MV) =危|f2錛坸錛孧V錛-f1(x)| (3.35)
錛3錛夐槇鍊煎樊鍒璁℃暟錛圢TD錛
NTD錛圡V錛=危G錛坒2錛坸錛孧V錛-f1(x)錛 (3.36)
鍏朵腑錛
褰 | 偽錛嵨 | >T0 鏃訛紝G錛埼憋紝尾錛=1錛
褰 | 偽錛嵨 | <T0 鏃訛紝G錛埼憋紝尾錛=0 (3.37)
鐢變簬鍦ㄧ敤鍧楀尮閰嶇畻娉曡繘琛岃繍鍔ㄤ及璁$殑榪囩▼涓錛屽埄鐢ㄥ尮閰嶅噯鍒欏嚱鏁拌繘琛屽尮閰嶈宸鐨勮$畻鏄鏈涓昏
鐨勮$畻閲忥紝鍥犳わ紝鎴戜滑鍙浠ヤ粠榪欐柟闈㈣繘涓姝ュ噺灝戣$畻閲忋傜敱浜庡浘璞$殑甯у唴涔熷叿鏈夌浉鍏蟲э紝鍦ㄨ$畻璇
宸鍖歸厤鍑芥暟鏃訛紝鍙浠ュ彧璁╁浘璞″潡涓鐨勯儴鍒嗗儚緔犲弬涓庤繍綆楋紝灝嗗潡涓鐨勬墍鏈夊儚緔犵粍鎴愪竴涓闆嗗悎錛岄偅涔堝弬
涓庤$畻鐨勮繖閮ㄥ垎鍍忕礌闆嗗悎灝辨槸瀹冪殑瀛愰泦錛岃繖縐嶈宸鍖歸厤鐨勬柟娉曡縐頒負瀛愰泦鍖歸厤娉曘傚疄楠岀粨鏋滆〃鏄庯紝
鍦ㄥ尮閰嶈宸鏃犳槑鏄懼炲姞鐨勬儏鍐典笅錛岄噰鐢ㄥ瓙闆嗗尮閰嶅彲浠ュぇ澶у噺灝戞瘡甯у浘璞$殑騫沖潎鎼滅儲鏃墮棿銆
3. 求用python計算圓周率小數點後10萬位的最快演算法 ,最好有代碼,謝謝
#-*-coding:gbk-*-
from__future__importdivision
####################導入時間模塊
importtime
###############計算當前時間
time1=time.time()
################演算法根據馬青公式計算圓周率####################
number=int(raw_input('請輸入想要計算到小數點後的位數n:'))
#多計算10位,防止尾數取捨的影響
number1=number+10
#算到小數點後number1位
b=10**number1
#求含4/5的首項
x1=b*4//5
#求含1/239的首項
x2=b//-239
#求第一大項
he=x1+x2
#設置下面循環的終點,即共計算n項
number*=2
#循環初值=3,末值2n,步長=2
foriinxrange(3,number,2):
#求每個含1/5的項及符號
x1//=-25
#求每個含1/239的項及符號
x2//=-57121
#求兩項之和
x=(x1+x2)//i
#求總和
he+=x
#求出π
pai=he*4
#舍掉後十位
pai//=10**10
############輸出圓周率π的值
paistring=str(pai)
result=paistring[0]+str('.')+paistring[1:len(paistring)]
printresult
time2=time.time()
printu'總共耗時:'+str(time2-time1)+'s'
python pi.py