双三次插值,一次插值和二次插值
简单介绍超分辨率图像重建技术分为基于插值、基于重建、基于学习三类。基于插值的方法包括最近邻插值法、双线性插值法和双立方插值法等。这里主要介绍基于双三次插值的实现,其他的网络资料丰富,不再赘述。
代码实现pip3安装opencv-contrib-pythonpip3安装数组导入cv2导入数字作为npimport mathimport系统,时间导入操作系统#插值内核插值内核def u(s,a):if(ABS(s)=0)(ABS(s)=1):return(a ^ 2)*(ABS(s)* 3)-(a ^ 3)*(ABS(s)* 2)1 elif(ABS(s)1)(ABS(s)=2):return a*(ABS(s)* 3)-(5 * a)*(ABS(s)* 2)(8 * a)* ABS(s)-4 * a return 0 # padding def padding(img,h,w,C): zimg=npreturn zimgdef get _ Progress BAR _ str(Progress):END=170 MAX _ LEN=30 BAR _ LEN=int(MAX _ LEN * Progress)return( Progress:[ = * BAR _ LEN( if BAR _ LEN MAX _ LEN else ) *(MAX _ LEN-BAR _ LEN))%。1f % %(进度* 100 .))#双三次运算双三次插值def bicubic(img,ratio,a):#获取图像大小H,W,C=img.shape img=padding(img,H,W,C)#创建新图像dH=math。地板(H *比率)dW=数学。下限(W *比率)dst=NP。零((dH,dW,3))H=1/比率打印(开始双三次插值)打印(需要一点时间.)inc=0对于区间丙(丙):对于区间j(dH):对于区间I(dW):x,y=i * h 2,j * h 2 x1=1 x-math。楼层(x)x2=x-数学。floor(x)x3=数学。floor(x)1-x x4=数学。floor(x)2-x y1=1y-数学。floor(y)y3=数学。floor(y)1-y y4=数学。floor(y)2-y mat _ l=NP。matrix([[u(x1,a),u(x2,a),u(x3,a),u(x4,a c]=np.dot(np.dot(mat_l,mat_m),mat _ r)# Print progress Inc=Inc 1 sys .标准错误。write( r 033[K get _ progress bar _ str(Inc/(C * dH * dW)))sys。标准错误。flush()sys。标准错误。写( n )sys。标准错误。flush()返回dst #比例因子比率=4 #放大倍数为4 #系数a=-1/2 #读取图像img=cv2。im Read( comic _ lr。png )dst=bicubic(img,ratio,a)print(Completed!)cv2。我写( bicubic _ comic _ lr。巴布亚新几内亚,夏令时)实验效果原图
四倍重建放大