0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

雙線性插值算法的講解

FPGA設計論壇 ? 來源:FPGA設計論壇 ? 作者:FPGA設計論壇 ? 2022-09-19 10:25 ? 次閱讀

一、雙線性插值概述

雙線性插值作為OpenCV中默認使用的圖像縮放算法,其效果和速度都是不錯的。并且效果也比較穩(wěn)定,計算復雜度并不算太高。我看了很多網(wǎng)上的算法,自己也沒看太懂,下面是從網(wǎng)上找的雙線性插值 算法的講解。

“圖像的雙線性插值放大算法中,目標圖像中新創(chuàng)造的象素值,是由源圖像位置在它附近的2*2區(qū)域4個鄰近象素的值通過加權(quán)平均計算得出的。雙線性內(nèi)插值算法放大后的圖像質(zhì)量較高,不會出現(xiàn)像素值不連續(xù)的的情況。然而此算法具有低通濾波器的性質(zhì),使高頻分量受損,所以可能會使圖像輪廓在一定程度上變得模糊。”

二、雙線性插值與最近鄰插值對比

雙線性插值算法和最近鄰插值算法比較類似。在最近鄰插值算法中,目標圖像中的某個點(x,y)是去源圖像中找最鄰近的一個點(x0, y0)即可。目標圖像中的點(x, y)對應于源圖像中的點(x0',y0'),x0'、y0'很可能不是整數(shù),而是小數(shù),而最近鄰插值算法是找其鄰近整型值(int(x0'+0.5f),int(y0'+0.5f))(四舍五入處理)。

在雙線性插值中,我們現(xiàn)在找x0', y0'所在位置旁邊的四個點,再根據(jù)這四個點與(x0',y0')距離的關系得到權(quán)重值,最后計算出目標圖像中(x,y)一點的像素值。

三、雙線性插值算法實現(xiàn)

算法描述如下:

(1)計算源圖像與目標圖像寬與高的比例

w0 : 表示源圖像的寬度

h0 : 表示源圖像的高度

w1 : 表示目標圖像的寬度

h1 : 表示目標圖像的高度

float fw = float(w0-1)/(w1-1); //在FPGA實現(xiàn)中一般會進行四舍五入取整操作

float fh = float(h0-1)/(h1-1);

(2)針對目標圖像的一個點(x, y),計算在源圖像中的對應坐標,結(jié)果為浮點數(shù)。

float x0 = x * fw;

float y0 = y * fh;

int x1 = int(x0); //取整處理

int x2 = x1 + 1;

int y1 = int(y0);

int y2 = y1+1;

所求的源圖像中的四個點坐標為(x1, y1) (x1, y2) (x2, y1) (x2,y2)

(3)求周圍四個點所占的權(quán)重比值

如上圖,

fx1 = x0 - x1;

fx2 = 1.0f - fx1;

fy1 = y0 - y1;

fy2 = 1.0f - fy1;

float s1 = fx1*fy1;

float s2 = fx2*fy1;

float s3 = fx2*fy2;

float s4 = fx1*fy2;

我們以value(坐標)來代表取得此點的坐標值,則:

value(x0,y0) = value(x2,y2)*s1+value(x1,y2)*s2+value(x1,y1)*s3+value(x2,y1)*s4;

如果 對上述運算不夠明白 的話,可以這樣來求。

我們先要求得(x0, y1) 和(x0,y2)的像素值。

則float value(x0,y1) = value(x1,y1)*fx2 + value(x2,y1)*fx1;

float value(x0,y2) = value(x1,y2)*fx2 + value(x2,y2)*fx1;

注釋:離某點越近,離權(quán)重越大,故取其與1的差值。

float value(x0,y0) = value(x0,y1)*fy2 + value(x0,y2)*fy1;

驗證后與上邊公式一樣。

(4)求得值后填充到目標圖像上就可以了。

我的理解:算法概念理解相對容易,但是如何在FPGA上實現(xiàn)卻需要考慮一些問題,在此提出大體構(gòu)架,日后再具體實現(xiàn)

1、算法中的浮點數(shù)運算,能否簡單的用四舍五入取整處理代替?

2、輸入的數(shù)據(jù)可以先緩存到兩塊RAM內(nèi),RAM0和RAM1進行乒乓操作,

當RAM0緩存滿一行數(shù)據(jù)時,算法模塊可以讀取RAM0數(shù)據(jù)進行操作,

同時,RAM1緩存第二行數(shù)據(jù)。

3、在操作過程中,單獨的一行一行處理只能實現(xiàn)線性插值,也就是輸出數(shù)據(jù)只跟一行輸入數(shù)據(jù)有關,如何實現(xiàn)4個臨近像素相關?

4、基于問題3,現(xiàn)有參考代碼是先進行垂直插值再進行水平插值,垂直插值輸出像素值和垂直插值權(quán)重,再將其作為輸入,進行水平

線性插值運算,最終得到目標點像素值。

5、插值后的數(shù)據(jù)就可以進行后續(xù)操作最終輸出到HDMI

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1624

    文章

    21539

    瀏覽量

    600533
  • 算法
    +關注

    關注

    23

    文章

    4576

    瀏覽量

    92344
  • 雙線性
    +關注

    關注

    0

    文章

    7

    瀏覽量

    6998

原文標題:雙線性插值算法公式分析及FPGA實現(xiàn)初步構(gòu)架

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    LM324N換成TL084CN無法得到正確的濾波曲線?為什么?

    LM324N換成TL084CN無法得到正確的濾波曲線? 所使用電路為全通KHN雙線性濾波器電路 供電+-5V雙電源 輸入為200mVpk的白噪音 取輸出/輸入的響應 LM324曲線對了 但TL084變高通了(改變不同曲線 只要更換TL084都會變高通)
    發(fā)表于 08-15 07:56

    數(shù)控系統(tǒng)常用的兩種補功能有哪些

    ,通過數(shù)學方法計算出這些點之間的中間,以實現(xiàn)連續(xù)曲線的生成。在數(shù)控系統(tǒng)中,常用的兩種補功能是線性補和圓弧補。 一、
    的頭像 發(fā)表于 07-01 11:13 ?963次閱讀

    請問esp32如何實現(xiàn)雙線性配對?

    我想使用c語言編寫的pbc庫實現(xiàn)雙線性配對,但是我不知道如何將其變成esp支持的組件運用在其中。
    發(fā)表于 06-12 07:03

    FPGA圖像處理之CLAHE算法線性差值

    對于最后一種情況,也就是位于中間白色區(qū)域的點,他需要進行雙線性插值。可以看到整個點位于第四個block,所以他需要在第一個,第二個,第四個和第五個block上分別計算直方圖均衡化的結(jié)果,和相應的權(quán)重。
    發(fā)表于 01-21 10:51 ?1499次閱讀
    FPGA圖像處理之CLAHE<b class='flag-5'>算法</b>的<b class='flag-5'>線性</b>差值

    LDO線性穩(wěn)壓器電路圖講解

    LDO線性穩(wěn)壓器電路圖講解
    的頭像 發(fā)表于 01-19 10:26 ?582次閱讀
    LDO<b class='flag-5'>線性</b>穩(wěn)壓器電路圖<b class='flag-5'>講解</b>

    ADI362如何得到線性加速度的?

    我看到ST公司的加速度傳感器,可以同時輸出普通含有重力加速度的以及濾波過后的線性加速度。請問使用ADI362可以得到同樣的各個軸的線性加速度
    發(fā)表于 01-01 06:56

    請問ADE7953的IRMSA和VRMS寄存器輸出線性的還是非線性的?

    請問ADE7953的IRMSA和VRMS寄存器輸出線性的還是非線性的?或者是在某些區(qū)間是線性的而某些
    發(fā)表于 12-26 07:01

    什么是線性插值?一維線性插值雙線性插值在BMS開發(fā)中的應用

    線性插值法(linear interpolation),是指使用連接兩個已知量的直線來確定在這兩個已知量之間的一個未知量的的方法。
    的頭像 發(fā)表于 12-24 10:44 ?7835次閱讀
    什么是<b class='flag-5'>線性插值</b>?一維<b class='flag-5'>線性插值</b>和<b class='flag-5'>雙線性插值</b>在BMS開發(fā)中的應用

    圖像理論研究之雙三次插值

    雙三次插值又叫雙立方,用于在圖像中“”(Interpolating)或增加“像素”(Pixel)數(shù)量/密度的一種方法。通常利用
    的頭像 發(fā)表于 12-14 14:35 ?948次閱讀
    圖像<b class='flag-5'>插</b><b class='flag-5'>值</b>理論研究之雙三次<b class='flag-5'>插值</b>

    擴散硅壓力變送器的工作原理

    測量和電流輸出這兩部分分別進行溫度修正。溫度修正方法有溫度特性公式法、線性插值法等,為了保證有更好的測量準確度,本設計采用線性插值法進行溫度修正。 1、電流輸出部分溫度修正 在沒有進行溫度修正的前提下,DA器件(
    的頭像 發(fā)表于 12-01 09:37 ?685次閱讀

    工欲善其事必先利其器,好用的編輯器推薦

    之前分享了基于FPGA的線性插值算法,接下來準備編寫程序和寫測試用例。在寫程序之前,先分享一款好用的便捷器。希望能夠幫助大家喜歡。下面分別介紹工具的安裝和推薦的理由。 1, Notepad++安裝
    發(fā)表于 11-24 23:26

    基于FPGA的線性插值-中

    上次分享了基于FPGA的線性插值的背景和方法原理,今天分享 方法原理的驗證。 通常FPGA的開發(fā)分為電路功能設計、設計輸入、功能仿真、綜合優(yōu)化、綜合后仿真、實現(xiàn)、布線后仿真、板級仿真以及芯片編程
    發(fā)表于 11-23 23:09

    基于FPGA的線性插值-上

    ,并且做除法會消耗大量的資源。 本文提出一種基于查找法實現(xiàn)線性插值算法,不需要利用除法實現(xiàn)線性插值。 2,方法原理 由當D是A,B的中點時,可以求出D的坐標為: x\' = (x1 + x2
    發(fā)表于 11-20 23:10

    如何用平行雙線開口解釋天線輻射的基本原理

    但是好多微波理論計算的起點卻是從平行雙線開始的,我們用平行雙線的開口來解釋天線輻射的基本原理;也利用平行雙線模型來推導傳輸線的路模型。
    發(fā)表于 11-20 09:39 ?1510次閱讀
    如何用平行<b class='flag-5'>雙線</b>開口解釋天線輻射的基本原理

    OpenCV中圖像旋轉(zhuǎn)函數(shù)操作原理及基本技巧

    旋轉(zhuǎn)涉及到兩個問題,一個是圖像旋轉(zhuǎn)之后的大小會發(fā)生改變,會產(chǎn)生背景,通過背景填充方式都是填充黑色,此外旋轉(zhuǎn)還是產(chǎn)生像素的位置遷移,新的位置像素需要通過計算獲得,常見的方式有最近
    的頭像 發(fā)表于 11-14 09:40 ?780次閱讀
    OpenCV中圖像旋轉(zhuǎn)函數(shù)操作原理及基本技巧