吴忠躺衫网络科技有限公司

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

視頻圖像三插值方式的結(jié)果

新機(jī)器視覺 ? 來源:簡(jiǎn)書 ? 作者:梧桐光影 ? 2021-11-09 15:39 ? 次閱讀

在播放視頻時(shí),常遇到視頻尺寸與畫布尺寸不一致的情況。為了讓視頻按比例填充畫布,需要對(duì)視頻中的每一幀圖像做縮放處理。

縮放就是在原圖的基礎(chǔ)上做插值計(jì)算,從而增加或減少像素點(diǎn)的數(shù)量。常見的插值方式有最近點(diǎn)插值,線性插值,蘭索斯插值。

下面簡(jiǎn)要介紹,并對(duì)比三種插值方式的結(jié)果。

最近點(diǎn)插值

在一維空間中,最近點(diǎn)插值就相當(dāng)于四舍五入取整。在二維圖像中,像素點(diǎn)的坐標(biāo)都是整數(shù),該方法就是選取離目標(biāo)點(diǎn)最近的點(diǎn)。計(jì)算方式如下:

假設(shè)原圖為A[aw,ah],寬度為aw,高度為ah。目標(biāo)圖為B[bw,bh],寬度為bw,高度為bh。已知A[aw,ah]的寬度,高度及其中每個(gè)點(diǎn)的顏色值,B[bw,bh]中每個(gè)點(diǎn)像素值的計(jì)算方式如下:

for(int i=0; i<bh; ++i){
    for(int j=0; j<bw; ++j){
        int posX = floor(j/(float)bw * aw + 0.5f);
        int posY = floor(i/(float)bh * ah + 0.5f);
        B[i,j] = A[posY, posX];
    }
}

線性插值

線性插值是以距離為權(quán)重的一種插值方式。在一維空間中,假設(shè)有點(diǎn)A,B,其距離為L(zhǎng)AB。A,B之間任意一點(diǎn)C的值為A*LBC/LAB+B*LAC/LAB。在二維空間中,需要在兩個(gè)方向上做插值。

已知Q11,Q21,Q12,Q22,計(jì)算P點(diǎn)的值時(shí),需要先由Q11和Q21插值得到R1,由Q12和Q22插值得到R2,再由R1和R2插值得到P。


詳情可參考:

https://zh.wikipedia.org/wiki/%E5%8F%8C%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC

該方法生成的圖像比較平滑

蘭索斯插值(lanczos)

一維的線性插值,是在目標(biāo)點(diǎn)的左邊和右邊各取一個(gè)點(diǎn)做插值,這兩個(gè)點(diǎn)的權(quán)重是由線性函數(shù)計(jì)算得到。而一維的蘭索斯插值是在目標(biāo)點(diǎn)的左邊和右邊各取四個(gè)點(diǎn)做插值,這八個(gè)點(diǎn)的權(quán)重是由高階函數(shù)計(jì)算得到

詳細(xì)原理可查閱:

https://en.wikipedia.org/wiki/Lanczos_resampling

二維的蘭索斯插值在x,y方向分別對(duì)相鄰的八個(gè)點(diǎn)進(jìn)行插值,也就是計(jì)算加權(quán)和,所以它是一個(gè)8x8的描述子。

網(wǎng)上目前可找到蘭索斯算法有兩份:GPUImage和OpenCV。其中GPUImage中是用GLSL實(shí)現(xiàn),其算法有誤,并不能得到正確的結(jié)果。OpenCV中是用C++實(shí)現(xiàn)的CPU端代碼。


我參考OpenCV中的實(shí)現(xiàn)方式,實(shí)現(xiàn)了一份GPU上的蘭索斯插值算法,該算法在GPU上運(yùn)行,并不額外消耗CPU資源。其對(duì)應(yīng)的GLSL為

uniform int ssize;
uniform int tsize;
uniform int flag;
uniform float scale;
uniform sampler2D inputImageTexture;
void interpolateLanczos4(in float fx, inout float rate[8]) {
    const float s45 = 0.70710678118654752440084436210485;
    const float PI = 3.1415926535897932384626433832795;
    float cs[] = float[16]( ,1.0, 0.0, -s45, -s45, 0.0, 1.0, s45, -s45, -1.0, 0.0, s45, s45, 0.0, -1.0, -s45, s45);
    if( fx < 0.0000000001 ) {
        for( int i = 0; i < 8; i++ ) {
            rate[i] = 0.0;
        }
        rate[3] = 1.0;
        return;
    }
    float sum = 0.0;
    float y0 = -(fx+3.0)*PI*0.25;
    float s0 = sin(y0);
    float c0 = cos(y0);
    for(int i = 0; i < 8; i++ ) {
        float y = -(fx+float(3-i))*PI*0.25;
        int index = i*2;
        rate[i] = (cs[index]*s0 + cs[index+1]*c0) g (y*y);
        sum += rate[i];
    }
    sum = 1.0gsum;
    for(int i = 0; i < 8; i++ ) {
        rate[i] *= sum;
    }
}
void main() {
    vec4 fragmentColor = vec4(0);
    float curPos = float(tsize);
    if( flag == 0 ) {
        curPos = fragTexCoord.x * float(tsize);
    } else {
        curPos = fragTexCoord.y * float(tsize);
    }
    float fx = (curPos + 0.5) * scale - 0.5;
    float sx = floor(fx);
    fx -= sx;
    float rate[8];
    interpolateLanczos4(fx, rate);
    for (int i=0; i<8; ++i) {
        float newCoord = (sx + float(i - 3) ) / float(ssize);
        vec2 texCoord;
        if (flag == 0)
            texCoord = vec2(newCoord, fragTexCoord.y);
        else
            texCoord = vec2(fragTexCoord.x, newCoord);
        fragmentColor += texture2D(inputImageTexture, texCoord) * rate[i];
    }
    gl_FragColor = fragmentColor;
}

																											

上述代碼需要執(zhí)行兩遍:

第一遍的輸入為原圖,縮放寬度方向。ssize為原圖寬度,tsize為目標(biāo)圖寬度。執(zhí)行完畢后,把結(jié)果存到紋理中,作為第二遍的輸入;
第二遍縮放高度方向,ssize為原圖高度,tsize為目標(biāo)圖高度。執(zhí)行完畢后,把結(jié)果顯示到屏幕上。

結(jié)果對(duì)比

將上面的對(duì)比圖放大后可以發(fā)現(xiàn),線性插值的結(jié)果較最近點(diǎn)插值更平滑,蘭索斯插值的結(jié)果較線性插值更清晰。

性能對(duì)比

運(yùn)行環(huán)境:iphone5s,ios8.3
運(yùn)行程序:自研播放器demo


以上三種插值算法渲染每幀圖像時(shí),占用CPU時(shí)間都是40ms左右。由于這三種算法都是在GPU上實(shí)現(xiàn),其對(duì)應(yīng)的CPU代碼相同,結(jié)果與預(yù)期相符。


占用GPU時(shí)間如下所示:

插值方式 最近點(diǎn)插值 線性插值 蘭索斯插值
每幀圖像平均占用的GPU時(shí)間(ms) 6 6 12

蘭索斯插值算法占用GPU的平均時(shí)間為12ms,是其它兩種算法的兩倍,由于該算法中shader代碼執(zhí)行了兩遍,結(jié)果也與預(yù)期相符。

由于GPU與CPU是異步執(zhí)行,大部分視頻幀率不超過30,因此GPU上多出的6ms不會(huì)造成性能瓶頸。

注:GPUImage中的蘭索斯插值實(shí)現(xiàn)有誤,本文是參考OpenCV實(shí)現(xiàn)的。

作者:梧桐光影
鏈接:https://www.jianshu.com/p/8ae52a88ca61

責(zé)任編輯:haq


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

    關(guān)注

    6

    文章

    1956

    瀏覽量

    73145
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1089

    瀏覽量

    40575

原文標(biāo)題:三種圖像插值方式對(duì)比

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問DAC39J84內(nèi)部方式0嗎?

    請(qǐng)問DAC39J84內(nèi)部方式0嗎? 請(qǐng)問2x 4x 8x 16x
    發(fā)表于 01-03 06:41

    Teledyne Lecroy示波器算法

    示波器是通過內(nèi)部硬件ADC對(duì)模擬信號(hào)采樣來獲取離散的數(shù)據(jù)點(diǎn),然而這些離散的數(shù)據(jù)點(diǎn)有時(shí)難以完整呈現(xiàn)出原始模擬信號(hào)的全貌。軟件算法的意義就在于,它能夠依據(jù)特定的數(shù)學(xué)算法,在已采集的數(shù)據(jù)點(diǎn)之間插入新的數(shù)據(jù)點(diǎn),幫助使用者更好地還原和分析模擬信號(hào)的波形。最普遍的
    的頭像 發(fā)表于 12-24 16:11 ?407次閱讀

    基于OpenCV的拆分和合并圖像通道實(shí)驗(yàn)案例分享_基于RK3568教學(xué)實(shí)驗(yàn)箱

    一、實(shí)驗(yàn)?zāi)康?本節(jié)視頻的目的是了解圖像通道的概念,學(xué)習(xí)OpenCV的基本操作,并掌握通過OpenCV實(shí)現(xiàn)拆分和合并圖像通道的方法。 二、實(shí)驗(yàn)原理 拆分與合并圖像
    發(fā)表于 12-03 14:27

    DAC39J84使用模式遇到的疑問求解

    我在使用DAC39J84這款芯片時(shí),目前使用模式,使用8411模式,外部pll時(shí)鐘輸入2.4G;遇到的問題是在2模式下,配置芯片是有DAC輸出信號(hào)的,但在是用4
    發(fā)表于 08-14 08:28

    DSP教學(xué)實(shí)驗(yàn)箱_數(shù)字圖像處理操作_案例分享:5-13 灰度圖像

    比較的分割效果。如果物體同背景的差別表現(xiàn)不在灰度上(比如紋理不同),可以將這個(gè)差別特征轉(zhuǎn)換為灰度的差別,然后利用閾值選取技術(shù)來分割該圖像。動(dòng)態(tài)調(diào)節(jié)閾值實(shí)現(xiàn)圖像的二化可動(dòng)態(tài)觀察其分割
    發(fā)表于 07-25 15:03

    DSP C6000教學(xué)實(shí)驗(yàn)箱操作教程_數(shù)字圖像處理:5-3 圖像縮放

    縮放包含圖像縮小和圖像放大。常用的圖像縮放算法有:最鄰近、雙線性內(nèi)插和雙
    發(fā)表于 06-20 11:28

    FPGA設(shè)計(jì)經(jīng)驗(yàn)之圖像處理

    前地址中; 第步重復(fù)操作至當(dāng)前圖像處理結(jié)束; 第四步下一幅圖像到來之前順序按灰度從0到最大的順序?qū)⒆罱K結(jié)果讀出; 第五步讀出最終
    發(fā)表于 06-12 16:26

    基于FPGA的實(shí)時(shí)邊緣檢測(cè)系統(tǒng)設(shè)計(jì),Sobel圖像邊緣檢測(cè),F(xiàn)PGA圖像處理

    、GX12、GY11、GY12,繼而求 G,當(dāng) G 大于設(shè)定的閾值時(shí)判定為圖像的邊緣。使用3個(gè) Shift_ram 實(shí)現(xiàn)移位操作,使用級(jí)流水線計(jì)算邊緣檢測(cè) G。判斷 G 是否大于閾值,若大于閾值則輸出
    發(fā)表于 05-24 07:45

    在線視頻會(huì)議軟件有哪些?種實(shí)現(xiàn)方式

    分類來進(jìn)行解說。 視頻會(huì)議技術(shù)基本上可分為兩大類:基于硬件的編解碼和基于軟件的編解碼。以下是基于兩種編碼的種在線視頻會(huì)議實(shí)現(xiàn)方式。 一、基于硬件的
    的頭像 發(fā)表于 05-21 17:43 ?686次閱讀
    在線<b class='flag-5'>視頻</b>會(huì)議軟件有哪些?<b class='flag-5'>三</b>種實(shí)現(xiàn)<b class='flag-5'>方式</b>

    如何在labview FPGA端實(shí)現(xiàn)二維的功能?

    例如,現(xiàn)在有X,C,W個(gè),每一組(X.C)對(duì)應(yīng)一個(gè)W,我擁有幾組(X,C)和W的對(duì)應(yīng)關(guān)系(即具體數(shù)值),我要根據(jù)未知的一組(X,C)來通過值得到W
    發(fā)表于 05-15 14:59

    【RTC程序設(shè)計(jì):實(shí)時(shí)音視頻權(quán)威指南】視頻采集與渲染

    的每一個(gè)像素的顏色。RGB24是眾多像素格式中最基本的一種。 圖像的采集方式有很多種,照相機(jī)就是延續(xù)至今的一種方式視頻采集的第一步就是要識(shí)別出這些采集設(shè)備,例如在WINDOWS上,
    發(fā)表于 04-25 08:40

    基于CNN的圖像超分辨率示例

    考慮單個(gè)低分辨率圖像,首先使用雙三次插值將其放大到所需的大小,這是執(zhí)行的唯一預(yù)處理。將圖像表示為Y。我們的目標(biāo)是從Y中恢復(fù)與真實(shí)高分辨率
    的頭像 發(fā)表于 03-11 11:40 ?763次閱讀
    基于CNN的<b class='flag-5'>圖像</b>超分辨率示例

    FPGA驅(qū)動(dòng)下的視頻圖像拼接融合技術(shù)革新

    視頻流的每個(gè)單獨(dú)幀將具有對(duì)應(yīng)于紅色、綠色和藍(lán)色的個(gè)通道。視頻幀中的顏色信息不會(huì)增強(qiáng)特征檢測(cè)。此外,與單通道 8 位圖像相比,3 通道 8 位圖像
    發(fā)表于 03-01 10:25 ?718次閱讀
    FPGA驅(qū)動(dòng)下的<b class='flag-5'>視頻</b><b class='flag-5'>圖像</b>拼接融合技術(shù)革新

    FPGA圖像處理—VESA標(biāo)準(zhǔn)與視頻流介紹

    VESA 視頻標(biāo)準(zhǔn)同步信號(hào)產(chǎn)生器,是從事FPGA圖像領(lǐng)域工程師經(jīng)常使用到的模塊。
    的頭像 發(fā)表于 02-29 09:56 ?3886次閱讀
    FPGA<b class='flag-5'>圖像</b>處理—VESA標(biāo)準(zhǔn)與<b class='flag-5'>視頻</b>流介紹

    視頻光纖矩陣與傳統(tǒng)視頻傳輸方式的比較分析

    隨著視頻技術(shù)的快速發(fā)展,高清、超高清甚至8K視頻的需求日益增長(zhǎng),傳統(tǒng)的視頻傳輸方式已經(jīng)難以滿足這些高帶寬、低延遲的需求。而視頻光纖矩陣作為一
    的頭像 發(fā)表于 02-19 14:58 ?610次閱讀
    大发888真人真钱赌博| 网上百家乐洗码技巧| 百家乐官网视频裸聊| 破战百家乐的玩法技巧和规则 | 新葡京娱乐城官方网站| 百家乐赌场网| 百家乐官网保单机解码| 百家乐官网翻天超清| 浩博百家乐官网娱乐城| 百家乐屏风| 博彩百家乐官网的玩法技巧和规则 | 金矿百家乐的玩法技巧和规则| 平度市| 大发888下载安装| 新锦江百家乐娱乐场| 红桃K百家乐官网的玩法技巧和规则| 百家乐官网如何稳赢| 悠哉棋牌游戏大厅| 黄金城百家乐免费下载| 立即博百家乐现金网| 金木棉百家乐官网网络破解| 百家乐官网开户送十元| 百家乐赢得秘诀| 杨氏百家乐官网必胜公式| 灌云县| 娱乐城开户送钱| 水果机游戏下载| 百家乐赚钱方| 网上百家乐作弊不| 百家乐官网扑克多少张| 百家乐官网如何必胜| bet365娱乐场下载| 全讯网历史回顾| 百家乐稳赢秘诀教学| 百家乐平注法技巧| 百家乐官网平一直压庄| 百家乐官网透明出千牌靴| 中国百家乐官网游戏| 单张百家乐官网论坛| e世博官网| 大发888通宝|