用vb语言编程实现jpeg资料压缩

用vb语言编程实现jpeg资料压缩

ID:13544864

大小:75.00 KB

页数:9页

时间:2018-07-23

用vb语言编程实现jpeg资料压缩_第1页
用vb语言编程实现jpeg资料压缩_第2页
用vb语言编程实现jpeg资料压缩_第3页
用vb语言编程实现jpeg资料压缩_第4页
用vb语言编程实现jpeg资料压缩_第5页
资源描述:

《用vb语言编程实现jpeg资料压缩》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、用VB語言編程實現JPEG資料壓縮周俊敏JPEG壓縮格式是目前圖像處理領域裏面用得最廣泛的一種圖像壓縮方式,它的實現主要分成四個步驟:1.顔色模式轉換及採樣;2.DCT變換(離散余弦變換);3.量化;4.編碼(有算術編碼和霍夫曼編碼兩種,這裏採用霍夫曼編碼),用VB語言編程實現以上四個步驟,即完成了JPEG壓縮過程,這裏假設給定的源圖像是一幅24位元真彩色的BMP圖像。一、顔色轉換及採樣1.顔色轉換:對BMP圖像中的顔色資料進行由RGB一YCbCr的轉換,Y表示亮度,CbCr分別表示藍色度和紅色度。轉換公式:Y=0.2990R+0.5870G+0.1140BCb=-0.1687R-

2、0.3313G+0.5000BCr=0.5000R-0.4187G-0.0813B這樣轉換以後就得到三個新的基色值,對這三個基色值來講,都可以當作一個獨立的圖像平面來進行壓縮編碼。2.採樣:顔色轉換後,保留每一點的亮度值Y而色度值Cb,Cr則是每兩點保留一點,在圖像的行和列方向上都可執行顔色採樣,這裏採用的採樣比是行列方向都是2:1:1,在行方向,每兩點保留一點,列方向也是每兩點保留一點,這樣如果假設原來的CbCr矩陣大小爲M*S,則經過2:1:1抽樣之後成了M/2*s/2=1/4M*S,只有原來的1/4了,圖像大大縮小,如果想減小圖像的失真度,則可行方向不抽樣或列方向不抽樣。程式

3、實現:1.讀取BMP圖像資訊,獲取圖像行圖元和列圖元數值,在BMP圖像中,圖像數據是以倒序存放的。亦即實際圖像第一行資料存放在BMP圖像資料矩陣的最後一行,依次類推,所以取資料的時候要從BMP圖像資料矩陣的最後一行開始讀起,把資料存放在新建陣列(或稱矩陣)的第一行,一直取完。BMP圖像行圖元和列圖元的數值分別存於文件頭資訊的第18和22位元組。用Get語句可得到Pwidth(圖像寬度)和Phight(圖像高度)的數值。2.得到Pwidth*Phight後便得知BMP圖像的圖元點大小,而資料矩陣(三基色,RGB矩陣)的大小是Pwidth*Phight*3,因爲每一個圖元點都含有RGB

4、三個資料,我們要處理的是資料矩陣而不是圖元點矩陣。所以,新建陣列的大小是(Pwidth*3)*Phight。在BMP圖像資料矩陣中,三原色RGB的排列順序是這樣的:B.G.R.B.G.R...........RB.G.R....................RB..........B.G.R....................R接下來,把這一個矩陣(包含BGR)拆分成三個獨立的B、G、R矩陣,得到三個新的矩陣(只包含B的矩陣,只包含G的矩陣,只包含R的矩陣),簡稱爲B矩陣、G矩陣、R矩陣(大小爲Pwidth*Phight),用程式實現拆分,只要依次取原矩陣的第1、4、7、10

5、、13......個資料即得到B矩陣,依次讀取第2、5、8、11......個數據即得到G矩陣,依次讀第3、6、9、12......個資料即得到R矩陣。得到B、G、R矩陣後再利用顔色轉換公式很容易就可得到YCbCr矩陣。Y(n)=0.114B(n)+0.587G(n)+0.299R(n)Cb(n)=0.5B(n)-0.3313G(n)-0.1687R(n)Cr(n)=0.0813B(n)-0.14187G(n)+0.5R(n)(Forn=1ToPW*PH)其中PW爲Pwidth的簡寫,PH爲Phight的簡寫。得Y、Cb、Cr矩陣後,先判斷一下三個矩陣的行數和列數是否都被16整除,

6、如果不能則以最後一行或一列的資料填充到能被16整除爲止,所需填充的數目爲:行方向:16-(Pwidthmod16)列方向:16-(Phightmod16)填充以後YCbCr矩陣的大小成爲M*S,其中,設M=Pwidth+16-(Pwidthmod16);S=Phight+16-(Phightmod16)。3、抽樣:Y矩陣不動,CbCr矩陣行列方向上相鄰兩點隻保留一點的資料值(只要在其行方向取第1、3、5、7......個數值,列方向也取1、3、5、7......個資料即可完成2:1:1採樣),行、列方向都進行2:1:1抽樣後的Cb、Cr矩陣大小變成原來的1/4(M/2*S/2)。現

7、在的結果是Y矩陣大小爲M*S,Cb,Cr爲M/2*S/2,至此已經完成了顔色轉換及採樣,接下來做第二步——DCT變換。二、DCT變換在DCT變換之前得做一些準備工作,由於DCT變換一次只能做64個資料。因此,首先得把Y、Cb、Cr矩陣分成一個8*8的小塊;其次,由於離散余弦變換公式所能接受的數值範圍是-128至127之間,因此還得把Y、Cb、Cr矩陣中的每個資料減去128。分塊是一項比較煩瑣的工作,尤其是對於Y矩陣,Cb、Cr矩陣好辦,直接按順序分成8*8塊就可以了,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。