脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python实现图像最近邻插值

python实现图像最近邻插值

2022-10-31 09:45机器学习入坑者 Python

这篇文章主要介绍了python实现图像最近邻插值,图像插值技术即Nearest Neighbour Interpolate是图像超分辨率领域的重要研究方法之一,其目的是根据已有的低分辨率图像,获得高分辨率图像,下面来看看文章具体的叙述,需要的朋友可以

引言:

最近邻插值Nearest Neighbour Interpolate算法是图像处理中普遍使用的图像尺寸缩放算法,由于其实现简单计算速度快的特性深受工程师们的喜爱。

图像插值技术是图像超分辨率领域的重要研究方法之一,其目的是根据已有的低分辨率图像(Low Resolution,LR)获得高分辨率图像(High Resolution,HR)。

本文一方面对最邻近插值算法的流程进行分析,另一方面借助python实现基本的最近邻插值算法。

注:网上的资料有的翻译是“近邻”,也有的翻译是“临近”。

1、最近邻插值算法思想

插值的目的是根据已知的图像的像素值获得未知目标图像的像素值,插值变换过程如下图(PPT画的背景没去除)所示:

python实现图像最近邻插值

其中src表示原始图像,tar表示插值得到的目标图像,H和W分别表示图像的高度和宽度。插值的核心是找到(tar_x, tar_y)和(src_x, src_y)的映射关系,从而实现对目标图像的每一个像素点进行赋值。假设目的是将原始图像长度和宽度扩大(3,4)倍,即:

?
1
2
ratio_H = tar_H/src_H = tar_x/src_x = 3
ratio_W = tar_W/src_W = tar_y/src_y = 4

通过上式变形,得到目标图像的像素点和原始图像的像素点映射如下:

?
1
2
tar_x = src_x/ratio_H
tar_y = src_y/ratio_W

知道了像素点之间的映射关系,实现算法就很容易了,算法流程如下:

  • (1)根据tar_H和tar_W创建目标图像
  • (2)计算缩放比例因子ratio
  • (3)遍历目标图像每个像素点,计算映射关系
  • (4)遍历目标图像每个像素点,使用对应原始图像的对应像素点对其赋值

2、python实现最邻近插值

有了前面的理论分析就很容易实现了,自己实现中比较难理解的地方就是“坐标变换关系”!如果是将原始图像放大整数倍很容易理解,比如一张原始10x10图像放大到目标20x20图像,那么20x20图像中的任一个像素点(tar_x,tar_y)的值来自原始10x10图像的(src_x,src_y)=int(tar_x/2, tar_y/2),也就是正好是除以2的位置;然而经常需要放大的倍数是小数倍,比如将10x10放大到15x15,这样(tar_x,tar_y)的值来自10x10图像中(src_x, src_y)=int(tar_x/1.5, tar_y/1.5)。

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def nearest(image, target_size):
    """
    Nearest Neighbour interpolate for RGB  image
    
    :param image: rgb image
    :param target_size: tuple = (height, width)
    :return: None
    """
    if target_size[0] < image.shape[0] or target_size[1] < image.shape[1]:
        raise ValueError("target image must bigger than input image")
    # 1:按照尺寸创建目标图像
    target_image = np.zeros(shape=(*target_size, 3))
    # 2:计算height和width的缩放因子
    alpha_h = target_size[0]/image.shape[0]
    alpha_w = target_size[1]/image.shape[1]
 
    for tar_x in range(target_image.shape[0]-1):
        for tar_y in range(target_image.shape[1]-1):
            # 3:计算目标图像人任一像素点
            # target_image[tar_x,tar_y]需要从原始图像
            # 的哪个确定的像素点image[src_x, xrc_y]取值
            # 也就是计算坐标的映射关系
            src_x = round(tar_x/alpha_h)
            src_y = round(tar_y/alpha_w)
 
            # 4:对目标图像的任一像素点赋值
            target_image[tar_x, tar_y] = image[src_x, src_y]
 
    return target_image

得到的插值结果的插值结果如下:

python实现图像最近邻插值

可以看出插值以后的图像明显存在锯齿效应,很多地方出现了“方格”。

到此这篇关于python实现图像最近邻插值的文章就介绍到这了,更多相关python图像邻插值内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://zhuanlan.zhihu.com/p/89409337

延伸 · 阅读

精彩推荐
  • PythonPython实现的连接mssql数据库操作示例

    Python实现的连接mssql数据库操作示例

    这篇文章主要介绍了Python实现的连接mssql数据库操作,结合实例形式分析了Python安装pymssql模块以及基于pymssql模块连接sql2008 R2数据库的具体操作技巧,需要的朋...

    sulin8512021-03-28
  • PythonKeras SGD 随机梯度下降优化器参数设置方式

    Keras SGD 随机梯度下降优化器参数设置方式

    这篇文章主要介绍了Keras SGD 随机梯度下降优化器参数设置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    DexterLeiX8072020-06-20
  • PythonPython 修改列表中的元素方法

    Python 修改列表中的元素方法

    今天小编就为大家分享一篇Python 修改列表中的元素方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    coolsunxu18112021-03-10
  • PythonPython实现Linux监控的方法

    Python实现Linux监控的方法

    本文通过实例代码给大家介绍了Python实现Linux监控的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    selfpublish5922021-06-27
  • Python由Python编写的MySQL管理工具代码实例

    由Python编写的MySQL管理工具代码实例

    这篇文章主要介绍了由Python编写的MySQL管理工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...

    weixin_4361468811802021-06-14
  • Pythonpython制作企业邮箱的爆破脚本

    python制作企业邮箱的爆破脚本

    这篇文章主要介绍了python制作企业邮箱的爆破脚本的相关资料,需要的朋友可以参考下...

    Joy_nick2412020-09-09
  • PythonPyinstaller打包工具的使用以及避坑

    Pyinstaller打包工具的使用以及避坑

    本文主要的是pyinstaller在windows下的基本使用和基础避坑,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    HashFlag11142022-03-06
  • Python简单谈谈python基本数据类型

    简单谈谈python基本数据类型

    在Python中,能够直接处理的数据类型有以下几种:#整型 int,#浮点型 float,#布尔型 bool,#复数型 (在python中用小写 j ,表示虚部,用其他的字母不行)complex...

    信自己belive9062021-04-04