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