最近邻插值

最近邻插值

原理:最近邻插值是一种常用的图像缩放算法,它的原理是在目标图像中的每个像素点周围找到距离最近的一个原始图像中的像素点,并将该像素点的灰度值赋给目标图像中的像素。
步骤:

1.计算目标图像和原始图像的宽高比例;
2.遍历目标图像的每一个像素,计算出对应的原始图像坐标;
3.找到距离原始坐标最近的像素,将该像素的灰度值赋给目标像素。

优点:计算简单、速度快,适合于实时性要求较高的场景
缺点:

1.精度较低:由于最近邻插值只考虑了距离最近的像素,忽略了其他邻近像素的信息,因此可能会导致插值后的图像出现马赛克和锯齿状的伪像。
2.不平滑:最近邻插值算法只考虑了最近邻像素的值,没有考虑像素之间的平滑关系,因此插值后的图像可能会显得不够平滑自然。
3.不适用于放大:最近邻插值在放大图像时效果较差,可能会导致像素失真和伪像出现。

适用场景:最近邻插值算法适合于速度要求较高、精度要求不是很高的场景,例如简单的图像缩小、图像预处理等。

import numpy as np
from PIL import Image

def nearest_neighbor_interpolation(input_image, target_width, target_height):
    # 计算缩放比例
    scale_x = input_image.width / target_width
    scale_y = input_image.height / target_height

    # 创建目标图像
    output_image = Image.new("RGB", (target_width, target_height))

    # 遍历目标图像中的每个像素
    for y in range(target_height):
        for x in range(target_width):
            # 计算原始图像中对应位置的坐标
            src_x = round(x * scale_x)
            src_y = round(y * scale_y)

            # 最近邻像素索引
            nearest_x = round(src_x)
            nearest_y = round(src_y)

            # 获取最近邻像素的值,并赋给目标图像中当前像素
            output_image.putpixel((x, y), input_image.getpixel((nearest_x, nearest_y)))

    return output_image

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

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

# 进行最近邻插值
output_image = nearest_neighbor_interpolation(input_image, target_width, target_height)

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

原始图像:
在这里插入图片描述最近邻插值后:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值