python数字图像处理笔记06 最近邻插值法

最近邻插值法

在一维空间中,最近点插值就相当于四舍五入取整。在二维图像中,像素点的坐标都是整数,该方法就是选取离目标点最近的点。

使用下面的公式放大图像! I’ 为放大后图像, I为放大前图像, a为放大率,方括号是四舍五入取整操作
在这里插入图片描述

给定一个矩阵,将1个 3 ∗ 3 尺寸的矩阵使用最近邻插值法到 4 ∗ 4

在这里插入图片描述
src_x:原图像中像素点x坐标
src_y:原图像中像素点y坐标
dst_x:目标图像中像素点x坐标
dst_y:目标图像中像素点y坐标
src_w:原图像宽度(width)
src_h:原图像高度(height)
dst_w:目标图像宽度(width)
dst_h:目标图像高度(height)

des中的坐标,对应src中坐标公式:
src_x = dst_x * (src_w/dst_w)
src_y = dst_y * (src_h/dst_h)

dst[0,0]对应的src位置如下:
src_x = 0 * (3 / 4) = 0
src_y = 0 * (3 / 4) = 0
所以dst[0,0] = src[src_x,src_y] = src[0,0] = 234

dst[0,1]对应的src位置如下:
src_x = 0 * (3 / 4) = 0
src_y = 1 * (3 /4) = 0.75
所以dst[0,1] = src[src_x,src_y] = src[0,0.75]

由于图片像素最小单位是1,所以四舍五入dst[0,1] = src[0,1] = 38
根据以上公式最终结果如下:
在这里插入图片描述

import cv2
import numpy as np
import matplotlib.pyplot as plt


# Nereset Neighbor interpolation
def nn_interpolate(img, ax=1, ay=1):
	H, W, C = img.shape

	aH = int(ay * H)
	aW = int(ax * W)

	y = np.arange(aH).repeat(aW).reshape(aW, -1)
	x = np.tile(np.arange(aW), (aH, 1))
	y = np.round(y / ay).astype(np.int)
	x = np.round(x / ax).astype(np.int)

	out = img[y,x]

	out = out.astype(np.uint8)

	return out


# Read image
img = cv2.imread("imori.jpg").astype(np.float)

# Nearest Neighbor
out = nn_interpolate(img, ax=1.5, ay=1.5)

# Save result
cv2.imshow("result", out)
cv2.waitKey(0)
cv2.imwrite("out.jpg", out)

参考链接https://blog.csdn.net/siyue0211/article/details/92660001

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值