mxnet.image.resize_short()函数详解

mx.image.resize_short是MXNet中用于调整图像大小的一个函数。它将图像的短边调整到指定的长度,同时保持图像的宽高比。函数定义如下,

mx.image.resize_short(src, size, interp=2)
  • src:输入的图像,可以是NDArray或者numpy.ndarray
  • size:新的短边长度。图像的短边会被调整到这个长度,长边会按比例缩放
  • interp:插值方法,默认为2(双线性插值)。可以选择的插值方法包括:

        0:最近邻插值
        1:双线性插值
        2:双三次插值
        3:面积插值

这里重点解释一下面积插值的原理:

假设有一个4x4的图像,需要将其缩小到2x2的图像。面积插值会将原始图像划分为多个区域,然后计算每个区域的平均值来生成新的像素。例如:1、将4x4的图像划分为2x2的区域,每个区域包含2x2个像素;2、对每个区域计算其包含像素的平均值;3、用这些平均值来生成新的2x2图像

面积插值的特点:

  1. 适用于缩小图像:面积插值在图像缩小时表现出色,因为它能够更好地保留原始图像的细节和信息
  2. 计算平均值:面积插值通过计算原始图像中多个像素的平均值来生成新的像素值。这种方法能够避免由于简单采样而丢失信息的问题
  3. 平滑效果:由于使用了平均值,面积插值通常会产生更平滑的图像,减少了锯齿效应

面积插值的示例代码如下,

import mxnet as mx
import numpy as np


x = np.arange(1, 17)
x = np.reshape(x, (4, 4, 1))
x = mx.nd.array(x)
resized_x = mx.image.resize_short(x, 2, interp=3)

print(x)
print(resized_x)
"""
[[[ 1.]
  [ 2.]
  [ 3.]
  [ 4.]]

 [[ 5.]
  [ 6.]
  [ 7.]
  [ 8.]]

 [[ 9.]
  [10.]
  [11.]
  [12.]]

 [[13.]
  [14.]
  [15.]
  [16.]]]
<NDArray 4x4x1 @cpu(0)>

[[[ 3.5]
  [ 5.5]]

 [[11.5]
  [13.5]]]
<NDArray 2x2x1 @cpu(0)>
"""

回到mx.image.resize_short,给定入参后,函数会先判断输入数据的w和h的大小,将图像的短边调整到指定的长度,同时保持图像的宽高比,

h, w, _ = src.shape
if h > w:
    new_h, new_w = size * h // w, size
else:
    new_h, new_w = size, size * w // h

获得new_h和new_w后,便可进行插值,得到resize后的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chen_znn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值