日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

统计rgb与yuv文件中各分量的熵

發布時間:2024/6/1 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 统计rgb与yuv文件中各分量的熵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

統計rgb與yuv文件中各分量的熵

    • 要求
    • 提示
    • 代碼
    • 結果
    • 分析

要求

對群里發的down.rgb和down.yuv分析三個通道的概率分布,并計算各自的熵。

提示

兩個文件的分辨率均為256*256,yuv為4:2:0采樣空間,存儲格式為:rgb文件按每個像素BGR分量依次存放;YUV格式按照全部像素的Y數據塊、U數據塊和V數據塊依次存放。

代碼

#include<iostream> #include<fstream> using namespace std; #define height 256 #define width 256 #define size 65536 void H_RGB(unsigned char* buffer) {FILE* fp;float level_r[256] = { 0 };float level_g[256] = { 0 };float level_b[256] = { 0 };float Hr = 0, Hg = 0, Hb = 0;fopen_s(&fp, "C:\\Users\\tonym\\Desktop\\down.rgb", "rb");if (fp == 0)return;fread(buffer, size * 3, 1, fp);for (int i = 0; i < size * 3; i){level_b[buffer[i++]] ++;level_g[buffer[i++]] ++;level_r[buffer[i++]] ++;}for (int i = 0; i < 256; i++){if (level_b[i] / 65536 != 0)Hb = Hb - (level_b[i] / 65536) * (log(level_b[i] / 65536) / (log(2)) );if (level_g[i] / 65536 != 0)Hg = Hg - (level_g[i] / 65536) * (log(level_g[i] / 65536) / (log(2)) );if (level_r[i] / 65536 != 0)Hr = Hr - (level_r[i] / 65536) * (log(level_r[i] / 65536) / (log(2)) );}printf("Hr=%f\nHg=%f\nHb=%f\n", Hr, Hg, Hb); } float H_YUV(unsigned char* buffer,int len) {float level[256] = { 0 };float H=0;for (int i = 0; i < len; i){level[buffer[i++]] ++;}for (int i = 0; i < 256; i++){if (level[i] / len != 0)H = H - (level[i] / len) * (log(level[i] / len) / (log(2)));}return H; } int main() {int level_RGB[256] = { 0 };float sum_RGB[256];unsigned char* RGB_buffer;unsigned char* YUV_buffer1, * YUV_buffer2, * YUV_buffer3;RGB_buffer = new unsigned char[size * 3];YUV_buffer1 = new unsigned char[size];YUV_buffer2 = new unsigned char[size/4];YUV_buffer3 = new unsigned char[size/4];FILE* fp_yuv;fopen_s(&fp_yuv, "C:\\Users\\tonym\\Desktop\\down.yuv", "rb");if (fp_yuv == 0)return 0;fread(YUV_buffer1, 65536, 1, fp_yuv);fread(YUV_buffer2, 16384, 1, fp_yuv);fread(YUV_buffer3, 16384, 1, fp_yuv);H_RGB(RGB_buffer);printf("Hy=%f\n", H_YUV(YUV_buffer1, 65536));printf("Hu=%f\n", H_YUV(YUV_buffer2, 16384));printf("Hv=%f\n", H_YUV(YUV_buffer3, 16384));return 0; }

結果

分析

yuv文件中各分量的熵小于rgb中各分量的熵,說明rgb文件雖然體積大于4:2:0采樣格式的yuv文件但所含信息量的密度更高。

總結

以上是生活随笔為你收集整理的统计rgb与yuv文件中各分量的熵的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。