双线性插值

双线性插值

原理

  1. 根据目标图像和原始图像的宽高比例,确定目标图像中每个像素对应的原始图像的四个最邻近像素。
    2.对于目标图像中的每个像素,根据其在原始图像中的位置和邻近像素的灰度值,进行插值计算。

优点

  1. 比最近邻插值更精确:双线性插值考虑了目标像素周围的邻近像素,通过加权平均的方式计算插值结果,使得插值后的图像更加平滑自然,减少了锯齿状的伪像。
  2. 适用于缩放和旋转:双线性插值不仅可以用于图像缩放,还可以用于图像旋转等仿射变换。在这些变换中,双线性插值可以处理变换后每个像素的值,使得变换后的图像保持平滑。
  3. 可扩展性:双线性插值算法可以应用于不同分辨率的图像,适用于各种缩放比例和图像大小。

不足

  1. 计算复杂度较高:相比于最近邻插值,双线性插值需要进行更复杂的计算,因此相对较慢。
  2. 处理锐利边缘不佳:双线性插值可能导致锐利边缘的模糊和细节丢失。

代码

import numpy as np
from PIL import Image

def bilinear_interpolation(input_image, target_width, target_height):
    input_array = np.asarray(input_image)
    height, width, _ = input_array.shape

    x_ratio = float(width - 1) / target_width
    y_ratio = float(height - 1) / target_height

    output_array = np.zeros((target_height, target_width, 3), dtype=np.uint8)

    for y in range(target_height):
        for x in range(target_width):
            x_origin = int(x_ratio * x)
            y_origin = int(y_ratio * y)
            x_diff = (x_ratio * x) - x_origin
            y_diff = (y_ratio * y) - y_origin

            top_left = input_array[y_origin, x_origin]
            top_right = input_array[y_origin, x_origin + 1]
            bottom_left = input_array[y_origin + 1, x_origin]
            bottom_right = input_array[y_origin + 1, x_origin + 1]

            output_array[y, x] = (
                top_left * (1 - x_diff) * (1 - y_diff) +
                top_right * x_diff * (1 - y_diff) +
                bottom_left * (1 - x_diff) * y_diff +
                bottom_right * x_diff * y_diff
            )

    output_image = Image.fromarray(output_array)
    return output_image
# 载入原始图像
input_image = Image.open("1.png")

# 设定目标图像的宽高
target_width = 300
target_height = 350

# 进行双线性插值
output_image = bilinear_interpolation(input_image, target_width, target_height)

# 保存插值后的图像
output_image.save("2_output_1.png")

原始图像
在这里插入图片描述双线性插值之后的图像:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值