最近邻插值法

文章目录

  • 前言
  • 一、最近邻插值法
  • 二、代码实现
  • 总结


前言

  本章节进入图像处理,利用python语言来实现各种图像处理的方法,从软件角度去理解图像处理方法,为后期的FPGA处理图像做准备。


一、最近邻插值法

  最近邻插值就是在目标像素点上插入离对应原像素点最近的点的像素值,而不考虑图像可能的颜色变化。因此,该算法方法较为单一,原理也较为简单,计算量也是最少的。
  计算公式如下:
  src_x:原图的x坐标
  src_y:原图的y坐标
  des_x:目标图像的x坐标
  des_y:目标图像的y坐标
  src_w:原图的width宽度
  src_h:原图的height高度
  des_w:目标图像的width宽度
  des_h:目标图像的height高度

{ s r c _ x = d e s _ x   ∗ s r c _ w   /   d e s _ w s r c _ y = d e s _ y   ∗ s r c _ h   /   d e s _ h \begin{cases} src\_x = des\_x\ * src\_w\ /\ des\_w\\ src\_y = des\_y\ * src\_h\ /\ des\_h \end{cases} {src_x=des_x src_w / des_wsrc_y=des_y src_h / des_h
  为了使得原图和目标图像的几何中心点重合,对应公式改为:
{ s r c _ x = ( d e s _ x + 0.5 )   ∗ s r c _ w   /   d e s _ w   −   0.5 s r c _ y = ( d e s _ y + 0.5 )   ∗ s r c _ h   /   d e s _ h   −   0.5 \begin{cases} src\_x = (des\_x + 0.5)\ * src\_w\ /\ des\_w\ -\ 0.5\\ src\_y = (des\_y + 0.5)\ * src\_h\ /\ des\_h\ -\ 0.5 \end{cases} {src_x=(des_x+0.5) src_w / des_w  0.5src_y=(des_y+0.5) src_h / des_h  0.5
  图像使用的是三体图像,最近小编沉迷于《三体》电视剧,所以借用三体的一张图片来进行最近邻插值法缩放。

最近邻插值法_第1张图片

二、代码实现

"""
author: caigui lin
created by: 2023/2/1
description:
nearest interpolation function
src_img: source image(ndarray)
des_size: reshaped image size(tuple)
return: resized image(ndarray)
"""
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread("three_body.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)#cv2 color mode is BGR, plt color mode is RGB, you need reverse the color mode before implementing the nearest interpolation function.
def nearest_interpolation(src_img, des_shape):
    src_size = src_img.shape[:-1]
    des_size = des_shape[:-1]
    src_w, src_h = src_size
    des_w, des_h = des_size
    des_img = np.zeros(des_shape)
    for i in range(des_w):
        for j in range(des_h):
            des_img[i, j, 0] = src_img[round((i + 0.5) * (src_w / des_w) - 0.5), round((j + 0.5) * (src_h / des_h) - 0.5), 0]
            des_img[i, j, 1] = src_img[round((i + 0.5) * (src_w / des_w) - 0.5), round((j + 0.5) * (src_h / des_h) - 0.5), 1]
            des_img[i, j, 2] = src_img[round((i + 0.5) * (src_w / des_w) - 0.5), round((j + 0.5) * (src_h / des_h) - 0.5), 2]
    des_img = des_img.astype(np.uint8)# display the image(uint8 data type)
    return des_img
new_image = nearest_interpolation(image, (100, 100, 3))
plt.imshow(image)
plt.imshow(new_image)

缩放前

最近邻插值法_第2张图片
缩放后

最近邻插值法_第3张图片

总结

  秦始皇执剑道:“成计算机队列!”。三千万士兵,三人一组,形成计算机基本单元,与门、非门、同或、异或、三态门等等。不同功能的士兵组成计算机的CPU、总线、外存等等,他们的目的是计算三体世界的规律。看完过后,小编由衷的感叹刘慈欣脑洞之大。小编也在思考,这秦始皇不就是FPGA嘛,拥有这么多的底层资源,想干嘛干嘛。至此,感谢你的观看,后续将继续推出其他插值算法,敬请期待。

你可能感兴趣的:(python编程,算法,图像处理,计算机视觉,opencv,python)