註冊 登錄
Android 台灣中文網 返回首頁

嵐風的個人空間 https://apk.tw/?1660341 [收藏] [複製] [分享] [RSS]

日誌

雙線性插值 implement 的二種寫法

已有 199 次閱讀2021-8-26 15:24 | 雙線性, 插值, implement, 二種, 寫法

第一種針對灰照片
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)

路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

facelist

您需要登錄後才可以評論 登錄 | 註冊