91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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ī)器視覺(jué) ? 來(lái)源:簡(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í)行,大部分視頻幀率不超過(guò)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ī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 視頻
    +關(guān)注

    關(guān)注

    6

    文章

    2005

    瀏覽量

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

    關(guān)注

    2

    文章

    1096

    瀏覽量

    42336

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    星貼片電容的容精度等級(jí)如何劃分?

    星貼片電容的容精度是指其實(shí)際電容與標(biāo)稱電容之間的允許偏差范圍,這一指標(biāo)通過(guò)特定的字母代碼進(jìn)行劃分,反映了電容在制造過(guò)程中容的精確程
    的頭像 發(fā)表于 01-09 16:10 ?623次閱讀
    <b class='flag-5'>三</b>星貼片電容的容<b class='flag-5'>值</b>精度等級(jí)如何劃分?

    Termux手機(jī)攝像頭采集圖像/視頻流 部署 YOLO 模型推理

    Termux手機(jī)攝像頭采集圖像/視頻流 部署 YOLO 模型推理
    的頭像 發(fā)表于 12-14 07:26 ?2860次閱讀

    DAC5681Z 16 位 1.0 GSPS 型數(shù)模轉(zhuǎn)換器(DAC)產(chǎn)品手冊(cè)總結(jié)

    濾波器。每個(gè)FIR可配置為以下任一格式 低通或高通模式,允許選擇更高階輸出的光譜圖像。一個(gè)芯片 延遲鎖環(huán)(DLL)通過(guò)為L(zhǎng)VDS輸入
    的頭像 發(fā)表于 11-21 14:03 ?690次閱讀
    DAC5681Z 16 位 1.0 GSPS <b class='flag-5'>插</b><b class='flag-5'>值</b>型數(shù)模轉(zhuǎn)換器(DAC)產(chǎn)品手冊(cè)總結(jié)

    快手平臺(tái)獲取視頻評(píng)論API接口技術(shù)指南

    ? 本文將詳細(xì)介紹如何通過(guò)官方API接口獲取快手平臺(tái)視頻評(píng)論數(shù)據(jù),并提供Python實(shí)現(xiàn)示例。 一、接口基本信息 請(qǐng)求地址 https://o0b.cn/evan 請(qǐng)求方式 GET 認(rèn)證方式 需要
    的頭像 發(fā)表于 11-18 15:32 ?571次閱讀
    快手平臺(tái)獲取<b class='flag-5'>視頻</b>評(píng)論API接口技術(shù)指南

    神經(jīng)網(wǎng)絡(luò)加速器的雙線性插值上采樣

    沒(méi)有灰度不連續(xù)的缺點(diǎn),結(jié)果基本令人滿意。它具有低通濾波輪廓可能會(huì)有一點(diǎn)模糊。 (3)次曲線插方法參數(shù)多,計(jì)算量比雙線性插值要多得多,雖然效果好,但速度較慢。 (4)基于深度學(xué)習(xí)的上
    發(fā)表于 10-29 06:36

    使用Otsu閾值算法將灰度圖像

    Otsu 算法是由日本學(xué)者OTSU于1979年提出的一種對(duì)圖像進(jìn)行二化的高效算法,又稱“最大類間方差法”。當(dāng)我們對(duì)一個(gè)圖象進(jìn)行二化操作的時(shí)候,需要根據(jù)一項(xiàng)灰度閾值來(lái)判決每個(gè)像素點(diǎn)應(yīng)該被視作純黑
    發(fā)表于 10-28 06:49

    創(chuàng)龍 瑞芯微 RK3588 國(guó)產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—視頻圖像處理框架

    創(chuàng)龍科技研發(fā)的 TL3588-EVM 評(píng)估板依托 RK3588/RK3588J SoC 強(qiáng)大的視頻圖像處理能力,可滿足多場(chǎng)景圖像應(yīng)用需求。為幫助開發(fā)者全面了解其視頻
    的頭像 發(fā)表于 10-16 11:45 ?1389次閱讀
    創(chuàng)龍 瑞芯微 RK3588 國(guó)產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—<b class='flag-5'>視頻</b><b class='flag-5'>圖像</b>處理框架

    環(huán)直瓷片電容選型需要考慮哪些方面?

    環(huán)直瓷片電容作為電子電路中常用的元件,其選型需綜合考慮電路需求、產(chǎn)品特性、環(huán)境條件及可靠性要求等多方面因素。以下是選型時(shí)需重點(diǎn)關(guān)注的維度及具體要點(diǎn): 一、基礎(chǔ)參數(shù)匹配 1、電容 需求分析:根據(jù)
    的頭像 發(fā)表于 10-14 14:29 ?608次閱讀
    <b class='flag-5'>三</b>環(huán)直<b class='flag-5'>插</b>瓷片電容選型需要考慮哪些方面?

    星COG材質(zhì)電容的耐壓是多少?

    星COG材質(zhì)電容的耐壓通常覆蓋6.3V至500V,常見規(guī)格包括50V、100V、250V及500V,具體取決于封裝尺寸與產(chǎn)品系列。以下為詳細(xì)分析: 一、耐壓范圍與典型規(guī)格 基礎(chǔ)耐壓
    的頭像 發(fā)表于 10-13 14:38 ?729次閱讀

    雙路MIPI數(shù)字視頻接口AI圖像處理板Viztra-LE048上線

    MIPI視頻接口具備高數(shù)據(jù)傳輸速率的特點(diǎn),能夠滿足高分辨率和高刷新率顯示的需求。其傳輸速度最高可達(dá)數(shù)Gbps,確保圖像視頻數(shù)據(jù)能夠迅速且準(zhǔn)確地傳輸和處理?,在圖像處理領(lǐng)域能夠和攝像頭
    的頭像 發(fā)表于 07-01 17:55 ?1248次閱讀
    雙路MIPI數(shù)字<b class='flag-5'>視頻</b>接口AI<b class='flag-5'>圖像</b>處理板Viztra-LE048上線

    圖像采集卡與視頻采集卡的主要區(qū)別對(duì)比

    圖像采集卡和視頻采集卡的核心區(qū)別在于它們的設(shè)計(jì)目標(biāo)、處理對(duì)象和典型應(yīng)用場(chǎng)景。盡管名稱相似,且有時(shí)功能會(huì)有重疊(尤其是高端設(shè)備),但它們側(cè)重點(diǎn)不同:以下是主要區(qū)別:1.處理對(duì)象與目標(biāo)圖像采集卡:主要目
    的頭像 發(fā)表于 06-27 14:42 ?978次閱讀
    <b class='flag-5'>圖像</b>采集卡與<b class='flag-5'>視頻</b>采集卡的主要區(qū)別對(duì)比

    HarmonyOS應(yīng)用圖像stride處理方案

    當(dāng)圖像存儲(chǔ)在內(nèi)存中時(shí),內(nèi)存緩沖區(qū)可能在每行像素之后包含額外的填充字節(jié)。填充字節(jié)會(huì)影響圖像在內(nèi)存中的存儲(chǔ)方式,但不會(huì)影響圖像的顯示方式。str
    的頭像 發(fā)表于 06-10 14:17 ?1238次閱讀
    HarmonyOS應(yīng)用<b class='flag-5'>圖像</b>stride處理方案

    基于LockAI視覺(jué)識(shí)別模塊:C++使用圖像的統(tǒng)計(jì)信息

    )。 COLOR_BGR2GRAY:將BGR圖像轉(zhuǎn)換為灰度圖像。 返回: 無(wú)。最后結(jié)果儲(chǔ)存在grayImage中。注意: 其中根據(jù)不同的轉(zhuǎn)換要求可以使用不同的轉(zhuǎn)換代碼,具體如下所示
    發(fā)表于 05-08 10:31

    基于LockAI視覺(jué)識(shí)別模塊:C++圖像的基本運(yùn)算

    src, OutputArray dst); 參數(shù): src:輸入圖像(cv::Mat) dst:輸出圖像(cv::Mat) 返回結(jié)果儲(chǔ)存在dst中 2.7
    發(fā)表于 05-06 16:56

    基于事件相機(jī)的統(tǒng)一幀與自適應(yīng)去模糊框架(REFID)

    )的解決方案。團(tuán)隊(duì)提出了一種基于事件相機(jī)的統(tǒng)一幀與自適應(yīng)去模糊框架(REFID)。該框架基于雙向遞歸網(wǎng)絡(luò),結(jié)合事件流和圖像信息,自適應(yīng)地融合來(lái)自不同時(shí)間點(diǎn)的信息,從而能夠在模糊的輸入幀情況下同步實(shí)現(xiàn)
    的頭像 發(fā)表于 03-14 11:48 ?1637次閱讀
    基于事件相機(jī)的統(tǒng)一幀<b class='flag-5'>插</b><b class='flag-5'>值</b>與自適應(yīng)去模糊框架(REFID)