当前位置: 首页>編程日記>正文

计算机视觉教程2-3:图解双线性插值算法最近邻插值算法

计算机视觉教程2-3:图解双线性插值算法最近邻插值算法

目录

  • 1 算法原理
    • 1.1 最近邻插值
    • 1.2 双线性插值算法
  • 2 源码实现

1 算法原理

提出此算法的背景是基于图片的缩放,在图片缩放的过程中,实质上就是将原图像像素矩阵像素值,填到目标图像像素矩阵中,目标图像像素矩阵可能比原图像像素矩阵大(图片放大),也可能小(图片缩小)。我们假设图片的宽(WidthWidthWidth)和高(HeightHeightHeight)是按同比例缩放的,那么
srcXsrcWidth=dstXdstWidth\frac{srcX}{srcWidth}= \frac{dstX}{dstWidth}srcWidthsrcX=dstWidthdstX
srcYsrcHeight=dstYdstHeight\frac{srcY}{srcHeight}=\frac{dstY}{dstHeight}srcHeightsrcY=dstHeightdstY

也就是,给定一个目标图片矩阵在(dstXdstXdstX,dstYdstYdstY)处的坐标,计算出对应缩放前原图像的某点坐标(srcXsrcXsrcX,srcYsrcYsrcY),将后者的像素RGB值填入前者。但在计算中常常遇到算出的(srcXsrcXsrcX,srcYsrcYsrcY)为浮点型的情况,如图1。而在像素坐标中,所有的坐标都应该为整型,因此本文的这两个算法就是为了解决浮点型原图像坐标的处理问题。
在这里插入图片描述

图1

1.1 最近邻插值

算法思路就是将浮点型坐标用int()强制转换为整型,在图2中,浮点型像素点P的坐标被强制转换成整型后,就转为A点,也即用A点单个点的像素代表目标图像矩阵中某个像素值,算法的优点在于速度快,但从图2中就可以看出此算法的误差很大,容易造成图像缩放失真。

1.2 双线性插值算法

在这里插入图片描述

图2

算法思路是用浮点型像素点P周围相邻的四个像素,如图2中的A、B、C、D四个点像素的加权平均值来表征P的像素。具体的做法是用横轴、纵轴的距离来表示权重,例如:△xP,A△x_{P,A}xP,A=uuu△yP,A△y_{P,A}yP,A=vvv。若用f(M)表示M点的像素值,则P点像素中的A像素分量就为
(1−u)(1−v)f(A)(1-u)(1-v)f(A)(1u)(1v)f(A)

显然,u、v越大,P点离A点的距离就越远;那么(1-u)(1-v)就越小,从而A像素f(A)的权重就越小。根据这个思路,可以写出:
f(M)=(1−u)(1−v)f(A)+u(1−v)f(B)+(1−u)vf(C)+uvf(D)f(M)=(1-u)(1-v)f(A)+u(1-v)f(B)+(1-u)vf(C)+uvf(D)f(M)=(1u)(1v)f(A)+u(1v)f(B)+(1u)vf(C)+uvf(D)
现在要考虑一个目标图像像素坐标得出过程的问题,正如开头所列写的:
srcX=srcWidthdstXdstWidthsrcX=srcWidth\frac {dstX}{dstWidth}srcX=srcWidthdstWidthdstX

srcY=srcHeightdstYdstHeightsrcY=srcHeight\frac{dstY}{dstHeight}srcY=srcHeightdstHeightdstY
如果直接利用这个相似公式,得出的目标图像相对于原图像将不是中心化的,为了说明这一点,假设现在希望将一个5×5的图像缩小为3×3的图像,直接相似关系得出的结果为图3(i)所示,即最右侧和最下侧的像素其实没有参与运算,我们希望得到的图像是如图3(ii)的,这样的放缩才能更多地体现原图像的信息,因此我们需要对放缩公式进行一个补偿修正。

图3(i)

在这里插入图片描述

图3(ii)

考虑将一个m×m的像素矩阵放缩为M×M的像素矩阵,原像素矩阵的中心为((m−1)2\frac{(m-1)}{2}2(m1),(m−1)2\frac{(m-1)}{2}2(m1)),例如一个5×5矩阵,其中心就为(2,2),若为偶数阶矩阵,其中心可理解为一个虚拟的浮点数像素。将目标像素矩阵的中心((M−1)2\frac{(M-1)}{2}2(M1),(M−1)2\frac{(M-1)}{2}2(M1))代入相似公式,得到(仅列出横坐标,纵坐标同理):
srcX=(M−1)2mMsrcX=\frac{(M-1)}{2}\frac{m}{M}srcX=2(M1)Mm
设置一个误差量:
bias=srcX−(m−1)2bias=srcX-\frac{(m-1)}{2}bias=srcX2(m1)
化简即得:
bias=12(1−mM)bias=\frac{1}{2}(1-\frac{m}{M})bias=21(1Mm)
因此对相似公式进行修正,得到:
srcX=dstXsrcWidthdstWidth−biassrcX=dstX\frac{srcWidth}{dstWidth}-biassrcX=dstXdstWidthsrcWidthbias
srcY=dstYsrcHeightdstHeight−biassrcY=dstY\frac{srcHeight}{dstHeight}-biassrcY=dstYdstHeightsrcHeightbias
这就是中心化公式的由来

2 源码实现

这里仅贴出双线性插值算法的核心代码段:

for i in range(dstHeight):for j in range(dstWidth):srcX = j*(srcWidth/dstWidth)-bias_Width    srcY = i*(srcHeight/dstHeight)-bias_HeightsrcX_0 = int(np.floor(srcX))u = np.float(srcX-srcX_0)srcX_1 = int(np.ceil(srcX))if srcX_1>srcWidth-1:             #消除数组越界问题srcX_1 = srcX_1-1srcY_0 = int(np.floor(srcY))v = srcY-srcY_0srcY_1 = int(np.ceil(srcY))if srcY_1>srcHeight-1:srcY_1 = srcY_1-1dstImgInfo[i][j] =(1-u)*(1-v)*img[srcY_0][srcX_0]+u*(1-v)*img[srcY_0][srcX_1]+(1-u)*v*img[srcY_1][srcX_0]+u*v*img[srcY_1][srcX_1]     

🚀 计算机视觉基础教程说明

章号                                    内容
  0                              色彩空间与数字成像
  1                              计算机几何基础
  2                              图像增强、滤波、金字塔
  3                              图像特征提取
  4                              图像特征描述
  5                              图像特征匹配
  6                              立体视觉
  7                              项目实战


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《机器人原理与技术》
  • 《机器学习强基计划》
  • 《计算机视觉教程》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇


https://www.fengoutiyan.com/post/16232.html

相关文章:

  • 线性算法
  • 三线性插值
  • 图像插值算法
  • 最近邻插值法
  • 二维插值算法
  • 线性插值计算公式
  • 差值函数
  • 双线性插值公式
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機