图像的压缩与恢复

一个图像是如何数字化的呢?不妨从一张玩具鸭子图片说起。

首先要把图片打格子分成若干小块,每块用一个数字来表示一种颜色。如果图像是纯黑白两色的,那每块只用1或0表示即可。若图像是16色的,每块用4位二进 数表示,因为2^4=16,即4位二进制有16种组合,每种组合表示一种颜色就行了。真彩色位图的每个小块,都是由不同等级的红绿蓝三种色彩组合的,如图所示,每种颜色有2^8个等级,所以共有2^24种颜色, 因此每小块需要24位二进制数来表示。

可见,数字图像越艳丽,则需要记录的二进制数就越多越长。除此之外,打的格子越密,则一副图的总数据量就越大,此例中鸭子图片分成了11×14=154 块,按真彩色位图来计算,则总数据量为154×24=3696比特。这些小格子显然是太大了,不能表现图片的细节,实际中的格子要密得多,例如 1024×768,这是大家都熟悉的显示分辩率。

看这张滑雪图,人体的色彩变化比较大,而天空和雪的色彩却非常单调,可以想象,代表每个小格颜色的数值也应该非常接近,图右下的原始数据是8个相邻格子的 色彩数据,由于两个相邻格子的数据差异很小,所以可以用第一个格式数据当作第二个格子数据的预测值,经实际测量后,把真实值与预测值的差值求出来,并用这 个差值来表示第二个格子的色彩。那么,实际记录下的就是第三行差值。但恢复数据时,用前面一个值加上差值,就是当前的色彩值,只要有第一位的基础值,后面 的色彩值就可以滚雪球式的一个个求出来。

用差值来记录色彩,只是简单地进行了很多个减法运算,在还原时再加回来,数据并没有一丁点的损失,因此被称为无损压缩,如果把很少的差值彻底丢弃, 在还原时把一个格子的色彩信息代表了周围很多格子的色彩,则压缩率更高,但格子之间的微小差别就丢失了,这种方法属于有损压缩。

位图是每个格子都独立记录的,因此数据量很大,这就是bmp格式,而经过了上述的预测差值运算后,就变成了有损压缩格式,jpg格式就是其中之一。画质基本相同的两幅图,jpg格式的数据量要比bmp小得多。jpg是有损压缩的,但画质的损失非常小。Jpg格式是很智能的,例如对上面有大面积相似色彩的山 水照给予较大的压缩率,而对非常热闹的人群照给予较小的压缩率。

上面说的只是静态的图像,而视频图像压缩得更大,一秒钟视频会切换几十张画面,而这些画面的绝大部分都是相同的,采集是每幅都是独立采的,生成的 avi格式的数据量是很大的,不仅每幅画面本身可以压缩,更重要的是幅与幅之间也可以压缩,这就形成了数据量小得多的mpeg格式。也可以采用压缩率更高 的rm格式,rm格式的画质比mpeg差得不多,但数据量却小了很多倍,更方便在网上传输。

不同的视频,幅与幅之间的相似度是不同的,韩剧的相似度很大,甭说一秒了,甚至几分钟内演员都坐在沙发上聊,除了嘴巴外每幅画面都基本一样,对这种视频可 以采用较大的压缩率,而对动感性很强的武打片,则采用较小的压缩率,这种格式就是rmvb。跟rm格式不同的是,它的压缩率是可变的,vb就是可变比特率 的意思。rmvb比rm更先进,相同数据量的rmvb视频会比rm视频清晰,而相同清晰度的视频,rmvb格式的数据量会更小。

一旦进行了有损压缩,数据缺失了,画质就很难复原了,但这也并不是不可能,这里面有个关键的概念--先验信息。例如这张民国美女黑白照片的嘴唇,要 压缩成这个灰度,右侧的彩色图例中有五种可能,但通过先验信息(先验信息也就是我们以前已经知道了的知识)知道,美女的嘴唇不可能是绿的、蓝的和紫的,只 能是右下的红色,把它还原成红色就对了。

钢琴和弦的每一小组乐音都是由不超过五个纯音符的组合,这些排列组合的总数还是不少的,但好在根据先验信息我们知道,只有极少数的组合是经常出现 的,绝大多数的组合是基本不会出现的,如果我们得到了一组模糊不清的组合,它跟经常出现的某个组合与基本不会出现的某个组合的相似度一样,那我们就毫不犹 豫地认定它就是那个经常出现的组合。

当然,实际上它不是那个经常出现的组合,而是那个基本不会出现的组合,这种可能性也是不能排除的,就好比那个民国美女真的长了一副蓝嘴唇一样,我们依靠先验信息做的判断就杯具了,但这是没办法的事。
现在的核磁共振技术在短时间内只能获得比较粗糙的图像,但我们知道被照器官的每一小块部分与相邻部分的相关性是很强的,而且我们对这些器官也具有很多先验信息,这就可以帮助我们像还原民国美女图那样,在粗糙的图像上还原出高画质的图像,可信度还可以做得非常高。

关于Image Engineering& Computer Vision更多讨论与交流,敬请关注本博客和新浪微博songzi_tea

时间: 2024-07-31 14:33:48

图像的压缩与恢复的相关文章

上传图片图像进行压缩后上传

图片压缩: NSData *imageData = UIImageJPEGRepresentation(self.uploadImage , 0.55); NSString *file_name = [TimeUtil getDateStringWithFormat:@"yyyy-MM-dd"]; NSString *upload_name =[NSString stringWithFormat:@"%@.jpg",file_name ]; [request set

ios中图像进行压缩方法汇总

ios中图像进行压缩方法汇总 在Iphone上有两种读取图片数据的简单方法: UIImageJPEGRepresentation和UIImagePNGRepresentation. UIImageJPEGRepresentation函数需要两个参数:图片的引用和压缩系数.而UIImagePNGRepresentation只需 要图片引用作为参数. 方法一: 代码如下: - (UIImage*)scaleFromImage:(UIImage*)image scaledToSize:(CGSize)

Matlab imwrite函数 保存图像会压缩

Matlab 正常的 uint8*3 的变量,imwrite保存为jpg后会 压缩图像,两种解决方法. 1.'quality',100,'mode','lossless' imwrite(img_out,[imgPathOut,int2str(n),'.jpg'],'quality',100,'mode','lossless'); imwrite(imgA,[imgPathOutA,int2str(n),'.jpg'],'quality',100,'mode','lossless'); imwr

对图像进行压缩再进行圆形处理

①压缩处理 ②圆形处理 1 <RelativeLayout 2 android:id="@+id/rl_me_icon" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:layout_marginTop="4dp" 6 android:layout_centerHorizontal="t

Android图像常用压缩技术

近期在做图片上传的功能,从相机拍摄或从相册选区.就研究了这方面的东西 一.图片的基本知识 1.文件形式(即以二进制形式存在于硬盘上) 获取大小(Byte):File.length() 2.流的形式(即以二进制形式存在于内存中) 获取大小(Byte):new FileInputStream(File).available() 3.Bitmap形式 获取大小(Byte):Bitmap.getByteCount() 下面以我拍摄的图片为例,看下三者的大小区别(所用软件为自己临时开发的小工具): 从图中

C# 如何进行图像的压缩

从网上找的非常有效.图片3M到500k private static ImageCodecInfo GetEncoderInfo(String mimeType) { int j; ImageCodecInfo[] encoders; encoders = ImageCodecInfo.GetImageEncoders(); for (j = 0; j < encoders.Length; ++j) { if (encoders[j].MimeType == mimeType) return e

Libjpeg压缩和解压缩图像

简介 压缩像素数据可以采用的压缩方案是直接压缩bgr24或者将bgr24图像转换为yv12,然后分平面使用libjpeg进行压缩;转yv12然后压缩理由是yv12数据量比bgr24少一半;那么压缩完之后应该数据量会更小;但具体是不是真的会更好,如果好的话,好了多少,并没有一个定量的测试比对数据;这里我们通过实验数据来进行具体分析以辅助决策如果处理我们的数据. 实验方案 选择25个1600×1200尺寸的图像;随机采样计算压缩后的数据大小和压缩与解压缩的耗时;最后性能比对曲线由两条线构成:一是压缩

你想不到的压缩方法:将javascript文件压缩成PNG图像存储

这样可以做到很高的压缩比,到底有多高,下面会提到.这种方法用到了 canvas 控件,这也意味着只有支持 canvas 控件的浏览器下才有效. 现在你可以看到,上面的图像类似一个噪声图像,但它实际上是一个由124K的 prototype 框架代码转化成的30K的8位PNG图像(压缩比还不错吧). 其实,要将代码转化为图像的格式存储,可以转化成GIF和PNG格式.PNG格式的图像有24位和8位,用24位的RGB图像,每个像素可以存储3字节的数据,如果是用8位的RGB图像,每个像素可以存储1字节的数

图像压缩算法简要说明

图像压缩的目的是减少图像的不相关性和冗余性使得其能够以有效的形式存储或者传输.图像压缩分为有损压缩和无损压缩,无损图像压缩常用于档案资料.医学.工程制图.剪贴画和漫画.有损图像压缩,对于低比特流的传输条件下常使用.有损图像压缩对于那些可以牺牲少许的图像质量而希望获得低比特传输的图像具有很广泛的应用. 图像的压缩方法就是研究如何减少或去掉数据中冗余部分以减小数据的存储空间,图像压缩中数据冗余主要包含以下几种: 1.编码冗余: 以灰度图像为例,像素点的取值范围是[0,255],而对于一幅图像来说,其