綁定帳號登入

Android 台灣中文網

tag 標籤: 双线

相關日誌

分享 Python 实现双线性插值 三次内插法
嵐風 2021-8-25 19:15
from PIL import Image import matplotlib.pyplot as plt import numpy as np import math def NN_interpolation(img,dstH,dstW): scrH,scrW,_=img.shape retimg=np.zeros((dstH,dstW,3),dtype=np.uint8) for i in range(dstH): for j in range(dstW): scrx=round((i+1)*(scrH/dstH)) scry=round((j+1)*(scrW/dstW)) retimg =img return retimg def BiLinear_interpolation(img,dstH,dstW): scrH,scrW,_=img.shape img=np.pad(img,((0,1),(0,1),(0,0)),"constant") retimg=np.zeros((dstH,dstW,3),dtype=np.uint8) for i in range(dstH): for j in range(dstW): scrx=(i+1)*(scrH/dstH)-1 scry=(j+1)*(scrW/dstW)-1 x=math.floor(scrx) y=math.floor(scry) u=scrx-x v=scry-y retimg =(1-u)*(1-v)*img +u*(1-v)*img +(1-u)*v*img +u*v*img return retimg def BiBubic(x): x=abs(x) if x=1: return 1-2*(x**2)+(x**3) elif x2: return 4-8*x+5*(x**2)-(x**3) else: return 0 def BiCubic_interpolation(img,dstH,dstW): scrH,scrW,_=img.shape #img=np.pad(img,((1,3),(1,3),(0,0)),"constant") retimg=np.zeros((dstH,dstW,3),dtype=np.uint8) for i in range(dstH): for j in range(dstW): scrx=i*(scrH/dstH) scry=j*(scrW/dstW) x=math.floor(scrx) y=math.floor(scry) u=scrx-x v=scry-y tmp=0 for ii in range(-1,2): for jj in range(-1,2): if x+ii0 or y+jj0 or x+ii=scrH or y+jj=scrW: continue tmp+=img *BiBubic(ii-u)*BiBubic(jj-v) retimg =np.clip(tmp,0,255) return retimg im_path="0.jpg" image=np.array(Image.open(im_path)) image1=NN_interpolation(image,image.shape *2,image.shape *2) image1=Image.fromarray(image1.astype("uint8")).convert("RGB") image1.save("n.png") image2=BiLinear_interpolation(image,image.shape *2,image.shape *2) image2=Image.fromarray(image2.astype("uint8")).convert("RGB") image2.save("2.png") image3=BiCubic_interpolation(image,image.shape *2,image.shape *2) image3=Image.fromarray(image3.astype("uint8")).convert("RGB") image3.save("3.png")
159 次閱讀|0 個評論