颜色空间,图像格式,彩色转灰度函数
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
rgb颜色空间
灰度图像是一个特殊的彩色图像,r=g=b,如图
![](http://my.csdn.net/uploads/201203/29/1332990227_9968.jpg)
![](http://my.csdn.net/uploads/201203/29/1332990238_9600.jpg)
![](http://my.csdn.net/uploads/201203/29/1332990321_9264.jpg)
![](http://my.csdn.net/uploads/201203/29/1332990232_2245.jpg)
所以,要将彩色图像转化为灰度图像,只需令每个像素的r=g=b=x即可.而x等于多少,视不同情况而定。
补充:
黑色 r=0 g=0 b=0
白色 r=255 g=255 b=255
黑色物体之所以是黑色,是因为它吸收了所有的可见光,所以看上去是黑的,
而相反,白色物体反射了所有可见光,而所有可见光组合成白色,所以看上去是白的。
绿色的物体之所以是绿色,是因为它的表面分子、原子的特点是吸收其他颜色能力强,却不怎么吸收绿色光,才显绿色的。
//读取一个彩色图像
![](http://my.csdn.net/uploads/201204/04/1333544783_5756.jpg)
matlab有一个函数可以直接取灰度图像,rgb2gray。其实它是取r,g,b和的均值计算gray的。验证如下
![](http://my.csdn.net/uploads/201204/04/1333545896_4243.jpg)
直接观察图像的数据,像素值大致差不多的。
可以将r,g,b三个分量再次组合成一个彩色rgb图像
rgb=cat(3,r,g,b)
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
YUV颜色空间
是欧洲电视系统采用的一种颜色编码方法。Y亮度,U,V色差。
rgb2yuv
![](http://my.csdn.net/uploads/201204/05/1333584987_4720.jpg)
![](http://my.csdn.net/uploads/201204/05/1333585819_4291.jpg)
yuv2rgb
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
关于图像格式
bmp和jpg的比较
bmp文件格式挖掘
将lena.bmp以二进制形式打开,比如用ida,如下,摘抄一部分
前54字节=14字节文图文件头+40字节位图信息头
4D M
指定了文件类型
jpg文件格式挖掘
同样将lena.jpg以二进制形式打开,摘抄一部分,完整数据
oo
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
2.halcon
![](http://my.csdn.net/uploads/201203/29/1332988909_3920.jpg)
3.opencv-vc
![](http://my.csdn.net/uploads/201203/29/1332989794_2379.jpg)
refer to
http://blog.csdn.net/boyhailong/article/details/7028796
http://www.linuxgraphics.cn/graphics/image_processing_rgb_to_grayscale.html
http://wenku.baidu.com/view/f2cbc9116c175f0e7cd13743.html
rgb颜色空间
灰度图像是一个特殊的彩色图像,r=g=b,如图
![](http://my.csdn.net/uploads/201203/29/1332990227_9968.jpg)
![](http://my.csdn.net/uploads/201203/29/1332990238_9600.jpg)
![](http://my.csdn.net/uploads/201203/29/1332990321_9264.jpg)
![](http://my.csdn.net/uploads/201203/29/1332990232_2245.jpg)
所以,要将彩色图像转化为灰度图像,只需令每个像素的r=g=b=x即可.而x等于多少,视不同情况而定。
补充:
黑色 r=0 g=0 b=0
白色 r=255 g=255 b=255
黑色物体之所以是黑色,是因为它吸收了所有的可见光,所以看上去是黑的,
而相反,白色物体反射了所有可见光,而所有可见光组合成白色,所以看上去是白的。
绿色的物体之所以是绿色,是因为它的表面分子、原子的特点是吸收其他颜色能力强,却不怎么吸收绿色光,才显绿色的。
//读取一个彩色图像
>> I=imread('lena.jpg'); >> whos I Name Size Bytes Class I 512x512x3 786432 uint8 array Grand total is 786432 elements using 786432 bytes//分别取r,g,b各个分量
>> r=I(:,:,1); >> g=I(:,:,2); >> b=I(:,:,3); >> whos r Name Size Bytes Class r 512x512 262144 uint8 array Grand total is 262144 elements using 262144 bytes >> whos g Name Size Bytes Class g 512x512 262144 uint8 array Grand total is 262144 elements using 262144 bytes >> whos b Name Size Bytes Class b 512x512 262144 uint8 array Grand total is 262144 elements using 262144 bytes//将源图像和三个分量的图像显示出来
>> subplot(1,4,1);imshow(I);title('I') >> subplot(1,4,2);imshow(r);title('r') >> subplot(1,4,3);imshow(g);title('g') >> subplot(1,4,4);imshow(b);title('b')
![](http://my.csdn.net/uploads/201204/04/1333544783_5756.jpg)
matlab有一个函数可以直接取灰度图像,rgb2gray。其实它是取r,g,b和的均值计算gray的。验证如下
>> gray=rgb2gray(rgb); >> whos gray Name Size Bytes Class gray 512x512 262144 uint8 array >> figure(2);subplot(1,2,1);imshow(gray);title('rgb2gray')//用r,g,b平均值组成一个灰度图像
>> r=double(r);g=double(g);b=double(b); >> average=(r+g+b)/3; >> average=uint8(average); >> whos average Name Size Bytes Class average 512x512 262144 uint8 array >> figure(2);subplot(1,2,2);imshow(average);title('average')//显示的图像如下
![](http://my.csdn.net/uploads/201204/04/1333545896_4243.jpg)
直接观察图像的数据,像素值大致差不多的。
>> gray(1,:) ans = Columns 1 through 25 162 161 161 160 162 156 163 162 165 161 162 160 154 165 158 154 159 153 162 161 152 156 157 156 154 >> average(1,:) ans = Columns 1 through 25 163 162 162 161 163 157 163 162 165 161 162 160 153 164 158 152 157 151 161 159 150 154 153 154 153
可以将r,g,b三个分量再次组合成一个彩色rgb图像
rgb=cat(3,r,g,b)
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
YUV颜色空间
是欧洲电视系统采用的一种颜色编码方法。Y亮度,U,V色差。
rgb2yuv
function yuv = rgb2yuv(rgb) % yuv = rgb2yuv(rgb)把一幅RGB图像转换为YUV图像, % 输入图像是一个彩色像素的M×N×3的数组, % 其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。 % 假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。 % 输入图像可能是double(取值范围是[0, 1]),uint8或 uint16。 % % 输出YUV图像是uint8。 rgb = im2double(rgb); r = rgb(:, :, 1); g = rgb(:, :, 2); b = rgb(:, :, 3); % 执行转换函数 y = 0.299*r + 0.587*g + 0.114*b; u = 0.567*(b - y); v = 0.713*(r - y); % 防止溢出 if(y < 0) y = 0; end; if(y > 1.0) y = 1.0; end; if(u < 0) u = 0; end; if(u > 1.0) u = 1.0; end; if(v < 0) v = 0; end; if(v > 1.0) v = 1.0; end; % 联合yuv,并转成uint8类型 y = y*255; u = u*255; v = v*255; yuv = cat(3, y, u, v); yuv = uint8(yuv);
rgb=imread('lena.jpg'); subplot(1,2,1);imshow(rgb);title('rgb'); yuv=rgb2yuv(rgb); subplot(1,2,2);imshow(yuv);title('yuv');
![](http://my.csdn.net/uploads/201204/05/1333584987_4720.jpg)
//观察h,s,i分量值,与r,g,b有很大不同。 >> y=hsi(:,:,1); >> y(1,:) ans = Columns 1 through 27 162 161 161 160 162 156 163 162 165 161 162 160 154 165 158 154 159 153 162 161 152 156 157 156 154 156 154 ... >> u=hsi(:,:,2); >> u(1,:) ans = Columns 1 through 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... >> v=hsi(:,:,3); >> v(1,:) ans = Columns 1 through 27 44 44 44 44 45 45 47 47 47 47 45 45 44 44 44 44 44 43 45 44 45 45 46 47 47 47 47 ...
//观察y,u,v图像 subplot(1,3,1);imshow(y);title('y'); subplot(1,3,2);imshow(u);title('u'); subplot(1,3,3);imshow(v);title('v');
![](http://my.csdn.net/uploads/201204/05/1333585819_4291.jpg)
yuv2rgb
function rgb = yuv2rgb(yuv) % yuv = rgb2yuv(rgb)把一幅RGB图像转换为YUV图像, % 输入图像是一个彩色像素的M×N×3的数组, % 其中每一个彩色像素都在特定空间位置的彩色图像中对应红、绿、蓝三个分量。 % 假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。 % 输入图像可能是double(取值范围是[0, 1]),uint8或 uint16。 % % 输出YUV图像是uint8。 yuv = im2double(yuv); y = yuv(:, :, 1); u = yuv(:, :, 2); v = yuv(:, :, 3); % 执行转换函数 r = y + 1.402*v; g = y - 0.344*u - 0.714*v; b = y + 1.772*u; % 防止溢出 if(r < 0) r = 0; end; if(r > 1.0) r = 1.0; end; if(g < 0) g = 0; end; if(g > 1.0) g = 1.0; end; if(b < 0) b = 0; end; if(b > 1.0) b = 1.0; end; % 联合rgb r = r*255; g = g*255; b = b*255; rgb = cat(3, r, g, b); rgb = uint8(rgb);
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
关于图像格式
bmp和jpg的比较
lena_bmp=imread('lena.bmp');%读取lena.bmp imwrite(lena_bmp,'lena.jpg');%生成lena.jpg lena_jpg=imread('lena.jpg');%读取lene.jpg //观察变量 >> whos lena_bmp Name Size Bytes Class lena_bmp 512x512x3 786432 uint8 array Grand total is 786432 elements using 786432 bytes >> whos lena_jpg Name Size Bytes Class lena_jpg 512x512x3 786432 uint8 array Grand total is 786432 elements using 786432 bytes //观察图像,lena,jpg占用磁盘空间要远小于lena.bmp. >> imfinfo 'lena.bmp' ans = Filename: 'lena.bmp' FileModDate: '05-Apr-2012 11:39:48' FileSize: 786486 Format: 'bmp' FormatVersion: 'Version 3 (Microsoft Windows 3.x)' Width: 512 Height: 512 BitDepth: 24 ColorType: 'truecolor' FormatSignature: 'BM' NumColormapEntries: 0 Colormap: [] RedMask: [] GreenMask: [] BlueMask: [] ImageDataOffset: 54 BitmapHeaderSize: 40 NumPlanes: 1 CompressionType: 'none' BitmapSize: 786432 HorzResolution: 0 VertResolution: 0 NumColorsUsed: 0 NumImportantColors: 0 >> imfinfo 'lena.jpg' ans = Filename: 'lena.jpg' FileModDate: '05-Apr-2012 11:45:50' FileSize: 38916 Format: 'jpg' FormatVersion: '' Width: 512 Height: 512 BitDepth: 24 ColorType: 'truecolor' FormatSignature: '' Comment: {}
bmp文件格式挖掘
将lena.bmp以二进制形式打开,比如用ida,如下,摘抄一部分
seg000:00000000 42 4D 36 00 0C 00 00 00-00 00 36 00 00 00 28 00 "BM6......6...(." seg000:00000010 00 00 00 02 00 00 00 02-00 00 01 00 18 00 00 00 "............" seg000:00000020 00 00 00 00 0C 00 00 00-00 00 00 00 00 00 00 00 "..............." seg000:00000030 00 00 00 00 00 00 38 13-51 3A 15 53 44 22 62 3D "......8Q:SD"b=" seg000:00000040 1B 5B 40 20 61 35 15 56-3B 18 5B 41 1C 60 48 23 "[@ a5V;[A`H#" seg000:00000050 67 42 1B 5F 3D 17 59 3F-19 5B 45 20 60 42 1D 5D "gB_=Y?[E `B]" seg000:00000060 5C 3B 78 6E 58 92 7E 80-B0 A1 B0 D7 A9 BB D8 AA "\;xnX拁€啊白┗鬲" seg000:00000070 BD D8 AD BC DC B0 BF E0-AF BF DC B0 C0 DD AB C0 "截馨苦馨垒" seg000:00000080 DB A8 BD D9 A1 B9 D7 A3-BA DA 96 B1 D3 8F A8 D0 "郇劫」祝黑柋訌ㄐ" seg000:00000090 7E 94 C8 58 64 A6 54 52-9E 58 50 A7 5D 5D BB 61 "~斎XdR瀀P]籥" seg000:000000A0 67 CA 5A 67 CF 60 71 D8-6C 81 E4 71 87 E6 71 8C "g蔤g蟕q豯佷q囨q? seg000:000000B0 E3 72 8F E4 6F 8F E2 7A-9C EF 76 9A E8 83 A5 F1 "鉹忎o忊z滐v氳儱? seg000:000000C0 82 A2 EB 85 A3 EA 82 A3-EC 81 A2 EB 81 A1 E8 81 "偄雲j偅靵㈦仭鑱" seg000:000000D0 A1 E8 82 A5 E9 81 A4 ED-80 A4 F2 7E A3 F3 75 9B "¤偉閬ろ€を~su? seg000:000000E0 E9 7F A2 EC 83 9C E6 81-8E DA 6D 68 BD 45 33 86 "?㈧儨鎭広mh紼3? seg000:000000F0 60 45 8F 6C 48 8E 52 2C-6E 4A 21 64 43 20 60 52 "`E弆H嶳,nJ!dC `R" seg000:00000100 2F 6F 41 1F 5C 3C 13 51-40 12 54 41 0E 52 3C 0D "/oA\<Q@TAR< " seg000:00000110 51 3C 0F 54 3F 1B 5D 47-25 66 55 34 71 45 20 5E "Q<T?]G%fU4qE ^" seg000:00000120 36 0D 47 3B 0F 4C 4A 20-5D 59 30 6E 42 18 59 3F "6 G;LJ ]Y0nBY?" seg000:00000130 15 56 5D 32 75 59 2E 71-4D 24 68 68 3F 83 46 1D "V]2uY.qM$hh?僃" seg000:00000140 61 51 28 6C 52 28 6F 5B-31 78 57 2D 74 4C 22 69 "aQ(lR(o[1xW-tL"i" seg000:00000150 53 29 70 5C 30 75 59 2E-71 65 3A 7B 57 29 6B 4E "S)p\0uY.qe:{W)kN" seg000:00000160 1D 61 4C 1A 60 55 22 66-66 33 6F 84 51 8D 7C 4A "aL`U"ff3o凲峾J" seg000:00000170 8A 5B 2E 66 9F 7D 9C B1-92 B1 6C 48 7C 49 24 64 "奫.f焳湵挶lH|I$d" seg000:00000180 3E 1C 5D 47 1E 61 61 30-74 62 2D 70 36 0B 4A 48 ">]Gaa0tb-p6JH" seg000:00000190 1A 5C 51 1C 66 54 1C 67-5F 34 73 83 5C 93 83 60 "\QfTg_4s僜搩`" seg000:000001A0 8C 84 5F 8D 4C 1D 55 3E-0F 4E 41 18 56 65 3B 7C "寗_峀U>NAVe;|" seg000:000001B0 64 37 76 65 30 73 60 2A-6F 61 2B 70 57 27 69 90 "d7ve0s`*oa+pW'i? seg000:000001C0 61 99 AB 76 A1 9B 65 90-7A 47 81 52 1F 62 48 19 "a櫕ve恴G丷bH" seg000:000001D0 58 55 28 60 95 6F 93 AB-87 AB 6B 4B 7C 5F 3D 79 "XU(`昽摣嚝kK|_=y" seg000:000001E0 41 18 56 38 0A 4C 4B 1C-5A 4F 1D 5D 44 15 54 3E "AV8 LKZO]DT>" seg000:000001F0 0D 51 46 1A 5D 43 16 5B-5A 2F 72 52 27 6A 5E 34 " QF]C[Z/rR'j^4" seg000:00000200 75 65 3B 7C 52 28 65 57-2D 6A 56 29 68 49 1C 5B "ue;|R(eW-jV)hI[" seg000:00000210 3C 0D 4C 4F 20 5F 46 1B-5C 49 1D 58 61 39 69 8B "< LO _F\IXa9i? seg000:00000220 5B 8F 7E 45 89 4F 17 60-37 0C 4F 4C 27 65 72 49 "[弤E塐`7OL'erI" seg000:00000230 86 77 50 8E 51 2F 70 5A-39 7C 87 65 A1 64 40 86 "唚P嶲/pZ9|噀@? seg000:00000240 42 1E 78 36 16 7B 45 2C-8E 45 32 93 43 31 94 41 "Bx6{E,嶦2揅1擜" seg000:00000250 33 98 41 35 99 3B 30 98-4A 41 A9 43 39 A4 44 3B "3楢5?0楯A〤9;" seg000:00000260 A9 41 37 A9 44 3E AF 4A-43 B6 46 43 B7 48 45 B9 "〢7〥>疛C禙C稨E? seg000:00000270 49 49 BD 47 47 BD 4C 4C-C2 48 47 BF 4E 4C C4 4D "II紾G絃L翲G縉L腗" seg000:00000280 4B C3 4D 4B C3 5A 58 D0-51 50 C8 57 56 CE 51 52 "K肕K肸X蠶P萕V蜵R" seg000:00000290 CA 57 58 D0 52 58 CF 4B-51 C8 4E 56 CD 53 5B D2 "蔠X蠷X螷Q萅V蚐[? seg000:000002A0 4D 57 CD 52 5C D2 50 59-CE 51 5A CF 53 5C D1 57 "MW蚏\襊Y蜵Z蟂\裌" seg000:000002B0 5E D3 59 60 D3 5C 61 D4-5E 62 D3 5E 62 D3 58 5B "^覻`覾a証b觀b覺[" seg000:000002C0 CE 5A 5D D0 58 5C D2 57-5B D1 54 5C D3 57 5F D6 "蝂]蠿\襑[裈\覹_? seg000:000002D0 56 5E D7 52 5A D3 57 5E-D3 57 5E D3 59 5D D3 5A "V^識Z覹^覹^覻]覼" seg000:000002E0 5E D4 5B 5F D5 5D 61 D7-5E 63 D6 5E 63 D6 5A 62 "^訹_誡a譤c謂c諾b" seg000:000002F0 D3 5D 65 D6 5B 65 D7 5E-67 DC 56 60 D5 59 62 DB "覿e諿e譤g躒`誝b? seg000:00000300 58 60 DB 57 5F DB 55 5E-DD 54 5D DC 56 60 DC 56 "X`踂_踀^軹]躒`躒" seg000:00000310 60 DC 5D 66 DF 5F 68 E1-5D 65 DC 61 69 E0 61 68 "`躚f達h醈e躠i郺h" seg000:00000320 DD 5D 64 D9 5C 63 D8 5F-66 DB 5C 64 DB 58 60 D7 "輂d賊c豞f踈d踃`? seg000:00000330 5A 62 DB 60 67 E2 5C 64-DF 5C 64 E0 59 60 DB 5E "Zb踐g鈂d運d郰`踍" seg000:00000340 65 E0 5F 64 DE 62 67 E1-62 66 DD 69 6D E4 67 69 "e郷d辀g醔f輎m鋑i" seg000:00000350 DF 66 68 DE 65 69 DF 67-6B E1 66 6D E2 63 6A DF "遞h辝i遟k醘m鈉j? seg000:00000360 60 69 DE 63 6A DF 64 6C-DD 6C 72 E3 6B 71 E2 66 "`i辌j遜l輑r鉱q鈌" seg000:00000370 6C DD 6A 71 E0 6E 75 E4-6A 71 DE 65 6C D9 68 6F "l輏q鄋u鋔q辝l賖o" seg000:00000380 DC 69 70 DD 6A 71 DE 67-6E DB 68 6F DE 68 6F DE "躨p輏q辡n踙o辢o? seg000:00000390 66 6D DC 6D 76 E5 66 71-E0 65 72 E0 66 71 E0 67 "fm躮v錰q鄀r鄁q鄃" seg000:000003A0 72 E1 67 73 DF 68 74 E0-67 73 DF 67 73 DF 6C 76 "r醙s遠t鄃s遟s遧v" seg000:000003B0 E1 6D 77 E2 6D 78 E0 6C-77 DF 6D 78 E0 6F 7A E2 "醡w鈓x鄉w適x鄌z? seg000:000003C0 6E 7A E0 6B 77 DD 6A 79-DD 69 78 DC 6A 78 DE 6B "nz鄈w輏y輎x躩x辦" seg000:000003D0 79 DF 6B 79 DF 6B 79 DF-6C 7A E0 6C 7A E0 6F 7B "y遦y遦y遧z鄉z鄌{" seg000:000003E0 E1 6E 77 DE 6E 77 DE 74-7B E2 76 7B E1 73 78 DE "醤w辬w辴{鈜{醩x? seg000:000003F0 74 79 DF 77 80 E2 78 87-E3 71 83 DC 7A 8C E5 6D "ty遷€鈞囥q冘z屽m" seg000:00000400 7F D8 70 82 DD 73 85 E0-70 81 DE 71 82 DF 74 83 "豴傒s呧p佫q傔t? seg000:00000410 DF 78 86 DF 7D 8B E3 7A-87 DD 82 8E E0 81 8D DF "選嗊}嬨z囕値鄟嵾" seg000:00000420 86 92 E0 82 8E DC 81 8E-DD 81 8E DD 80 8E DA 88 "啋鄠庈亷輥庉€広? seg000:00000430 96 E2 86 93 DD 88 95 DF-85 92 DC 89 96 E0 8B 98 "栤啌輬曔厭軌栢嫎" seg000:00000440 E2 8C 99 E3 8D 9C E1 8E-9E E1 91 A2 E1 95 A7 E2 "鈱欍崪釒炨憿釙р" seg000:00000450 97 AA E3 96 AA E1 97 A9-DE 98 AA DF A0 B3 E6 A3 "棯銝棭迾牫妫" seg000:00000460 B6 E9 A1 B2 E3 A2 B3 E4-A5 B8 E5 A4 B7 E4 A8 B9 "堕〔恽充ジ澶蜂ü" seg000:00000470 E4 A5 B6 E1 AB BB E5 AB-BB E5 AD BB E5 B2 C0 EA "浈夺瀚诲宀狸" seg000:00000480 B1 BF E9 B2 C1 E8 B1 C3-E8 B4 C6 EB B5 C4 EB B6 "笨椴凌泵璐齐的攵" seg000:00000490 C2 EA BB C6 EC C0 C8 ED-BE C6 EB BD C5 EA C1 CC "玛黄炖软酒虢抨撂" seg000:000004A0 F2 B8 C8 EC B6 CD ED B8-CF EF BB CA F1 BB BF F2 "蚋褥锻砀巷皇窕框" seg000:000004B0 93 88 CE 77 5D AB 77 50-9B 83 56 9F 70 4A 92 65 "搱蝫]玾P泝V焢J抏" seg000:000004C0 45 8C 60 46 8C 54 41 86-53 44 88 54 47 8B 51 47 "E宍F孴A哠D圱G婹G" seg000:000004D0 8D 4A 40 86 52 47 8F 55-4A 93 4F 46 8F 51 47 93 "岼@哛G廢J揙F廞G? seg000:000004E0 54 4C 99 5D 53 9F 5D 50-9A 60 53 9D 5C 51 9A 59 "TL橾S焆P歚S漒Q歒" seg000:000004F0 51 9E 60 5D AC 63 64 B5-60 65 BA 5E 66 BF 5D 68 "Q瀈]琧d礰e篰f縘h" seg000:00000500 C4 60 6C CC 5F 6C CE 5C-68 CE 5C 68 CE 5B 66 CE "腵l蘝l蝄h蝄h蝃f? seg000:00000510 57 61 CC 56 60 CC 54 5B-CA 56 5C CD 59 60 CF 59 "Wa蘓`蘐[蔞\蚘`蟉" seg000:00000520 60 CF 55 5D C8 52 5A C5-55 5E C6 5A 63 CB 5C 67 "`蟄]萊Z臮^芞c薥g" seg000:00000530 CF 63 6E D6 5F 6C D6 62-6F D9 5E 6B D7 60 6D D9 "蟘n謃l謆o賌k譧m? seg000:00000540 56 65 D3 56 63 D1 56 60-CC 51 57 C2 56 59 C2 4C "Ve覸c裋`蘍W耉Y翷" seg000:00000550 4B B2 49 44 A7 4C 44 A3-42 37 94 50 41 9D 50 3F "K睮DD7擯A漃?" seg000:00000560 9A 4A 38 93 4D 3A 91 49-34 89 47 33 86 42 2B 7D "欽8揗:慖4塆3咮+}" seg000:00000570 46 30 7E 49 2F 7B 4B 2D-74 57 38 7D 4A 2C 73 58 "F0~I/{K-tW8}J,sX" seg000:00000580 3A 81 58 3B 84 60 43 8C-5B 40 8A 5D 42 8C 5E 44 ":乆;刞C孾@奭B宆D" seg000:00000590 90 56 3C 88 5C 42 8E 5A-40 8C 58 3C 88 59 3D 89 "怴<圽B嶼@孹<圷=? seg000:000005A0 54 39 83 50 36 82 4D 37-86 56 40 92 57 45 98 56 "T9働6侻7哣@扺E榁" seg000:000005B0 44 97 58 4A 9C 66 58 AA-6E 64 B1 6E 64 B0 73 6A "D梄J渇X猲d眓d皊j" seg000:000005C0 B3 6C 64 AA 77 6E B1 78-6E B0 76 6D AC 71 66 A5 "砽d獁n眡n皏m琿f? seg000:000005D0 78 6A AA 71 63 A3 6B 5A-9D 61 4F 92 5C 4A 8D 55 "xj猶cZ漚O抃J峌" seg000:000005E0 3E 82 48 31 75 43 27 6C-3E 22 67 42 23 68 41 22 ">侶1uC'l>"gB#hA"" seg000:000005F0 67 43 21 67 3C 1A 61 3B-19 60 34 11 5B 33 10 5A "gC!g<a;`4[3Z" seg000:00000600 31 0D 59 3B 17 63 38 15-5F 3B 18 62 3D 1D 64 43 "1 Y;c8_;b=dC" seg000:00000610 23 6A 49 2C 75 4B 30 7A-4D 34 7E 4E 38 86 5B 45 "#jI,uK0zM4~N8哰E" seg000:00000620 97 53 40 97 56 45 A0 59-4A AC 53 46 AC 51 44 B0 "桽@梀E燳J琒F琎D? seg000:00000630 51 48 B7 54 4A BC 37 12-50 38 13 51 42 20 60 3D "QH稵J?P8QB `=" seg000:00000640 1B 5B 42 22 63 3A 1A 5B-3C 19 5C 40 1B 5F 43 1E "[B"c:[<\@_C" seg000:00000650 62 40 19 5D 39 13 55 3F-19 5B 41 1C 5C 44 1F 5F "b@]9U?[A\D_" seg000:00000660 5A 39 76 70 58 92 82 82-B2 A6 B0 D8 AD BB D8 AE "Z9vpX拏偛Π丨回? seg000:00000670 BC D8 B2 BD DB B4 BF DF-B1 BF DC B0 BE DB B2 C3 "钾步鄞窟笨馨聚裁" seg000:00000680 DE AE BE DB A6 BA D9 A6-B9 DA 99 AF D2 92 A6 CF "蕻聚佴冠櫙覓ο" seg000:00000690 81 93 C8 5C 66 A6 59 55-A1 5C 55 AA 5E 5E BC 61 "亾萛fUU猑^糰" seg000:000006A0 67 CA 5D 6A D2 61 72 D9-6B 80 E3 70 86 E5 71 8C "g蔧j襛r賙€鉷嗗q? seg000:000006B0 E3 73 90 E5 6F 91 E4 7A-9F F1 77 9B E9 82 A4 F0 "鉺愬o戜z燅w涢偆? seg000:000006C0 82 A2 EB 82 A2 E9 82 A3-EC 7F A2 EB 81 A3 E9 82 "偄雮㈤偅?㈦仯閭" seg000:000006D0 A4 EA 81 A6 EA 81 A4 ED-7D A3 F1 7D A2 F2 7B A1 "り仸陙ろ}q}Ⅱ{? seg000:000006E0 EF 7F A2 EC 84 9D E7 80-8D D9 67 64 B9 43 33 87 "?㈧劃鐎嵸gd笴3? seg000:000006F0 5C 43 8D 66 44 8B 4F 2A-6E 48 1F 63 3E 1B 5B 54 "\C峟D婳*nHc>[T" seg000:00000700 31 71 3E 19 59 3D 15 56-3B 0C 50 44 13 57 38 09 "1q>Y=V;PDW8 " seg000:00000710 4E 3D 10 55 42 1D 61 4B-28 6B 55 32 72 47 1F 60 "N=UBaK(kU2rG`" seg000:00000720 35 0B 48 3B 0C 4A 4A 1F-5E 5F 34 73 37 0E 4C 44 "5H;JJ^_4s7LD" seg000:00000730 1B 59 5D 33 74 57 2C 6F-54 2B 6E 64 3B 7F 47 1E "Y]3tW,oT+nd;G" seg000:00000740 62 51 28 6C 51 27 6E 58-2E 75 53 2B 72 46 1E 65 "bQ(lQ'nX.uS+rFe" seg000:00000750 54 2C 73 57 2D 74 51 28-6B 68 3C 7F 57 2C 6D 51 "T,sW-tQ(kh<W,mQ" seg000:00000760 20 64 50 1E 64 51 1E 62-60 2D 69 83 51 8B 79 47 " dPdQb`-i僎媦G" seg000:00000770 87 66 37 6F 99 76 98 B3-92 B4 71 4A 81 4A 22 63 "噁7o檝槼挻qJ丣"c" seg000:00000780 3D 19 5B 46 1D 60 66 35-79 5B 28 6B 39 0E 4D 4E "=[F`f5y[(k9MN" seg000:00000790 20 62 56 21 6B 53 1B 66-5D 30 6F 85 5D 94 88 63 " bV!kSf]0o匽攬c" seg000:000007A0 91 86 5F 8D 4D 1D 57 40-0E 4E 46 1B 5A 67 3C 7D "憜_峂W@NFZg<}" seg000:000007B0 61 32 71 66 34 74 61 2F-6F 59 28 66 58 2C 67 8C "a2qf4ta/oY(fX,g? seg000:000007C0 5E 93 AB 7A A6 93 5F 8E-77 44 80 55 22 65 49 1C "^摣z_巜D€U"eI" seg000:000007D0 5B 53 26 5F 92 6A 93 AA-85 AD 6E 4C 7B 62 3F 77 "[S&_抝摢叚nL{b?w" seg000:000007E0 3C 13 50 3C 0F 4E 45 16-54 4D 1B 5B 48 1B 5A 42 "<P<NETM[HZB" seg000:000007F0 14 56 40 14 57 40 14 57-59 2E 71 54 29 6C 66 3D "V@W@WY.qT)lf=" seg000:00000800 7B 67 3E 7C 5C 32 6F 53-29 66 5C 30 6D 45 19 56 "{g>|\2oS)f\0mEV" seg000:00000810 3E 0F 4E 4A 1C 5E 46 1B-5C 48 1D 5C 5D 34 67 94 ">NJ^F\H\]4g? seg000:00000820 63 99 82 49 8D 43 0B 52-3C 13 51 4F 2C 65 6B 46 "c檪I岰R<QO,ekF" seg000:00000830 7E 78 52 8C 54 33 70 62-40 80 85 61 9D 64 3F 83 "~xR孴3pb@€卆漝?? seg000:00000840 40 1A 72 38 16 7A 43 2A-8C 48 34 97 45 33 98 3F "@r8zC*孒4桬3?" seg000:00000850 31 97 3E 31 97 3D 31 9B-46 3F A8 3D 34 A2 40 37 "1?1?1汧??47" seg000:00000860 A5 42 38 AA 46 40 B1 4C-45 B8 48 45 B9 49 46 BA "8狥@盠E窰E笽F? seg000:00000870 4A 4A C0 4D 4D C3 4C 4B-C3 49 48 C0 4E 4D C5 4F "JJ繫M肔K肐H繬M臤" seg000:00000880 4E C6 4F 4E C6 59 58 D0-50 4F C7 56 55 CD 51 52 "N芆N芛X蠵O荲U蚎R" seg000:00000890 CA 56 57 CF 55 59 D0 50-54 CB 51 57 CE 55 5B D2 "蔞W蟄Y蠵T薗W蜺[? seg000:000008A0 50 58 CF 52 5A D1 51 59-D0 51 59 D0 54 5B D0 55 "PX蟁Z裃Y蠶Y蠺[蠻" seg000:000008B0 5C D1 59 5E D1 5A 5F D2-5C 60 D1 5C 60 D1 57 5A "\裏^裐_襖`裓`裌Z"
位图文件可看成由4个部分组成:位图文件头(bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位图的字节阵列,它具有如下所示的形式。
位图文件的组成 |
结构名称 |
符号 |
位图文件头(bitmap-file header) | BITMAPFILEHEADER | bmfh |
位图信息头(bitmap-information header) | BITMAPINFOHEADER | bmih |
彩色表(color table) | RGBQUAD | aColors[] |
图象数据阵列字节 | BYTE | aBitmapBits[] |
42 4D 36 00 0C 00 00 00-00 00 36 00 00 00 28 00 "BM6......6...(." 00 00 00 02 00 00 00 02-00 00 01 00 18 00 00 00 "............" 00 00 00 00 0C 00 00 00-00 00 00 00 00 00 00 00 "..............." 00 00 00 00 00 0042 B
4D M
指定了文件类型
jpg文件格式挖掘
同样将lena.jpg以二进制形式打开,摘抄一部分,完整数据
seg000:00000000 FF D8 FF E0 00 10 4A 46-49 46 00 01 01 00 00 01 "??JFIF..." seg000:00000010 00 01 00 00 FF DB 00 43-00 08 06 06 07 06 05 08 "...?C." seg000:00000020 07 07 07 09 09 08 0A 0C-14 0D 0C 0B 0B 0C 19 12 " " seg000:00000030 13 0F 14 1D 1A 1F 1E 1D-1A 1C 1C 20 24 2E 27 20 " $.' " seg000:00000040 22 2C 23 1C 1C 28 37 29-2C 30 31 34 34 34 1F 27 "",#(7),01444'" seg000:00000050 39 3D 38 32 3C 2E 33 34-32 FF DB 00 43 01 09 09 "9=82<.342?C " seg000:00000060 09 0C 0B 0C 18 0D 0D 18-32 21 1C 21 32 32 32 32 " 2!!2222" seg000:00000070 32 32 32 32 32 32 32 32-32 32 32 32 32 32 32 32 "2222222222222222" seg000:00000080 32 32 32 32 32 32 32 32-32 32 32 32 32 32 32 32 "2222222222222222" seg000:00000090 32 32 32 32 32 32 32 32-32 32 32 32 32 32 FF C0 "22222222222222? seg000:000000A0 00 11 08 02 00 02 00 03-01 22 00 02 11 01 03 11 "..."." seg000:000000B0 01 FF C4 00 1F 00 00 01-05 01 01 01 01 01 01 00 "?..." seg000:000000C0 00 00 00 00 00 00 00 01-02 03 04 05 06 07 08 09 "....... " seg000:000000D0 0A 0B FF C4 00 B5 10 00-02 01 03 03 02 04 03 05 " ??." seg000:000000E0 05 04 04 00 00 01 7D 01-02 03 00 04 11 05 12 21 "..}.!" seg000:000000F0 31 41 06 13 51 61 07 22-71 14 32 81 91 A1 08 23 "1AQa"q2亼?#" seg000:00000100 42 B1 C1 15 52 D1 F0 24-33 62 72 82 09 0A 16 17 "B绷R佯$3br? " seg000:00000110 18 19 1A 25 26 27 28 29-2A 34 35 36 37 38 39 3A "%&'()*456789:" seg000:00000120 43 44 45 46 47 48 49 4A-53 54 55 56 57 58 59 5A "CDEFGHIJSTUVWXYZ" seg000:00000130 63 64 65 66 67 68 69 6A-73 74 75 76 77 78 79 7A "cdefghijstuvwxyz" seg000:00000140 83 84 85 86 87 88 89 8A-92 93 94 95 96 97 98 99 "儎厗噲墛挀敃枟槞" seg000:00000150 9A A2 A3 A4 A5 A6 A7 A8-A9 AA B2 B3 B4 B5 B6 B7 "殺¥ウЖ┆渤吹斗" seg000:00000160 B8 B9 BA C2 C3 C4 C5 C6-C7 C8 C9 CA D2 D3 D4 D5 "腹郝媚牌侨墒矣哉" seg000:00000170 D6 D7 D8 D9 DA E1 E2 E3-E4 E5 E6 E7 E8 E9 EA F1 "肿刭卺忏溴骁栝犟" seg000:00000180 F2 F3 F4 F5 F6 F7 F8 F9-FA FF C4 00 1F 01 00 03 "蝮趱鲼??." seg000:00000190 01 01 01 01 01 01 01 01-01 00 00 00 00 00 00 01 "......" seg000:000001A0 02 03 04 05 06 07 08 09-0A 0B FF C4 00 B5 11 00 " ??." seg000:000001B0 02 01 02 04 04 03 04 07-05 04 04 00 01 02 77 00 ".w." seg000:000001C0 01 02 03 11 04 05 21 31-06 12 41 51 07 61 71 13 "!1AQaq" seg000:000001D0 22 32 81 08 14 42 91 A1-B1 C1 09 23 33 52 F0 15 ""2?B憽绷 #3R?" seg000:000001E0 62 72 D1 0A 16 24 34 E1-25 F1 17 18 19 1A 26 27 "br?$4??&'" seg000:000001F0 28 29 2A 35 36 37 38 39-3A 43 44 45 46 47 48 49 "()*56789:CDEFGHI" seg000:00000200 4A 53 54 55 56 57 58 59-5A 63 64 65 66 67 68 69 "JSTUVWXYZcdefghi" seg000:00000210 6A 73 74 75 76 77 78 79-7A 82 83 84 85 86 87 88 "jstuvwxyz們剠唶? seg000:00000220 89 8A 92 93 94 95 96 97-98 99 9A A2 A3 A4 A5 A6 "墛挀敃枟槞殺¥ウ" seg000:00000230 A7 A8 A9 AA B2 B3 B4 B5-B6 B7 B8 B9 BA C2 C3 C4 "Ж┆渤吹斗腹郝媚" seg000:00000240 C5 C6 C7 C8 C9 CA D2 D3-D4 D5 D6 D7 D8 D9 DA E2 "牌侨墒矣哉肿刭阝" seg000:00000250 E3 E4 E5 E6 E7 E8 E9 EA-F2 F3 F4 F5 F6 F7 F8 F9 "沅彐玷殛蝮趱鲼" seg000:00000260 FA FF DA 00 0C 03 01 00-02 11 03 11 00 3F 00 E8 "??..?.? seg000:00000270 49 19 FA 53 5D 87 3E E0-D3 4E 71 80 71 41 39 FC "I鶶]?嘤Nq€qA9? seg000:00000280 EB C9 72 3E A9 21 0B 0C-0F 6A 4C 8C D2 9C 53 40 "肷r>?jL屢淪@" seg000:00000290 CF D6 A6 E3 B1 2C 47 E6-C5 5B 4F BA 6A BC 48 40 "现︺?G媾[O簀糎@" seg000:000002A0 AB 00 E3 AD 4B 64 B1 B3-1C 25 73 7A AB 02 81 40 "?悱Kd背%sz?丂" seg000:000002B0 39 02 B7 E7 60 51 87 7A-E7 35 22 76 9C 60 9A D2 "9风`Q噝?"v渀氁" seg000:000002C0 8B D4 D2 2B 43 9E DC 04-9D 47 4C 55 98 C8 3D 3B "嬙?C炣滸LU樔=;" seg000:000002D0 1C D5 32 0F 98 7D 8D 59-4C 90 09 E8 6B BE 4C 49 "?榼峐L?鑛綥I" seg000:000002E0 13 06 1B B3 40 61 8A 40-0F 04 9A 43 C1 00 1E 2B "矦a夽欳?+" seg000:000002F0 3B 8E C3 89 04 8C 7A 55-88 88 FD 31 55 54 90 E0 ";幟?寊U垐?UT愢" seg000:00000300 7E 1F 4A B0 98 CF 5A 4D-8E C5 94 07 60 18 E9 8A "~J皹蟌M幣?`閵" seg000:00000310 94 30 DE 3E 98 A8 54 E4-74 A9 46 7D 0E 6B 26 34 "??槰T鋞〧}k&4" seg000:00000320 48 69 CC 41 A8 C1 F6 C6-05 38 73 C9 34 AE 16 0C "Hi藺銎8s??" seg000:00000330 1E 4F BD 39 48 19 27 DA-90 E3 B5 03 AE 41 ED 40 "O?H'趷愕瓵鞞" seg000:00000340 58 7A F4 EA 28 1D 3E 94-D0 70 39 14 A3 91 C9 A0 "Xz絷(>斝p9蔂" seg000:00000350 69 03 1C F4 A0 90 46 29-33 D8 1C 52 F6 F6 A0 2C "i魻怓)3?R鲻?" seg000:00000360 2E E0 28 24 74 CD 34 64-90 69 3A 8E B4 D0 AC 3D ".?$t?d恑:幋鞋=" seg000:00000370 BA 1E 3B E6 99 D3 83 EB-4B D0 71 4C C7 39 A1 B1 "?;鏅觾隟衠L?”" seg000:00000380 24 3C 1F 97 38 A4 04 13-46 4F 72 69 14 52 1A 44 "$<??FOriRD" seg000:00000390 99 C1 C9 A6 83 F3 03 E9-CD 2E D1 8E A4 D3 71 D7 "櫫搔凅橥.褞びq? seg000:000003A0 07 A1 A0 07 4A 77 1C 8A-6E 41 C8 1D E8 ED CF 3C "Jw妌A?桧?" seg000:000003B0 52 11 E9 4C 2C 0A 40 20-FD 69 14 E7 27 EB 49 C0 "R長, @ 齣?隝? seg000:000003C0 A0 01 EF 4C 56 14 F4 FC-31 49 D3 AD 03 24 72 3A "?風V酎1I迎$r:" seg000:000003D0 73 41 1C 13 40 10 B1 FD-05 53 9B 91 8F 7A BA E0 "sA@饼S洃弞亨" seg000:000003E0 9E 49 3F 4A AA EB 93 80-3D EB 44 43 45 8B 07 1C "濱?J搥=隓CE?" seg000:000003F0 1F C2 B7 20 23 02 B9 78-98 C7 28 C7 4A DE B4 93 "路 #箈樓(荍薮? seg000:00000400 72 82 0D 44 E3 D4 6F 54-6A 13 F2 54 00 63 00 F6 "r?D阍oTj騎.c.? seg000:00000410 A9 63 39 5C 50 63 24 D7-3B D0 85 A0 C0 7E 5F C0 "ヽ9\Pc$?袇犂~_? seg000:00000420 52 93 93 9F 7A 78 4C 8E-71 41 4C 73 9A 4D F4 19 "R摀焭xL巕ALs歁?" seg000:00000430 17 B5 2F 45 E6 9C 47 34-84 0E 83 AD 21 86 41 5C "?E鏈G4?儹!咥\" seg000:00000440 52 B1 F9 71 4D 24 8C 66-93 39 1C 53 5B 09 A3 67 "R冰qM$宖?S[ " seg000:00000450 43 95 03 32 13 CE 73 8A-E9 63 20 8A E1 21 99 A0 "C?2蝧婇c 娽!櫊" seg000:00000460 9C 48 0F 4F E5 5D 85 8D-C0 9A 25 60 7A 8A CE 4A "淗O錧厤罋%`z娢J" seg000:00000470 CC E3 AF 0D 6E 52 F1 1D-BC 93 D8 48 10 64 E0 D7 "蹄?nR?紦豀d嘧" seg000:00000480 95 80 52 66 46 18 60 79-15 ED 92 44 25 88 A9 1D "晙RfF`y頀D%埄" seg000:00000490 45 79 9F 8A 74 96 B3 BB-33 A2 E1 18 F3 8A DF 0F "Ey煀t柍?⑨髪?" seg000:000004A0 52 CF 95 8E 84 97 C2 65-29 1C 1F 4A 79 E5 9B 07 "R蠒巹椔e)Jy鍥" seg000:000004B0 AD 56 8D F0 39 35 60 30-DD 8F D2 BA 19 D6 87 1E "璙嶐95`0輳液謬" seg000:000004C0 54 63 DE 80 09 38 A4 1C-8C 83 F5 A0 64 74 3C 52 "Tc迉 8?寖鯛dt<R" seg000:000004D0 7A 8D 68 3F A7 3E D8 A4-7E 41 C5 19 CE 69 79 EB "z峢??丐~A?蝘y? seg000:000004E0 48 68 70 39 04 8F F3 CD-21 07 6F F9 F5 A5 00 E4 "Hhp9忬?o?? seg000:000004F0 01 4F 55 01 4B 3F 00 7A-D2 B8 EC 56 44 62 41 C7 "OUK?.z腋霽DbA? seg000:00000500 4F F0 AD 0B DF 12 69 B6-9A 79 8A 49 89 93 66 DD "O瓠?i稓y奍墦f? seg000:00000510 AA 33 CD 73 3A CE B6 90-FE E2 DD C6 F6 E0 93 D0 "?蛃:味慆廨砌鄵? seg000:00000520 57 1F 24 8F 34 8C EE 72-49 EB 5D 34 F0 FE D3 59 "W$?岊rI隴4瘙覻" seg000:00000530 6C 61 52 A2 5A 23 DA 8F-A5 28 14 05 C1 CE 69 D8 "laR#趶?廖i? seg000:00000540 38 AF 35 9B 0D 23 1D 28-8C 7C D4 ED A4 F4 A9 63 "8??#(寍皂ヽ" seg000:00000550 4C 0E 69 92 D8 EF BA 06-7A 52 33 71 4E 6E 05 40 "Li捸锖zR3qNn@" seg000:00000560 5B 3C 1A 9B 5C 48 49 8E-57 23 D2 B0 B5 15 5D 8D "[<沑HI嶹#野?]? seg000:00000570 9D DC 7A 1A DD 75 CA 57-3F AA 67 69 20 E2 B4 A4 "澻z輚蔠?猤i 獯? seg000:00000580 FD E3 58 EA 8E 70 81 E6-F1 56 10 65 71 8A AA C1 "X陰p佹馰eq姫? seg000:00000590 BC E1 83 DE AD 46 31 5D-B2 12 26 24 2B 10 4E 71 "坚冝璅1]?&$+Nq" seg000:000005A0 DC 53 73 E8 33 C7 6A 52-0E 09 61 48 DD 71 9A 81 "躍s?莏R aH輖殎" seg000:000005B0 80 03 23 1C FD 6A CA 11-C6 31 F9 D5 75 E1 AA 78 "€#齤??u岐x" seg000:000005C0 F9 35 2C 65 85 38 E9 D2-A5 07 1C 8E 98 A8 D7 24 "?,e?橐?帢ㄗ$" seg000:000005D0 0F D6 A4 5E 3F AD 43 18-F1 9E B8 A7 0C 00 69 87 "证^?瑿駷抚.i? seg000:000005E0 9F F1 A5 CE 29 0C 7E 70-39 07 DE 8C 82 73 4D 06 "燅ノ)~p9迣俿M" seg000:000005F0 97 81 DA 9D 84 38 13 B7-AD 00 9C 53 71 4A 09 52 "梺跐?翻.淪qJ R" seg000:00000600 06 69 0C 52 D9 3C E2 93-77 1F 8F 7A 43 DB 1E B4 "iR?鈸w弞C?? seg000:00000610 AA 79 E9 F8 D0 31 41 00-E4 E3 DA 90 10 1B 1F 9D "獃轼?A.溷趷? seg000:00000620 39 B0 7A 75 A8 49 20 F3-40 92 B9 26 EE 71 9C F3 "9皕u↖ 驚捁&顀滙" seg000:00000630 41 21 B3 93 D4 F0 2A 00-C4 FD 29 E0 83 CF 7A 01 "A!硴责*.凝)鄡蟴" seg000:00000640 A2 4C 81 C7 34 D5 3C D3-32 73 40 39 EB DB 8C 50 "伹4??s@9脎孭" seg000:00000650 2B 16 15 BD 78 A4 6C 02-70 73 51 8C 81 9C E6 9D "+絰psQ寔滄? seg000:00000660 9C F1 4C 41 91 9F 5E 7F-4A 6B 72 4E 07 1D A9 DC "滖LA憻^JkrN┸" seg000:00000670 00 7D A9 87 BF B5 03 42-92 06 32 29 BC 67 8F AD ".}﹪康B?2)糶彮" seg000:00000680 2F 55 EB D6 90 F5 3C 50-03 B7 03 D6 90 1E A6 93 "/U胫愼<P?謵" seg000:00000690 39 E3 14 A0 71 C7 5A 06-46 D8 F4 FC 6A 09 06 D6 "9?爍荶F佤黬 ? seg000:000006A0 3B 49 23 18 CD 4E FF 00-28 C9 E9 D6 A1 97 0E 32 ";I#蚇.(砷帧?2" seg000:000006B0 05 68 8C EC 54 70 71 9A-D3 D3 E5 ED 9A CE 61 CE "h岇Tpq氂渝須蝍? seg000:000006C0 41 AB F6 60 E4 1E 6A 9E-A8 46 EC 47 8A B2 30 40 "A`?j灗F霨姴0@" seg000:000006D0 06 A9 DB B7 03 9C D5 B5-6C F1 5C D2 44 30 1C 1A "┷?溦祃馶褼0" seg000:000006E0 5E 31 D3 83 48 C4 1C 64-D3 72 71 F4 AC DA 01 0F "^1觾H?d觬q衄?" seg000:000006F0 CB D6 9A D8 34 E3 C8 C5-37 8C E2 92 28 69 C6 30 "酥氊4闳?屸?i?" seg000:00000700 29 BC 7E 74 F2 32 71 48-56 A9 09 8C 3C 8C 56 AE ")紐t?qHV??孷? seg000:00000710 89 7C 63 97 C9 66 38 ED-9A CA 22 98 AE 62 90 3A "墊c椛f8須?槷b?" seg000:00000720 9E 57 9A 24 AE 89 94 79-95 8F 43 8D C3 28 C5 67 "濿?畨攜晱C嵜(舋" seg000:00000730 6B 7A 72 5F 59 BA 91 9E-29 74 AB C5 B8 B7 56 07 "kzr_Y簯?t阜V" seg000:00000740 9E F5 A9 80 EA 41 15 82-BA 3C F7 78 48 F1 49 ED "烏﹢闍偤<鱴H馡? seg000:00000750 DE D6 E1 E1 70 43 2B 60-71 D6 A4 56 C9 EB F8 D7 "拗後pC+`q证V呻" seg000:00000760 55 E3 2D 18 AF FA 64 4B-CA FD EC 7A 57 23 13 9C "U?dK数靭W#? seg000:00000770 70 70 7D EB BE 13 E7 8D-CF 42 9C B9 A3 74 58 56 "pp}刖鐛螧湽XV" seg000:00000780 07 8F 5A 76 47 A0 18 A4-0C 1B A0 FC E9 4E 0D 33 "廧vG??狘镹 3" seg000:00000790 41 C9 CF 07 03 D6 A4 54-ED 9A 89 07 23 B7 BD 4E "A上证T須?#方N" seg000:000007A0 98 45 DC C7 00 72 4D 26-08 78 55 55 DC C7 00 0A "楨芮.rM&xUU芮. " seg000:000007B0 E5 F5 ED 78 0D F0 5B 12-48 E0 91 4C F1 07 88 71 "艴韝 餥H鄳L?坬" seg000:000007C0 BA D6 D8 F3 D0 90 6B 96-79 1E 54 01 CF 20 F5 AE "褐伢袗k杫T?醍" seg000:000007D0 AA 14 2F EF 48 C6 B5 5B-7B B1 06 0C E1 99 C9 DF "?/颒频[{?釞蛇" seg000:000007E0 9C 9C D0 06 E7 18 E3 1D-33 4D 54 3D CF B1 A9 53 "湝???3MT=媳㏒" seg000:000007F0 1F 77 38 F5 3E 95 D8 DF-43 99 27 BB 3D AC AF B6 "w8?曍逤??? seg000:00000800 29 C0 0F 50 68 39 E7 39-A7 20 C9 15 F3 E7 68 AA ")?Ph9???箸h? seg000:00000810 9D E9 FB 80 1D 69 24 70-8B 81 55 CC DC E7 35 2D "濋麁i$p媮U誊?-" seg000:00000820 82 57 26 76 CA E3 D6 A2-19 3D A8 46 2E 7A F6 A7 "俉&v抒症=‵.z雩" seg000:00000830 60 83 80 28 43 B5 86 C8-7E 4A E7 F5 42 7C B2 49 "`儉(C祮葉J珲B|睮" seg000:00000840 35 D0 48 3E 4A E7 B5 55-C2 31 C1 AB A7 F1 1A 43 "5蠬>J绲U?莲яC" seg000:00000850 63 9B DF FB D3 F5 AB 49-8F 43 C7 EB 54 FF 00 E5 "c涍醌I廋请T.? seg000:00000860 B9 EB F5 AB 91 1C 2E 00-FA F1 5D EF 62 56 E4 9B "闺醌?..]颾V錄" seg000:00000870 88 ED 48 7E 6E BC 9A 50-A4 F3 8E 7D A9 38 E0 F7 "堩H~n細Pん巬?圜" seg000:00000880 A8 18 0E 3B F5 F6 AB 29-ED F9 55 65 1D B3 56 63 "?;貊?睐Ue砎c" seg000:00000890 04 1C 67 81 EF 49 8D 13-A9 C0 3E D5 22 90 49 3D "g侊I?├>?怚=" seg000:000008A0 FA 53 07 41 81 4F 03 E5-E6 A0 63 D4 E4 73 F9 53 "鶶A丱彐燾凿s鵖" seg000:000008B0 81 04 12 69 80 65 B2 3A-D2 F6 FE B4 86 2E E0 18 "?i€e?姻??" seg000:000008C0 0A 55 27 1C 8A 45 19 34-A0 0C 60 62 84 31 49 3C " U'奅4?`b?I<" seg000:000008D0 F1 8C 51 B8 91 C0 E3 D6-90 92 0E 3A D3 B0 42 A9 "駥Q笐楞謵?:影B? seg000:000008E0 C8 3F 4A 01 8A 3A 75 14-DE 94 A4 63 AF 7F 4A 6E "?J?u迶?Jn" seg000:000008F0 7B D0 C1 21 CC D9 18 C5-46 C7 2B 8C 9A 7B 0C 61 "{辛!藤臚?寶{a" seg000:00000900 BA 83 E9 4D 5E 41 C8 3F-5F 4A 06 46 C3 27 03 39 "簝镸^A?_JF?9" seg000:00000910 CD 28 C0 62 73 CE 2A 53-6F 28 3C A1 F5 E7 AD 4B "?纀s?So(<□绛K" seg000:00000920 0E 99 3D C7 24 04 51 C9-63 D8 7F 9E D4 F9 5F 63 "??Q蒫?炘鵢c" seg000:00000930 39 54 82 DD 95 59 C0 E0-75 EF 48 1B 27 15 A0 74 "9T傒昚类u颒'爐" seg000:00000940 3B 90 A0 87 4C E7 A1 3C-81 EF 51 BE 89 7E A3 88 ";悹嘗纭<侊Q緣~" seg000:00000950 77 63 93 83 D3 EB 4F 95-91 ED E9 F7 2B A9 E3 06 "wc搩与O晳黹?┿" seg000:00000960 9D C1 E6 A3 64 96 03 89-51 93 3D 37 0A 45 98 63 "澚妫d?塓?7 E榗" seg000:00000970 9C 0A 5E A5 DE EA E8 9D-B1 4C C8 A6 EF DC 07 14 "?^マ觇澅L圈镘" seg000:00000980 B9 04 81 40 D2 14 8E 3D-85 34 E7 39 22 9E A3 E5 "?丂????"灒? seg000:00000990 19 E6 93 01 72 48 A2 C3-1B C1 FA FA 52 E7 B5 1C "鎿rH⒚龙鶵绲" seg000:000009A0 63 AD 1D 07 EB 48 63 1F-D0 74 A8 5C 6E CF 22 A5 "c?際c衪╘n?? seg000:000009B0 6E 9C 9A 80 F5 FE 75 68-87 B1 0B 80 31 56 ED 4F "n湚€觜uh嚤€1V鞳" seg000:000009C0 4C 0C 55 67 38 E0 76 A9-ED 89 C8 15 6F 61 1B 30 "LUg8鄓╉壢oa0" seg000:000009D0 1C 76 AB 6A FC 55 18 89-E3 15 61 1F 1C 71 58 32 "v玧黆夈aqX2" seg000:000009E0 64 8B 39 CD 01 B8 A6 2B-66 94 93 D4 56 72 44 0A "d??甫+f敁訴rD " seg000:000009F0 4F F8 D0 48 07 AD 33 34-60 13 C9 A4 55 87 91 C6 "OH?4`嗓U噾? seg000:00000A00 69 A4 F3 93 46 48 E3 34-C6 6F F1 A0 2C 2B 10 3B "iん揊H?苚駹,+;" seg000:00000A10 D4 52 61 81 06 86 63 DB-9A 63 12 4F 35 43 48 D0 "訰a?哻蹥cO5CH? seg000:00000A20 D1 EF 16 DE E8 23 0C AB-71 CF AD 76 D6 EC AC A0 "扬掼#玵檄v朱瑺" seg000:00000A30 80 2B CD C1 20 87 07 91-CD 76 5A 25 F8 B8 B7 50 "€+土 ?懲vZ%稰" seg000:00000A40 4F CC BC 1A C2 71 57 BD-8E 5C 4D 3B AE 64 6A DE "O碳聁W綆\M;甦j? seg000:00000A50 DB 8B 8B 66 43 DC 62 BC-8F 5A B2 93 4C D4 5E 36 "蹕媐C躡紡Z矒L証6" seg000:00000A60 DD B1 89 2A 6B D9 14 E5-6B 93 F1 7E 8D F6 BB 36 "荼?k?錵擇~嶖?" seg000:00000A70 92 35 F9 D3 91 5A 52 A8-E0 ED D1 98 61 E7 CB 2B "?慫Rㄠ硌榓缢+" seg000:00000A80 33 80 57 F5 35 3A 90 70-01 FD 2A 8A 07 18 C8 23 "3€W?:恜???" seg000:00000A90 9C 74 AB 51 0C 64 B1 E0-75 AE B6 8F 42 E5 A5 0A "渢玅d编u廈濂 " seg000:00000AA0 A9 BD 8E 31 D6 B9 9D 7B-C4 3B 33 6F 6A 70 DD C8 "┙?止漿?3ojp萑" seg000:00000AB0 34 BA E6 BE 15 4C 16 CD-93 D0 9F 4A E4 98 B3 3E "4烘?L蛽袩J錁?" seg000:00000AC0 E6 24 93 DE BA 28 50 BF-BD 23 2A 95 2D A2 02 5E "?撧?P拷#*??^" seg000:00000AD0 59 09 76 62 58 F7 AB 1E-51 61 F3 46 D9 3D F1 8C "Y vbX鳙Qa驠?駥" seg000:00000AE0 D4 71 A0 EE 3B F7 A9 99-40 51 81 8A ED 6C E5 EA "詑狀;鳗橜Q亰韑尻" seg000:00000AF0 46 41 19 07 03 3D A9 03-ED E1 7E F1 34 8F 80 3B "FA=?磲~?弨;" seg000:00000B00 64 76 A8 FA F3 9E 73 52-51 EE 7C B1 E2 A6 8C 6C "dv鬄sRQ顋扁l" seg000:00000B10 5E 69 B1 A6 4E 68 9E 40-AB 80 6B E7 9B 3B 77 76 "^i宝Nh濦珋k鐩;wv" seg000:00000B20 2B 5D 4B 83 9C D5 01 3E-E3 C1 AA FA 95 E0 8C 75 "+]K儨?>懔曕寀" seg000:00000B30 A8 74 E9 3C E7 DC 41 C7-6E 6A E3 1D 2E 6E 92 48 "╰?畿A莕j?.n扝" seg000:00000B40 DF B7 FF 00 57 CD 48 47-34 90 01 B7 D2 A4 3E A2 "叻.W虷G4?芬?? seg000:00000B50 A2 FA 98 BD C8 E5 1F 29-AE 7B 54 24 46 DE F5 D1 "Ⅹ樈儒)畕T$F搋? seg000:00000B60 4B 9D BD 71 5C EE AE 3F-74 DC D5 D3 F8 8D 21 B1 "K澖q\町?t苷峪?? seg000:00000B70 CB 16 CC A7 BE 38 AB 51-91 EA 3F C6 A8 93 89 8F "?抬?玅戧?屁搲? seg000:00000B80 39 AB 48 CB D0 02 06 7A-D7 A0 D6 84 A7 A9 6F 38 "9獺诵z谞謩Зo8" seg000:00000B90 C7 3D 78 A4 1D 2A 3D C0-63 9C F3 4E 04 9E 33 59 "?x?*=纁滙N?Y" seg000:00000BA0 B1 92 A8 01 B1 FC EA C2-A9 65 C9 15 55 58 63 07 "睊?秉曷〆?UXc" seg000:00000BB0 B7 7A B0 84 E3 00 FE B5-2D 14 8B 2A 00 18 E9 4E "穤皠?-?.镹" seg000:00000BC0 5C F4 35 18 6C 1E B4 FD-D8 15 16 28 90 E3 39 14 "\?l待?(愩9" seg000:00000BD0 AB 93 51 E4 9C 92 79 A7-02 48 C6 7F FA F4 80 93 "珦Q錅抷?H?€? seg000:00000BE0 80 00 FC E8 C8 2B CF 6A-6E 78 EB 4A BB A4 75 44 "€.?蟡nx隞护uD" seg000:00000BF0 05 98 F0 31 CD 34 00 48-19 20 D0 38 E7 19 A9 22 "橉1?.H ???" seg000:00000C00 86 39 11 CC B3 14 90 70-A9 8E B5 33 1B 58 80 00 "?坛恜?X€." seg000:00000C10 17 6E 01 27 B9 AA 51 B9-9C AA 28 E8 56 27 2D C0 "n'躬Q箿?鑆'-? seg000:00000C20 FA 0A 74 70 B4 A7 83 80-29 93 4C CE 70 30 A3 AE "?tp揣儉)揕蝡0." seg000:00000C30 14 54 D0 4A C2 32 06 00-AB 50 5B 99 CA AB B6 85 "T蠮?.玃[櫴? seg000:00000C40 98 20 8B 1D 33 91 CE 7D-29 C8 CA 09 51 18 C9 E4 "??3懳})仁 Q射" seg000:00000C50 71 D4 F6 35 5C DC 10 76-E0 74 FC 2A C2 4A A1 D5 "q增5\?v鄑?翵≌" seg000:00000C60 70 49 04 64 D5 DE C7 34-B9 9E EC B7 6D 1C 65 F2 "pId辙?篂旆me? seg000:00000C70 E3 9F 43 57 22 C1 60 41-EF C7 1F CA B3 E3 1B 40 "銦CW"羆A锴食?@" seg000:00000C80 E3 3D 70 07 AD 5A 4C 2A-65 BE F1 1E BD BD FF 00 "?p璟L*e抉浇." seg000:00000C90 FA D4 9B 30 94 4D 00 17-1B 93 A8 EF D8 1A 43 2B "?擬.摠镓C+" seg000:00000CA0 29 01 40 C2 F7 3D 33 FE-7D 6A 04 76 41 85 E7 A6 ")@瞒=3jvA呯? seg000:00000CB0 3B 01 C7 6A 9D 55 B6 A8-E4 B6 30 38 E4 7D 3D 2A ";莏漊定涠08鋧=*" seg000:00000CC0 59 8B 56 24 C2 3F 12 A0-72 C3 AB 8E 4F D2 A9 5C "Y媀$?爎毛嶰药\" seg000:00000CD0 78 7A CA E8 66 30 62 72-38 DB D0 55 F4 50 17 E6 "xz疏f0br8坌U鬚? seg000:00000CE0 1E E4 67 F9 9A 95 08 DB-C7 DD CF 1D 85 2B 89 4A "鋑鶜?矍菹?塉" seg000:00000CF0 51 D6 2C E3 EF 74 1B CB-20 64 8C 79 D1 8F EE 8E "Q?泔t?d寉褟顜" seg000:00000D00 7F 2A CB 59 33 C1 E3 D7-35 E9 41 B2 A3 D0 FA F0 "*薡3零?锳玻喧? seg000:00000D10 3F 2A C8 D5 BC 39 05 EA-99 60 C4 33 FA F4 0C 68 "?*日?隀`?h" seg000:00000D20 DC EB A5 8C B6 93 39 35-93 2B C5 29 25 85 32 E6 "茈稉95??%?? seg000:00000D30 DE E3 4F 73 15 CA 15 6C-F0 7B 1F 71 51 89 B7 0C "捭Os?l饆qQ壏" seg000:00000D40 7A 77 A1 A3 BE 32 4F 54-4B 9C B7 7E 69 37 7A D3 "zw。?OTK湻~i7z? seg000:00000D50 03 F5 C7 3E F4 6E ED 8A-9B 17 70 66 24 F3 50 B9 "跚>鬾韸?pf$驪? seg000:00000D60 C8 E9 C8 3E 94 AC 4E 73-9A 89 8E 07 5A A4 0C 6C "乳?敩Ns殙?Z?l" seg000:00000D70 84 E2 AC 5A 83 B8 64 55-37 63 9E 4E 47 7A B9 6A "勨琙兏dU7c濶Gz筳" seg000:00000D80 49 7E B4 DE C4 A4 6B C2-38 03 B5 48 38 26 99 17 "I~崔膜k?礖8&?" seg000:00000D90 20 03 CD 48 46 0F E1 58-DF 52 5A 24 56 3E B5 20 " 虷F醁逺Z$V>?" seg000:00000DA0 35 00 3C 73 4F 56 EC 69-34 4B 43 B2 07 18 A0 B6 "5.<sOV靑4KC?牰" seg000:00000DB0 29 08 DC 38 A8 8B 63 39-15 0C A4 89 4B 83 8A 8C ")?▼c9K儕? seg000:00000DC0 BD 34 1C 8A 0F 5E 3A D2-1D 86 B1 20 E0 F4 A4 DC "??^:?啽 圄ぼ" seg000:00000DD0 49 E6 82 32 33 8E 29 31-CD 31 D8 0F 4A BB A6 DF "I鎮23?1??J沪? seg000:00000DE0 1B 3B 95 62 70 A7 83 54-80 24 52 32 F1 EF 49 AB ";昩pT€$R2耧I? seg000:00000DF0 A2 5C 53 56 67 A4 DA CC-25 8D 48 3D 45 58 9A 15 "SVgぺ?岺=EX?" seg000:00000E00 9E 16 52 3A 8A E5 7C 3B-A8 9D 9E 43 93 B9 7A 64 "?R:婂|;濩摴zd" seg000:00000E10 F6 AE B6 23 B8 56 49 74-67 93 5A 0E 9C 8F 2D F1 "霎?竀Itg揨湉-? seg000:00000E20 1E 8A 74 FD 43 CD 55 FD-DB 92 7D 81 AE 27 5D D6 "妕鼵蚒拀伄']? seg000:00000E30 44 2B E4 5B B7 CD 8E 48-ED 5E B3 F1 22 EA D6 C7 "D+鋄吠嶩韃绸"曛? seg000:00000E40 C3 37 12 CA CA 25 23 11-8E E5 BD AB E7 96 77 95 "?适%#庡将鐤w? seg000:00000E50 F7 B1 E4 9C 93 9A F4 B0-50 F6 8A F2 E8 75 2A CF "鞅錅摎舭P鰥蜩u*? seg000:00000E60 91 77 17 E6 91 99 9B 24-93 D4 9C D4 8A 8D 91 81 "憌鎽櫅$撛溤妽憗" seg000:00000E70 4D 55 CF 03 D7 F2 AB 07-38 00 63 F2 AF 49 99 2E "MU?昨?8.c虔I?"
jpg压缩比例不固定
本文仅讨论静止图像的压缩基本算法,图像压缩的目的在于以较少的数据来表示图像以节约存储费用,或者传输时间和费用。
jpeg压缩算法可以用失真的压缩方式来处理图像,但失真的程度却是肉眼所无法辩认的。这也就是为什么jpeg会有如此满意的压缩比例的原因。 下面主要讨论,jpeg基本压缩法。
一.jpeg压缩过程 jpeg压缩分四个步骤实现:
1.颜色模式转换及采样; 2.dct变换; 3.量化; 4.编码。
二.
1.颜色模式转换及采样 rgb色彩系统是我们最常用的表示颜色的方式。jpeg采用的是ycbcr色彩系统。
想要用jpeg基本压缩法处理全彩色图像,得先把rgb颜色模式图像数据,转换为ycbcr颜色模式的数据。y代表亮度,cb和cr则代表色度、饱和度。
通过下列计算公式可完成数据转换。
y=0.2990r+0.5870g+0.1140b cb=-0.1687r-0.3313g+0.5000b+128 cr=0.5000r-0.4187g-0.0813b+128
人类的眼晴对低频的数据比对高频的数据具有更高的敏感度,事实上,人类的眼睛对亮度的改变也比对色彩的改变要敏感得多,也就是说y成份的数据是比较重要的。
既然cb成份和cr成份的数据比较相对不重要,就可以只取部分数据来处理。
以增加压缩的比例。jpeg通常有两种采样方式:yuv411和yuv422,它们所代表的意义是y、cb和cr三个成份的数据取样比例。
2.dct变换 dct变换的全称是离散余弦变换(discrete cosine transform),是指将一组光强数据转换成频率数据,以便得知强度变化的情形。若对高频的数据做些修饰,再转回原来形式的数据时,显然与原始数据有些差异,但是人类的眼睛却是不容易辨认出来。
压缩时,将原始图像数据分成8*8数据单元矩阵,
例如亮度值的第一个矩阵内容如下: jpeg将整个亮度矩阵与色度cb矩阵,饱和度cr矩阵,视为一个基本单元称作mcu。每个mcu所包含的矩阵数量不得超过10个。
例如,行和列采样的比例皆为4:2:2,则每个mcu将包含四个亮度矩阵,一个色度矩阵及一个饱和度矩阵。
当图像数据分成一个8*8矩阵后,还必须将每个数值减去128,然后一一代入dct变换公式中,即可达到dct变换的目的。图像数据值必须减去128,是因为dct转换公式所接受的数字范围是在-128到+127之间。 dct变换公式: x,y代表图像数据矩阵内某个数值的坐标位置f(x,y)代表图像数据矩阵内的数个数值u,v代表dct变换后矩阵内某个数值的坐标位置f(u,v)代表dct变换后矩阵内的某个数值
u=0 且 v=0 c(u)c(v)=1/1.414 u>0 或 v>0 c(u)c(v)=1 经过dct变换后的矩阵数据自然数为频率系数,这些系数以f(0,0)的值最大,称为dc,其余的63个频率系数则多半是一些接近于0的正负浮点数,一概称之为ac。
3、量化 图像数据转换为频率系数后,还得接受一项量化程序,才能进入编码阶段。量化阶段需要两个8*8矩阵数据,一个是专门处理亮度的频率系数,另一个则是针对色度的频率系数,将频率系数除以量化矩阵的值,取得与商数最近的整数,即完成量化。 当频率系数经过量化后,将频率系数由浮点数转变为整数,这才便于执行最后的编码。不过,经过量化阶段后,所有数据只保留整数近似值,也就再度损失了一些数据内容,jpeg提供的量化表如下:
4、编码 huffman编码无专利权问题,成为jpeg最常用的编码方式,huffman编码通常是以完整的mcu来进行的。
编码时,每个矩阵数据的dc值与63个ac值,将分别使用不同的huffman编码表,而亮度与色度也需要不同的huffman编码表,所以一共需要四个编码表,才能顺利地完成jpeg编码工作。
dc编码 dc是彩采用差值脉冲编码调制的差值编码法,也就是在同一个图像分量中取得每个dc值与前一个dc值的差值来编码。dc采用差值脉冲编码的主要原因是由于在连续色调的图像中,其差值多半比原值小,对差值进行编码所需的位数,会比对原值进行编码所需的位数少许多。
例如差值为5,它的二进制表示值为101,如果差值为-5,则先改为正整数5,再将其二进制转换成1的补数即可。
所谓1的补数,就是将每个bit若值为0,便改成1;bit为1,则变成0。差值5应保留的位数为3,下表即列出差值所应保留的bit数与差值内容的对照。 在差值前端另外加入一些差值的霍夫曼码值,例如亮度差值为5(101)的位数为3,则霍夫曼码值应该是100,两者连接在一起即为100101。下列两份表格分别是亮度和色度dc差值的编码表。根据这两份表格内容,即可为dc差值加上霍夫曼码值,完成dc的编码工作。
ac编码 ac编码方式与dc略有不同,在ac编码之前,首先得将63个ac值按zig-zag排序,即按照下图箭头所指示的顺序串联起来。 63个ac值排列好的,将ac系数转换成中间符号,中间符号表示为rrrr/ssss,rrrr是指第非零的ac之前,其值为0的ac个数,ssss是指ac值所需的位数,ac系数的范围与ssss的对应关系与dc差值bits数与差值内容对照表相似。
如果连续为0的ac个数大于15,则用15/0来表示连续的16个0,15/0称为zrl(zero rum length),而(0/0)称为eob(enel of block)用来表示其后所剩余的ac系数皆等于0,以中间符号值作为索引值,从相应的ac编码表中找出适当的霍夫曼码值,再与ac值相连即可。 例如某一组亮度的中间符为5/3,ac值为4,首先以5/3为索引值,从亮度ac的huffman编码表中找到1111111110011110霍夫曼码值,于是加上原来100(4)即是用来取[5,4]的huffman编码1111111110011110100,[5,4]表示ac值为4的前面有5个零。
由于亮度ac,色度ac霍夫曼编码表比较长,在此省略去,有兴趣者可参阅相关书籍。
oo
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
2.halcon
![](http://my.csdn.net/uploads/201203/29/1332988909_3920.jpg)
3.opencv-vc
#include <cv.h> #include <highgui.h> //#include <math.h> int main() { IplImage* src = cvLoadImage( "E:\\cs\\halcon\\bookcd\\document\\图像处理标准图像库\\lena.jpg", -1 ); IplImage * Red = cvCreateImage( cvGetSize(src), 8, 1); IplImage * Green = cvCreateImage( cvGetSize(src), 8, 1); IplImage * Blue = cvCreateImage( cvGetSize(src), 8, 1); cvSplit(src,Blue,Green,Red,0); //B G R cvNamedWindow( "RedChannel", 1 ); cvNamedWindow( "GreenChannel", 1 ); cvNamedWindow( "BlueChannel", 1 ); cvNamedWindow( "src", 1 ); cvShowImage( "RedChannel", Red ); cvShowImage( "GreenChannel", Green ); cvShowImage( "BlueChannel", Blue ); cvShowImage( "src", src ); cvWaitKey(0); cvReleaseImage( &Red ); cvReleaseImage( &Green ); cvReleaseImage( &Blue); cvReleaseImage( &src ); return 0; }
![](http://my.csdn.net/uploads/201203/29/1332989794_2379.jpg)
refer to
http://blog.csdn.net/boyhailong/article/details/7028796
http://www.linuxgraphics.cn/graphics/image_processing_rgb_to_grayscale.html
http://wenku.baidu.com/view/f2cbc9116c175f0e7cd13743.html