色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

視頻圖像三插值方式的結果

新機器視覺 ? 來源:簡書 ? 作者:梧桐光影 ? 2021-11-09 15:39 ? 次閱讀

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

縮放就是在原圖的基礎上做插值計算,從而增加或減少像素點的數量。常見的插值方式有最近點插值,線性插值,蘭索斯插值

下面簡要介紹,并對比三種插值方式的結果。

最近點插值

在一維空間中,最近點插值就相當于四舍五入取整。在二維圖像中,像素點的坐標都是整數,該方法就是選取離目標點最近的點。計算方式如下:

假設原圖為A[aw,ah],寬度為aw,高度為ah。目標圖為B[bw,bh],寬度為bw,高度為bh。已知A[aw,ah]的寬度,高度及其中每個點的顏色值,B[bw,bh]中每個點像素值的計算方式如下:

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];
    }
}

線性插值

線性插值是以距離為權重的一種插值方式。在一維空間中,假設有點A,B,其距離為LAB。A,B之間任意一點C的值為A*LBC/LAB+B*LAC/LAB。在二維空間中,需要在兩個方向上做插值。

已知Q11,Q21,Q12,Q22,計算P點的值時,需要先由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)

一維的線性插值,是在目標點的左邊和右邊各取一個點做插值,這兩個點的權重是由線性函數計算得到。而一維的蘭索斯插值是在目標點的左邊和右邊各取四個點做插值,這八個點的權重是由高階函數計算得到

詳細原理可查閱:

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

二維的蘭索斯插值在x,y方向分別對相鄰的八個點進行插值,也就是計算加權和,所以它是一個8x8的描述子。

網上目前可找到蘭索斯算法有兩份:GPUImage和OpenCV。其中GPUImage中是用GLSL實現,其算法有誤,并不能得到正確的結果。OpenCV中是用C++實現的CPU端代碼。


我參考OpenCV中的實現方式,實現了一份GPU上的蘭索斯插值算法,該算法在GPU上運行,并不額外消耗CPU資源。其對應的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;
}

																											

上述代碼需要執行兩遍:

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

結果對比

將上面的對比圖放大后可以發現,線性插值的結果較最近點插值更平滑,蘭索斯插值的結果較線性插值更清晰。

性能對比

運行環境:iphone5s,ios8.3
運行程序:自研播放器demo


以上三種插值算法渲染每幀圖像時,占用CPU時間都是40ms左右。由于這三種算法都是在GPU上實現,其對應的CPU代碼相同,結果與預期相符。


占用GPU時間如下所示:

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

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

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

注:GPUImage中的蘭索斯插值實現有誤,本文是參考OpenCV實現的。

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

責任編輯:haq


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 視頻
    +關注

    關注

    6

    文章

    1942

    瀏覽量

    72885
  • 圖像
    +關注

    關注

    2

    文章

    1083

    瀏覽量

    40449

原文標題:三種圖像插值方式對比

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于OpenCV的拆分和合并圖像通道實驗案例分享_基于RK3568教學實驗箱

    一、實驗目的 本節視頻的目的是了解圖像通道的概念,學習OpenCV的基本操作,并掌握通過OpenCV實現拆分和合并圖像通道的方法。 二、實驗原理 拆分與合并圖像
    發表于 12-03 14:27

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

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

    DSP教學實驗箱_數字圖像處理操作_案例分享:5-13 灰度圖像

    比較的分割效果。如果物體同背景的差別表現不在灰度上(比如紋理不同),可以將這個差別特征轉換為灰度的差別,然后利用閾值選取技術來分割該圖像。動態調節閾值實現圖像的二化可動態觀察其分割
    發表于 07-25 15:03

    DSP C6000教學實驗箱操作教程_數字圖像處理:5-3 圖像縮放

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

    FPGA設計經驗之圖像處理

    前地址中; 第步重復操作至當前圖像處理結束; 第四步下一幅圖像到來之前順序按灰度從0到最大的順序將最終結果讀出; 第五步讀出最終
    發表于 06-12 16:26

    基于FPGA的實時邊緣檢測系統設計,Sobel圖像邊緣檢測,FPGA圖像處理

    、GX12、GY11、GY12,繼而求 G,當 G 大于設定的閾值時判定為圖像的邊緣。使用3個 Shift_ram 實現移位操作,使用級流水線計算邊緣檢測 G。判斷 G 是否大于閾值,若大于閾值則輸出
    發表于 05-24 07:45

    如何在labview FPGA端實現二維的功能?

    例如,現在有X,C,W,每一組(X.C)對應一個W,我擁有幾組(X,C)和W的對應關系(即具體數值),我要根據未知的一組(X,C)來通過值得到W
    發表于 05-15 14:59

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

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

    FPGA驅動下的視頻圖像拼接融合技術革新

    視頻流的每個單獨幀將具有對應于紅色、綠色和藍色的個通道。視頻幀中的顏色信息不會增強特征檢測。此外,與單通道 8 位圖像相比,3 通道 8 位圖像
    發表于 03-01 10:25 ?644次閱讀
    FPGA驅動下的<b class='flag-5'>視頻</b><b class='flag-5'>圖像</b>拼接融合技術革新

    FPGA圖像處理—VESA標準與視頻流介紹

    VESA 視頻標準同步信號產生器,是從事FPGA圖像領域工程師經常使用到的模塊。
    的頭像 發表于 02-29 09:56 ?3598次閱讀
    FPGA<b class='flag-5'>圖像</b>處理—VESA標準與<b class='flag-5'>視頻</b>流介紹

    視頻光纖矩陣與傳統視頻傳輸方式的比較分析

    隨著視頻技術的快速發展,高清、超高清甚至8K視頻的需求日益增長,傳統的視頻傳輸方式已經難以滿足這些高帶寬、低延遲的需求。而視頻光纖矩陣作為一
    的頭像 發表于 02-19 14:58 ?531次閱讀

    輸電線路圖像視頻監測裝置運用了哪些技術?

    輸電線路圖像視頻監測裝置是一種用于線路巡檢的智能監控設備,具備圖像視頻采集、傳輸、處理和分析功能。通過采集輸電通道的圖像
    的頭像 發表于 01-22 13:44 ?461次閱讀

    圖像連通區域的標記原理

    圖像是一種由黑白兩色組成的圖像,其像素只有兩種可能,分別對應黑色和白色。在二圖像中,連通
    的頭像 發表于 01-05 14:28 ?834次閱讀

    ADE7880采用的是線接線方式,測試電壓有效時數據不正確怎么解決?

    各位專家: 我電路采用的是線接線方式,如下圖所示。 現測試電壓有效時數據不正確。 相輸入時,外部VA,VB,VC給信號11V,由于
    發表于 12-26 07:43

    什么是線性插值?一維線性插值和雙線性插值在BMS開發中的應用

    線性插值法(linear interpolation),是指使用連接兩個已知量的直線來確定在這兩個已知量之間的一個未知量的的方法。
    的頭像 發表于 12-24 10:44 ?1w次閱讀
    什么是線性<b class='flag-5'>插值</b>?一維線性<b class='flag-5'>插值</b>和雙線性<b class='flag-5'>插值</b>在BMS開發中的應用
    主站蜘蛛池模板: 女生下面免费看| 国产在线视频一区二区不卡| 丰满女朋友在线观看中文| 岛国片在线免费观看| 国产精品一区二区三区免费| 国精产品999一区二区三区有限| 黄 色 网 站 免 费 涩涩屋| 久久er国产精品免费观看2| 久久久久久久网| 年轻的女职工在线观看| 日韩娇小性hd| 亚洲成 人a影院青久在线观看| 伊人久久精品中文字幕| 99九九精品视频| 古月娜下面好紧好爽| 黑吊大战白女出浆| 美女张开大腿| 色欲人妻AAAAAAA无码| 午夜福利理论片在线播放| 亚洲第一色网| 岳扒开让我添| 超碰免费碰免费视频| 私人玩物黑丝| 精品极品三大极久久久久| 国产成人99久久亚洲综合精品| 99热在线免费观看| 亚洲国产精品嫩草影院永久| 嗯啊快拔出来我是你老师视频| 精品亚洲国产熟女福利自在线 | 无罩看奶禁18| 午夜精品久久久内射近拍高清 | 99久久国产露脸精品国产麻豆| 最新国产精品视频免费看| 阿离被扒开双腿疯狂输出| 国产免费午夜高清| 免费果冻传媒2021视频| 无人区日本电影在线观看高清| 约艺术院校96年清纯白嫩| 国产 高清 无码 中文| 久久精品久久精品| 人妻兽虐曲|