- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
BMP转JPEG格式实现方法
JPEG压缩格式是目前图像处理领域里面用得最广泛的一种图像压缩方式,它的实现主要分成四个步骤:??? 1.颜色模式转换及采样;??? 2.DCT变换(离散余弦变换);??? 3.量化;??? 4.编码(有算术编码和霍夫曼编码两种,这里采用霍夫曼编码),用VB语言编程实现以上四个步骤,即完成了JPEG压缩过程,这里假设给定的源图像是一幅24位真彩色的BMP图像。?? 一、颜色转换及采样??? 1.颜色转换:对BMP图像中的颜色数据进行由RGB一YCbCr的转换,Y表示亮度,CbCr分别表示蓝色度和红色度。 ??? 转换公式:??? Y=0.2990R+0.5870G+0.1140B??? Cb=-0.1687R-0.3313G+0.5000B??? Cr=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了,图像大大缩小,如果想减小图像的失真度,则可行方向不抽样或列方向不抽样。??? 程序实现:??? 1.读取BMP图像信息,获取图像行像素和列像素数值,在BMP图像中,图像数据是以倒序存放的。亦即实际图像第一行资料存放在BMP图像数据矩阵的最后一行,依次类推,所以取资料的时候要从BMP图像数据矩阵的最后一行开始读起,把数据存放在新建数组(或称矩阵)的第一行,一直取完。BMP图像行像素和列像素的数值分别存于文件头信息的第18和22字节。用Get语句可得到Pwidth(图像宽度)和Phight(图像高度)的数值。??? 2.得到Pwidth*Phight后便得知BMP图像的像素点大小,而数据矩阵(三基色,RGB矩阵)的大小是Pwidth*Phight*3,因为每一个像素点都含有RGB三个数据,我们要处理的是数据矩阵而不是像素点矩阵。所以,新建数组的大小是(Pwidth*3)*Phight。??? 在BMP图像数据矩阵中,三原色RGB的排列顺序是这样的:???????????? B. G. R. B. G. R...........R???????????? B. G. R....................R???????????? B........?????? ???????????? .????????????????????????? .???????????? B. G. R....................R???? 接下来,把这一个矩阵(包含BGR)拆分成三个独立的B、G、R矩阵,得到三个新的矩阵(只包含B的矩阵,只包含G的矩阵,只包含R的矩阵),简称为B矩阵、G矩阵、R矩阵(大小为Pwidth*Phight),用程序实现拆分,只要依次取原矩阵的第1、4、7、10、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)??? (For n=1 To PW*PH)??? 其中PW为Pwidth的简写,PH为Phight的简写。??? 得Y、Cb、Cr矩阵后,先判断一下三个矩阵的行数和列数是否都被16整除,如果不能则以最后一行或一列的资料填充到能被16整除为止,所需填充的数目为:行方向:16-(Pwidth mod 16)??? 列方向:16-(Phight mod 16)??? 填充以后YCbCr矩阵的大小成为M*S,其中,设M=Pwidth+16-(Pwidth mod 16);S=Phight+16-(Phight mod 16)。?3、抽样:Y矩阵不动,CbCr矩阵行列方向上相邻两点只保留一点的资料值(只要在其行方向取第1、3、5、7......个数值,列方向也取1、3、5、7......个资料即可完成2:1:1采样),行、列方向都进行2:1:1抽样后的Cb、Cr矩阵
您可能关注的文档
最近下载
- JSCC B系列变频器产品手册.pdf VIP
- 部编版语文四年级上册第16课《麻雀》 配套练习(含解析).pdf VIP
- 认识医生和护士幼儿园助教幼儿园医学科普.pptx VIP
- 标准图集-19S910:自动喷水灭火系统设计.pdf VIP
- 成人经鼻高流量湿化氧疗临床规范应用专家共识.pptx VIP
- 数字化赋能下的高校教学质量监控与改进机制研究教学研究课题报告.docx
- 《成人无创通气设备相关面部压力性损伤风险评估与预防指南》解读PPT课件.pptx VIP
- 慈善组织保值增值投资活动管理暂行办法.docx VIP
- C836056【强化】2024年重庆大学100100基础医学《660基础医学综合(西医)之生理学》考.pdf VIP
- 提高手术患者术前准备完善率医院护理品管圈QCC成果汇报.pptx VIP
原创力文档


文档评论(0)