資料壓縮 作業三(讀取RGB檔案)

2021-10-03 22:40:07 字數 2488 閱讀 2474

1、乙個24bit的rgb檔案,每個畫素點可分為r、g、b三個分量,則這個檔案可分為3個8bit的檔案。

2、解析度為256 * 256,則乙個r/g/b檔案資料量為256 * 256,設為常量size;而乙個24bit的rgb檔案資料量為256 * 256 * 3,設為常量buffsize。

3、根據不同檔案的資料量可以開闢出不同長度的陣列用來存放讀取和寫入的資料。

用 buff[buffsize] 存放讀取24bit的rgb檔案得到的資料;

用 b[size],g[size],r[size] 存放從 buff 陣列裡分出來的對應的資料。

4、經過計算後即可得到資料的概率分布並將它們寫入txt檔案中。

5、計算熵。

//

// main.c

// readrgb

//// created by 阿華甜 on 2020/3/9.

//#include

#include

#include

"math.h"

#define size 256*256

#define buffsize 256*256*3

intmain()

//構建b_freq、b_freq、b_freq三個陣列來存放頻次

double b_freq[

256]=;

double g_freq[

256]=;

double r_freq[

256]=;

//得到畫素點對應取值的頻數

for(

int i=

0;i(*

(g+i)

==j)if(

*(r+i)

==j)}}

//計算頻率,並寫入rgb的txt檔案中

for(

int i=

0;i<

256;i++

)//關閉檔案

fclose

(b);

fclose

(g);

fclose

(r);

fclose

(fp)

;//釋放記憶體

free

(buff)

;free

(b);

free

(g);

free

(r);

//計算熵

熵:

hr=7.229553

hg=7.178462

hb=6.856861

1、由r_freq、g_freq、b_freq三根曲線疊加出來的折線圖我們可以看出b_freq的折線是最往右的,其次是g_freq的曲線,說明這個rgb檔案對應的影象應該是偏藍偏綠的;

2、在取值偏小處(0~11)r_freq明顯是有值的,而g_freq、b_freq無值或值很小,也說明了這張紅色調是很少的;

3、從r_freq、g_freq、b_freq三根曲線疊加出來的折線圖可以看出rgb三個分量都是在值小的地方概率較大,而在值大的地方概率較小,說明整張是偏暗的;

4、從r_freq、g_freq、b_freq三根曲線疊加出來的折線圖還可以看出,r_freq、g_freq的概率峰值都差不多,而且兩根曲線除了開頭處r_freq稍大於g_freq,其他地方兩根曲線的走勢差不多,說明r、g分量的熵是差不多的,且r的熵會稍大於g的熵;而b_freq的峰值非常突出,說明b的熵是最小的,最後計算出的結果也驗證了這點。

原圖可驗證分析的1、2、3點。

資料壓縮第三次作業 RGB檔案的讀取

讀入乙個24bitrgb檔案 以down.rgb為例,其解析度為256 256 輸出該資料檔案中r g b三個分量 各8bit表示 的概率分布示意圖和熵。include include include include intmain else err fopen s pbsat,b sat.txt ...

資料壓縮作業三2020 03 24

提示 用c或c 實現時 程式的流程為 開闢3個width height的unsigned char型陣列 開啟要讀出的rgb檔案 以 rb 方式開啟 開啟3個要輸出的資料統計檔案 以 w 方式開啟,可命名為r sat.txt等 將rgb資料從rgb檔案中讀出,並分別儲存到3個陣列中,期間計算資料的概...

資料壓縮任務三

作業3 讀入乙個24bitrgb檔案 以down.rgb為例,其解析度為256 256 輸出該資料檔案中r g b三個分量 各8bit表示 的概率分布示意圖 類似下圖 和熵。include include const int n 65536 using namespace std pragma wa...