第一種針對灰照片
def graybinter(image):
copy = np.copy(image)# 輸入圖像的副本
iupD, ileftR = copy.shape # 輸入圖像的尺寸(行、列)
upD = int(iupD * 2)# 輸出圖像的尺寸
leftR = int(ileftR * 2)
o = np.zeros((upD, leftR)) # 輸出圖片
for i in range(upD):
for j in range(leftR):
# 輸出圖片中座標 (i,j)對應至輸入圖片中的最近的四個座標(x1,y1)(x2, y2),(x3, y3),(x4,y4)的均值
temp_x = i / upD * iupD
temp_y = j / leftR * ileftR
x1 = int(temp_x)
y1 = int(temp_y)
x2 = x1
y2 = y1 + 1
x3 = x1 + 1
y3 = y1
x4 = x1 + 1
y4 = y1 + 1
u = temp_x - x1
v = temp_y - y1
# 防止越界
if x4 >= iupD:
x4 = iupD - 1
x2 = x4
x1 = x4 - 1
x3 = x4 - 1
if y4 >= ileftR:
y4 = ileftR - 1
y3 = y4
y1 = y4 - 1
y2 = y4 - 1
# 插值
o[i, j] = (1-u)*(1-v)*int(copy[x1, y1]) + (1-u)*v*int(copy[x2, y2]) + u*(1-v)*int(copy[x3, y3]) + u*v*int(copy[x4, y4])
return o.astype(np.uint8)
def rgbinter(img):
scrH,scrW,c=img.shape
dstH = scrH*2
dstW = scrW*2
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[i,j]=(1-u)*(1-v)*img[x,y]+u*(1-v)*img[x+1,y]+(1-u)*v*img[x,y+1]+u*v*img[x+1,y+1]
return retimg.astype(np.uint8)