【圖像處理】圖像內插“雙線性內插法 Bilinear interpolation”代碼演示

原理

雙線性內插法是使用目標點四周最近的四個點,沿距目標點x方向、y方向的權重關係,去分配給目標點顏色值

如圖,P點是目標點,Q1、Q2、Q3、Q4是目標點周圍的四個點,先分別對Q1、Q2和Q3、Q4沿x方向進行內插,得到R1、R2兩個點,再對R1、R2沿y方向進行內插,得到目標點P

計算公式如下

在這裏插入圖片描述
注意:上面點p(x,y)裏的x爲換算到原圖的(pos_x - 1),y爲換算到原圖後的(pos_y - 1)
在這裏插入圖片描述

代碼(還沒寫好。)

# -*- coding: utf-8 -*-
"""
@File    : 雙線性內插法.py
@Time    : 2020/6/24 14:15
@Author  : Dontla
@Email   : [email protected]
@Software: PyCharm
"""
import cv2 as cv
import numpy as np


def BI(img, resolution):
    srcH, srcW, _ = img.shape
    dstH, dstW = resolution
    img_ = np.zeros((dstH, dstW, 3), dtype=np.uint8)
    # 列外層,行內層
    for y in range(dstH):
        for x in range(dstW):
            pos_y = (y + 1) / dstH * srcH  # 比較的時候要以像素實際的位置,不能以像素下標
            if pos_y % 1 == 0:  # 判斷是否爲整數
                y_min = y_max = y
            else:
                if y - 1 < 0:
                    y_min

            fq1, fq2, fq3, fq4 = img[y - 1, x - 1], img[y - 1, x + 1], img[y + 1, x - 1], img[y + 1, x + 1]

            img_[y, x] = 0
    return img_


# 在這裏設置圖片最終分辨率(縱,橫)
resolution = 300, 600
# print(type(scale))  # <class 'tuple'>
img = cv.imread('Lenna_clip.jpg')
img_ = BI(img, resolution)
cv.imshow('win1', img)
cv.imshow('win2', img_)
cv.waitKey(0)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章