NEON优化——OpenCV Resize双线性插值

本文介绍了如何通过NEON优化OpenCV中的Resize操作,特别是双线性插值方法。文章重点讨论了避免重复计算和浮点转定点的优化策略,分析了浮点转定点对精度和性能的影响,并详细阐述了优化后的HResize和VResize步骤,以提高计算效率。测试结果显示在不同输入尺寸下,优化方案显著提升了性能。
摘要由CSDN通过智能技术生成

算法要点

一、基本原理

具体原理可以自行搜索,这里只大致描述一下,目标图像上某一个点按比例映射到原始图像上某一点,不过通常计算得到的原始点坐标不是整数,最近邻的做法是向下取整,而双线性差值的做法是取与该坐标最接近的上下左右四个点来线性加权,在放大的时候不会像最近邻那样锯齿严重,但是计算量会大不少。这里要注意的是加权分为两个维度,横向和纵向。此外,边界的处理也要注意。

二、优化思路

这里核心的优化思路有两点:

  1. 避免重复计算
  2. 浮点转定点

避免重复计算

首先要分析哪里存在可能的重复计算。resize是原始图像和目标图像之间的映射,这个映射不一定是一对一的。比如对于目标图像的高大于原始图像的高的情况,目标图像的多个行可能会映射到原始图像的同一行,这样我们就可以利用之前的计算结果,而不用重复计算。
对于目标图像上的某个点,映射到原始图像的坐标为O,相邻的四个点为ABCD,则目标图像的像素值为val = A(1-fx)(1-fy) + Bfx(1-fy) + C(1-fx)fy + Dfxfy
这个公式可以分解为两个过程:HResize和VResize

HResize

val0 = A(1-fx) + Bfx 
val1 = C(1-fx) + Dfx

VResize

val = val0*(1-fy) + val1*fy

之所以分解为两步,是因为上面提到的当目标图像的多行映射到

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风语

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

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

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

打赏作者

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

抵扣说明:

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

余额充值