| Yan's profileDream Without A CausePhotosBlogLists | Help |
|
10/21/2007 Rocking Day我不是摇滚青年,也不是音乐爱好者。我只是被这万能的媒体蛊惑的一把,去享受了一场音乐的大PARTY~
万能的媒体告诉我,在那遥远的大洋彼岸,有一个叫做音乐节的节日, 那里的人们为了共同的热爱,聚集在一起,享受音乐带来的快乐,分享音乐的心情。于是乎,生活乏味的不带一点盐的宅男我,对这音乐中的生活,音乐下的人们充满的向往啊。决定要在适当的时候,为GDP做点贡献,为中国音乐捧个场。
北京有个MIDI大家都知道,可那摇滚学校出来的一定很硬摇滚,重金属,我想还是选个别的好了~
然后今年有个北京流行音乐节,可惜那个票价,我还是囊中羞涩,算了,等等吧~
十一无事做,闲得要长霉。看看有个摩登音乐节还不错,门票不贵,还有几个我知道的乐队,于是乎就打算去看看。
犹犹豫豫的来到海淀公园,看到门口那排得长长的队伍,我就来了精神。不错,应该会是个热闹的PARTY。
刚一进门就被吸引住了,但是和音乐无关。很多原创设计在那里摆开了集市。有潮流服饰的猴范、星旗,陈幸福的玩偶,还有一堆各种个性十足的东西。拍了不少照片。
来到了搭建了舞台的大草坪上,我被震撼了,无数的帐篷依次排开,奇装异服才是这里的普通装扮,而我却似乎成了异类。
当鼓声想起,弹上了吉他,一切的杂念就都抛开了,只剩下音乐,以及为音乐疯狂的人们。我尽情的宣泄着,从晌午一直疯狂到午夜。刺猬、麦田守望者、彭坦、CMCB、新裤子,原来现场的演唱是这么的有感染力。
一边MOTO赞助的RAZR舞台上表演的乐队以girl为特色,原来MM们也很有爆发力,唱起摇滚也是风味十足。NANA和Arvil会继续引领这股女生流行摇滚的潮流的吧~
感谢lizard的免费纯净水,如果不是你在那儿做义工,我不知道自己会不会去。
三土哥啊,我也在补写日志,真是一家人呢,哈~~ 9/30/2007 1111111111十1了
开始放假了,不知道要干点什么。学习?太对不起自己了,我每天都是在放假,十一还要学习?出去玩?全市都是游客,是我玩,还是游客玩我呢?
今天,六年之后再次滑了旱冰。战果?两个瘀青,养眼若干。
想去看下摩登天空音乐节,只是想感受一下众乐乐的感觉。
去不去再说吧,没相机呢。
也许又是哪也不去,等着长霉~ 9/20/2007 为ModelSim编译Xilinx仿真库安装了ModelSim后,需要进行仿真库编译后才能对设计进行仿真。(其实安装ModelSim并把它破解了也是一件很费RP的事,其实破解的方法就那一种,但是,却不是每次都能成功。至少我是每次都要重装个好几遍才能成功,而且似乎是必须安装在C盘才能破解成功。哎~)
对于用ISE来设计FPGA,使用compxlib命令就可以为Modelsim编译Xilinx仿真库。
compxlib是Xilinx专为第三方联合仿真工具编译仿真库设计的命令,通过参数来约束编译过程。
其主要参数有:
-s <simulator> 选项用于指明为哪一种仿真器编译仿真库。例:-s mti_se //指定为Modelsim SE编译仿真库
-arch <arch>选项用于指明为哪一个器件族编译仿真库。例:-arch all //为所有支持的器件族编译仿真了库
以上两个参数为必选参数,必须在compxlib命令中指明。
-dir <output_dir>选项指明编译后的仿真库存储的目录路径。例:-dir C:\Modeltech_*.*x\xilinxlib //指定输出目录到modelsim安装目录下的xilinxlib中
-p <dir_path> 该选项用来指定仿真器可执行文件存在的路径,即xilinx ISE的安装路径,一般可以从系统环境变量中自动获得。但,有时候编译失败多是因为得不到ISE的路径,无法获得编译源。例:-p D:\software\Xilinx //指定ISE的安装目录
更多的关于compxlib命令的参数信息可以在运行中输入:compxlib -help 获得。
下面正式开始为ModelSim编译Xilinx仿真库。
1.去掉modelsim.ini文件的只读属性,compxlib命令将会把库的逻辑名字和库的实际存放路径的关联信息自动写入modelsim.ini。
2.在运行中输入 compxlib -s mti_se -arch all -l all -dir C:\Modeltech_*.*x\xilinxlib -p D:\software\Xilinx -w ,并执行。
3.查看指定输出目录下是否有文件存在,一般有文件存在就是编译成功了。可以去C:\Documents and Settings\(你的用户名)\目录下打开compxlib文本文件查看编译时的具体信息。
4.若不成功,根据compxlib -help提供的参数具体信息修改compxlib命令,至编译成功。
7/3/2007 Autobots!Transform and ...变形金刚就要来了!~
今天,擎天柱大哥率领他的小弟们攻入美利坚大陆!
7月11日,汽车人即将来到我们的身边!
变形金刚电影真人版(Transformers:The Movie)在发行商的疯狂造势中,广大TFer的热切期待中,一轮又一轮预告片的隔靴搔痒中,终于要揭开它的真面目了。
这部电影的确值得让我们去电影院FUCKING HIGH一把!~
光看这部电影的幕后阵容就是高品质的保证:
导演:迈克尔.贝 Michael Bay
要看大场面,找他就没错了。对于变形金刚这部机器人大战的动作大片,以Michael Bay的破坏欲,一定能拍出让观众大呼过瘾的片子来。
制片:史蒂芬.斯皮尔伯格 Steven Spielberg
能让斯皮尔伯格做制片的电影并不多,有了斯爷的才华,影片一定可以在华丽的特效后,用跌宕的情节打动观众。从目前的反映来看,也的确是这样的。
迈克尔.贝执导大场面的能力毋庸置疑,但有时又会只顾场面而砸了电影,珍珠港就是个好例;斯皮尔伯格是个善于讲故事的好导演,但对于动作大片的把握似乎差那么点劲头,世界大战他就没拍好么。所以,迈克尔.贝的导演加上斯皮尔伯格的制片简直就是黄金搭档了。
视觉特效:工业光魔 ILM
这次变形金刚创下了38小时渲染一帧画面的CGI制作记录。而担当变形金刚CG制作的就是大名鼎鼎的创造出星球大战的工业光魔。
有如此强大的制作阵容,难怪大批的变形金刚迷们要争相去影院过瘾了(我也是那疯狂中的一员)。
变形金刚就要登场了,让我们一起喊完那句擎天柱的口头禅吧~
让我们一起ROLL OUT!!
6/5/2007 黑客黑了我的相机终于买了垂涎已久的黑客帝国10DVD的收藏版,拿到手以后看着内容丰富的大盒子真是爱不释手啊!
忍不住用数码相机拍了几张要在这里显摆一下~
正好新买的相机还不熟悉使用,对着neo的雕像是一通拍啊,手动模式调的不亦乐乎。
终于拍出了几张自己还满意的,但不知为什么我的数码相机从此就不正常工作了
无法开机,发出报警声,试了很多方法都解决不了,只能得出结论是:黑客黑了我的相机。
发票、保修卡都不在身上,修起来又是个大问题。
虽然相机坏了,但好东西就是好东西。典藏版里花絮、资料一应俱全,还有我心仪的评论音轨。
照片呢,就在相册里,嘿~
12/22/2006 You're Beautiful今天突然发现James Blunt的You're Beautiful这首歌真是闷骚一族的代表歌~
对一个陌生MM空发情思,真是闷骚到了境界了。
不多说了,看歌词吧~~
"You're Beautiful"
My life is brilliant. My life is brilliant. My love is pure. I saw an angel. Of that I'm sure. She smiled at me on the subway. She was with another man. But I won't lose no sleep on that, 'Cause I've got a plan. You're beautiful. You're beautiful. You're beautiful, it's true. I saw your face in a crowded place, And I don't know what to do, 'Cause I'll never be with you. Yeah, she caught my eye, As we walked on by. She could see from my face that I was, Flying high, [ - video/radio edited version] Fucking high, [ - CD version] And I don't think that I'll see her again, But we shared a moment that will last till the end. You're beautiful. You're beautiful. You're beautiful, it's true. I saw your face in a crowded place, And I don't know what to do, 'Cause I'll never be with you. You're beautiful. You're beautiful. You're beautiful, it's true. There must be an angel with a smile on her face, When she thought up that I should be with you. But it's time to face the truth, I will never be with you. 恩纳~~最后把这首歌送给今天下班路上的MM,以及前天上班路上的,以及…… 12/16/2006 The Lenovo CEO今天在公司坐电梯,开始没觉得什么,突然发现后面有一股强大的精神场。回头一看,原来是杨元庆!~~这可是偶这辈子见过的最有钱的人了!~ 感觉没有在电视里看到的光鲜,可能是有点疲惫吧,但那种成功人士的风范和气度还是很明显的。 10/14/2006 让MSN Message也能显示Foobar的播放信息 MSN可以在个人消息中向好友显示在WMP中播放的歌曲。现在谁还用WMP听歌呢,都用Foobar了,一般的也是winamp,再次就是千千静听什么的。微软真是BT ,我们就让他BT不成,这个Toaster插件就可以实现让MSN向好友显示播放信息了。
下载地址:http://www.myplugins.info/toaster.htm 请注意:该网站可能采用了防盗链技术,请在Download上直接点击下载,不要用FlashGet等下载软件。
将下载的解压后的foo_toaster.dll放到foobar2000安装目录下的components文件夹,然后重新启动 foobar2000,即可。 10/11/2006 实习第一章 在联想的GNBD(国际业务拓展)实习了一两天了,干着Flash应用开发的活。
感觉自己就像个高级苦工,一边学习,一边开发项目。
工作虽然很累,但也学到了不少。自己的Flash编程水平突飞猛进,一直想提高的AS也不在话下了。而且还学到新的Flash应用设计方法,基于Flash Media Server的网络交互应用,经过这几天的学习,发现它的功能还是很强大的。似乎很热门的网络在线播放,例如:youtube就是用FLV文件播放的,应该也用到了FMS作为服务器端的。
有时间我会写一个FMS的学习体会,和基本FMS应用实现的教程。
9/25/2006 怨念之F1 想去看F1大奖赛不是一天两天的事了,可就是一直没能如愿,谁让咱是个穷学生呢。记得还曾经和random计划着十·一要去看Shanghai GP的,现在是一定不可能,先不说我人在北京,就是在上海,那票价也不是我这样的人能轻易承受的。
还好这次Intel招来了宝马索伯车队为自己的新CPU宣传造势,才让我有机会一睹F1赛车的芳容。
公交换活动班车我才终于来到了位于北六环外的活动地点,到了那儿才发现现场已聚集了很多的人。真是什么样的人都有:附近的村民,大小的VIP,还有索伯车队的工作人员和技师。看热闹的多,来搜罗奖品的多,真正冲着F1赛车去的倒是没见到几个。
刚到了现场,还没回过神,令人期待的大餐就上演了。宝马的三号车手Kubica驾驶着F1赛车在活动现场牛刀小试,不,那是牛刀小试,简直就是暴殄天物。Intel脑子一定是秀豆了,竟然就给F1赛车300多米长的巴掌大点地方。才300米哎,对于F1连个胳膊都伸不开。还是人Kubica技高胆大,就在这点地方开起来了。加速,大力刹车,掉头,720度漂移转圈,看得我眼花缭乱;引擎巨大的轰鸣声,让我血脉喷张。
可惜我到晚了,只能在人堆后面不停的跳着看,没法近距离的感受。没关系,下午还有两次机会。我先去现场参加活动,挣点奖品回来,不能白来一趟啊。
这里我特别谴责某人,说好了带着相机和我一起来的,竟然只顾自己happy,来得时候把相机落了。把你自己丢了,也不能把相机不带阿。哎~~~~
幸亏水木的labs同学把他拍摄的照片给我分享,我才能有点照片做个留恋。
下午的试车,我早早占了个最前面的位子,这下可以把F1赛车看个够了。在这么近感受F1,效果真是震撼。当赛车从身前经过时,那引擎的轰鸣似乎可以把耳膜震破。很难想象在F1赛车场上,当22部赛车同时开动引擎等待发车是一种什么效果。
最后汇报一下当天的战果:毛绒音箱一副,Kubica签名的T恤一件,Kubica和车队3名工作人员签名的帽子一顶。还有一大堆的钥匙链、手机链什么的。现场还见到很多MM,礼仪MM个子高挑,身材一级棒;cos魔兽的MM那身cos我看着很是口水。索伯车队的一位金发美女工作人员不得不提,真是太漂亮了,莞尔一笑更是动人,OH!My Goddess!!!
总之,这次不虚此行,算是了却了我的一桩心愿。再有就是努力奋斗,去F1 GP现场看一次。
7/5/2006 ITALY~~OLE!LOE!!~德国的勇士们有尊严的走了~
意大利的战士们光荣的走向柏林~
背水一战的罗马战士,靠着自己的坚强意志在多特蒙德击退了日耳曼军团
目标柏林,等待王冠加冕!~
这次的意大利的确不是23个人在作战,他们需要向世人证明他们的足球不是被假球和丑闻浸淫的。
当布冯,戛图索这些在场上奋斗的主力还不知道下赛季自己会身披那家俱乐部的战袍,这横扫欧洲的古罗马战士的后代,用一场酣畅淋漓的胜利回答了所有的疑问。
现在他们只需要一个冠军来锦上添花,他们已经用自己的实际行动证明他们无愧于冠军的称号。
送一首“我的太阳”给这些小伙们,你们就是我心中的太阳!
6/30/2006 毕业大事记6月27日:办理离校的所有手续,下午拿到了传说中的毕业证书。晚上吃散伙饭,很多人借酒买醉,可惜我是清醒地那个~~
6月28日:凌晨在乐圣看球,和同学很可能是最后一次的K歌。白天睡了不到4小时后,起来买票,收拾东西准备回家。
6月29日:无所事事,又都是事。收拾了东西,把大部分行李搬到了研究生宿舍,累!~~
6月30日:也就是今天。把自己在宿舍最后一点痕迹抹去,下午回家的火车。
再见了,同学们~~
再见了,北京~~
秋天到来的时候,我还会回来的!~ 6/10/2006 上下眼皮能冷战多久?仅以此片纪念我那不眠的20+小时……
之前,以及很久以前和很久很久的以前,我的上下眼皮两口子一直很和睦。按时开工,按时收工,中途经常拥抱亲密一下。这样日子持续了相当长的一段时间,没有激情,没有意外,但也生活甜蜜乐无边。这么说,就是告诉大家我一直是个好孩子,从来不通宵的,顶多就是夜猫子级别,睡得晚一点而已。
直到了前天,俺家的上下眼皮两口子爆发了史无前例的一次冷战,长达20+小时没有收工团聚。这么甜蜜的两口子会爆发冷战,全是因为有个叫“毕业论文”的性感的美女的横插一腿。
毕业论文性感撩人,美丽清纯,把我迷的神魂颠倒,和她周旋了半月余仍然不能将她征服。每天的平均进展不到一千字,这和我的一万五千字的终极目标差的太远了。美女对我说,只要你能写到一万五千字,我就是你的了,而且我那个叫“毕业证书”的姐姐也是你的了。天下还有这等的好事,不但能得到美女,还有美女的成熟姐姐附送,难道月老终于对我开眼了?
就像电影,小说中的那样,任何美妙的爱情故事进行到这里,总会有一个反面人物等场。这里也不会意外,即将登场的就是我的毕设指导老师。前天,毕设老师对我说,如果你不能将毕业论文追到手,给我过目,我就扣留你的证书,让你双手空空。
我的老师啊,你为什么要对我这样,我把我的四年青春贱卖给了你的东家——学校,你现在却要这样对我。为了我的终生幸福,为了救美女脱离恶人之手,我豁了出去,拿出了Jack冰海勇救Rose,金刚帝国大厦顶端勇斗飞机,蓝精灵智斗格格巫(这个和主题不搭调,后期剪辑时删除,导演注)的劲头,发誓要在不到20小时内搞定那一万五千字的目标,把“毕业论文”追到手。然后给老师过目,让他——SHUT UP!!,我就能拥着两位美女,走出大学门了,和我的四年青春说一声:拜拜~~~
我的手指在键盘上飞舞,一万五千字的目标也越来越近了,似乎我手下的就是一架钢琴,美妙的音符在我身旁环绕,时间也不复存在。就是在这时我的上下眼皮两口子爆发的冷战,持续时间之久,史无前例。他们为了我,见我为了红颜如此的不顾惜自己,怒了,到了收工的时间也不收工,放弃了两口子的团聚,打起了冷战。这冷战一打就是整整的一夜,又到了他们该开工的时间,而我也是没有把毕业论文美女追到。为了美女,我先不管上下眼皮的冷战,继续向着一万五千字的目标前进,终于在第二日的上午八点达成了目标。这是毕业论文美女像我缓缓走来,对我轻声说,我是你了,现在你可以拿我去就被你老师扣押的“毕业证书 ”姐姐了。
鼓足了勇气,我带着美女去赴鸿门宴,经过数个回合的大战,在毕业论文的帮助下,我终于救出了毕业证书。这时老师面目狰狞的说,证书是你的了,但我要把论文留下,哈哈。哦,我的天啊,你为什么我要把我的至爱夺走!而论文却对我说,其实你更爱的是我的姐姐证书,不要担心我,我在学校这儿会很好的。就在说话间,老师带着美女绝尘而去,这句话竟成了我和她的告别。
用不了多久,我便可以和大学告别了,带着我的毕业证书美女。现在我要做的却是回宿舍,安慰一下我的上下眼皮,让他们放弃冷战,好好团聚一下,毕竟20+个小时没合眼了。很快,看到上下重归于好,我也很快进入了梦乡。
又是一个Happy Ending,我的编剧水平真是够烂,就要赶上美国那些编剧的水平了。 6/6/2006 JPEG 压缩简介1. 色彩模型 JPEG 的图片使用的是 YCrCb 颜色模型, 而不是计算机上最常用的 RGB. 关于色 彩模型, 这里不多阐述. 只是说明, YCrCb 模型更适合图形压缩. 因为人眼对图片上 的亮度 Y 的变化远比色度 C 的变化敏感. 我们完全可以每个点保存一个 8bit 的亮 度值, 每 2x2 个点保存一个 Cr Cb 值, 而图象在肉眼中的感觉不会起太大的变化. 所以, 原来用 RGB 模型, 4 个点需要 4x3=12 字节. 而现在仅需要 4+2=6 字节; 平 均每个点占 12bit. 当然 JPEG 格式里允许每个点的 C 值都记录下来; 不过 MPEG 里 都是按 12bit 一个点来存放的, 我们简写为 YUV12. [R G B] -> [Y Cb Cr] 转换 ------------------------- (R,G,B 都是 8bit unsigned) | Y | | 0.299 0.587 0.114 | | R | | 0 | | Cb | = |- 0.1687 - 0.3313 0.5 | * | G | + |128| | Cr | | 0.5 - 0.4187 - 0.0813| | B | |128| Y = 0.299*R + 0.587*G + 0.114*B (亮度) Cb = - 0.1687*R - 0.3313*G + 0.5 *B + 128 Cr = 0.5 *R - 0.4187*G - 0.0813*B + 128 [Y,Cb,Cr] -> [R,G,B] 转换 ------------------------- R = Y + 1.402 *(Cr-128) G = Y - 0.34414*(Cb-128) - 0.71414*(Cr-128) B = Y + 1.772 *(Cb-128) 一般, C 值 (包括 Cb Cr) 应该是一个有符号的数字, 但这里被处理过了, 方法 是加上了 128. JPEG 里的数据都是无符号 8bit 的. 2. DCT (离散余弦变换) JPEG 里, 要对数据压缩, 先要做一次 DCT 变换. DCT 变换的原理, 涉及到数学 知识, 这里我们不必深究. 反正和傅立叶变换(学过高数的都知道) 是差不多了. 经过 这个变换, 就把图片里点和点间的规律呈现出来了, 更方便压缩.JPEG 里是对每 8x8 个点为一个单位处理的. 所以如果原始图片的长宽不是 8 的倍数, 都需要先补成 8 的倍数, 好一块块的处理. 另外, 记得刚才我说的 Cr Cb 都是 2x2 记录一次吗? 所 以大多数情况, 是要补成 16x16 的整数块.按从左到右, 从上到下的次序排列 (和我 们写字的次序一样). JPEG 里是对 Y Cr Cb 分别做 DCT 变换的. 这里进行 DCT 变换 的 Y, Cr, Cb 值的范围都是 -128~127. (Y 被减去 128) JPEG 编码时使用的是 Forward DCT (FDCT) 解码时使用的 Inverse DCT (IDCT) 下面给出公式: FDCT: 7 7 2*x+1 2*y+1 F(u,v) = alpha(u)*alpha(v)* sum sum f(x,y) * cos (------- *u*PI)* cos (------ *v*PI) x=0 y=0 16 16 u,v = 0,1,...,7 { 1/sqrt(8) (u==0) alpha(u) = { { 1/2 (u!=0) IDCT: 7 7 2*x+1 2*y+1 f(x,y) = sum sum alpha(u)*alpha(v)*F(u,v)*cos (------- *u*PI)* cos (------ *v*PI) u=0 v=0 16 16 x,y=0,1...7 这个步骤很花时间, 另外有种 AA&N 优化算法, 大家可以去 inet 自己找一下. 在 Intel 主页上可以找到 AA&N IDCT 的 MMX 优化代码. ( Intel 主页上的代码, 输入数据为 12.4 的定点数, 输入矩阵需要转置 90 度) 3. 重排列 DCT 结果 DCT 将一个 8x8 的数组变换成另一个 8x8 的数组. 但是内存里所有数据都是线 形存放的, 如果我们一行行的存放这 64 个数字, 每行的结尾的点和下行开始的点就 没有什么关系, 所以 JPEG 规定按如下次序整理 64 个数字. 0, 1, 5, 6,14,15,27,28, 2, 4, 7,13,16,26,29,42, 3, 8,12,17,25,30,41,43, 9,11,18,24,31,40,44,53, 10,19,23,32,39,45,52,54, 20,22,33,38,46,51,55,60, 21,34,37,47,50,56,59,61, 35,36,48,49,57,58,62,63 这样数列里的相邻点在图片上也是相邻的了. 4. 量化 对于前面得到的 64 个空间频率振幅值, 我们将对它们作幅度分层量化操作.方 法就是分别除以量化表里对应值并四舍五入. for (i = 0 ; i<=63; i++ ) vector = (int) (vector / quantization_table + 0.5) 下面有张 JPEG 标准量化表. (按上面同样的弯曲次序排列) 16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99 这张表依据心理视觉阀制作, 对 8bit 的亮度和色度的图象的处理效果不错. 当然我们可以使用任意的量化表. 量化表是定义在 jpeg 的 DQT 标记后. 一般 为 Y 值定义一个, 为 C 值定义一个. 量化表是控制 JPEG 压缩比的关键. 这个步骤除掉了一些高频量, 损失了很高 细节. 但事实上人眼对高空间频率远没有低频敏感.所以处理后的视觉损失很小. 另一个重要原因是所有的图片的点与点之间会有一个色彩过渡的过程. 大量的图象 信息被包含在低空间频率中. 经过量化处理后, 在高空间频率段, 将出现大量连续 的零. 注意, 量化后的数据有可能超过 2 byte 有符号整数的处理范围. 5. 0 RLE 编码 现在我们矢量中有许多连续的 0. 我们可以使用 RLE 来压缩掉这些 0. 这里我们 将跳过第一个矢量 (后面将解释为什么) 因为它的编码比较特别. 假设有一组矢量 (64 个的后 63 个) 是 57,45,0,0,0,0,23,0,-30,-16,0,0,1,0,0,0, 0 , 0 ,0 , 0,..,0 经过 RLC 压缩后就是 (0,57) ; (0,45) ; (4,23) ; (1,-30) ; (0,-16) ; (2,1) ; EOB EOB 是一个结束标记, 表示后面都是 0 了. 实际上, 我们用 (0,0) 表示 EOB 但是, 如果这组数字不以 0 结束, 那么就不需要 EOB. 由于后面 huffman 编码的要求, 每组数字前一个表示 0 的数量的必须是 4 bit, 就是说, 只能是 0~15, 所以我们实际这样编码: (0,57) ; (15,0) (2,3) ; (4,2) ; (15,0) (15,0) (1,895) , (0,0) 注意 (15,0) 表示了 16 个连续的 0. 6. huffman 编码 为了提高储存效率, JPEG 里并不直接保存数值, 而是将数值按位数分成 16 组: 数值 组 实际保存值 0 0 - -1,1 1 0,1 -3,-2,2,3 2 00,01,10,11 -7,-6,-5,-4,4,5,6,7 3 000,001,010,011,100,101,110,111 -15,..,-8,8,..,15 4 0000,..,0111,1000,..,1111 -31,..,-16,16,..,31 5 00000,..,01111,10000,..,11111 -63,..,-32,32,..,63 6 . -127,..,-64,64,..,127 7 . -255,..,-128,128,..,255 8 . -511,..,-256,256,..,511 9 . -1023,..,-512,512,..,1023 10 . -2047,..,-1024,1024,..,2047 11 . -4095,..,-2048,2048,..,4095 12 . -8191,..,-4096,4096,..,8191 13 . -16383,..,-8192,8192,..,16383 14 . -32767,..,-16384,16384,..,32767 15 . 还是来看前面的例子: (0,57) ; (0,45) ; (4,23) ; (1,-30) ; (0,-8) ; (2,1) ; (0,0) 只处理每对数右边的那个: 57 是第 6 组的, 实际保存值为 111001 , 所以被编码为 (6,111001) 45 , 同样的操作, 编码为 (6,101101) 23 -> (5,10111) -30 -> (5,00001) -8 -> (4,0111) 1 -> (1,1) 前面的那串数字就变成了: (0,6), 111001 ; (0,6), 101101 ; (4,5), 10111; (1,5), 00001; (0,4) , 0111 ; (2,1), 1 ; (0,0) 括号里的数值正好合成一个字节. 后面被编码的数字表示范围是 -32767..32767. 合成的字节里, 高 4 位是前续 0 的个数, 低 4 位描述了后面数字的位数. 继续刚才的例子, 如果 06 的 huffman 编码为 111000 69 = (4,5) --- 1111111110011001 ( 注: 69=4*16+5 ) 21 = (1,5) --- 11111110110 4 = (0,4) --- 1011 33 = (2,1) --- 11011 0 = EOB = (0,0) --- 1010 那么最后对于前面的例子表示的 63 个系数 (记得我们将第一个跳过了吗?) 按位流 写入 JPG 文件中就是这样的: 111000 111001 111000 101101 1111111110011001 10111 11111110110 00001 1011 0111 11011 1 1010 DC 的编码 --------- 记得刚才我们跳过了每组 64 个数据的第一个吧, DC 就是指的这个数字 (后面 63 个简称 AC) 代入前面的 FDCT 公式可以得到 c(0,0) 7 7 DC = F(0,0) = --------- * sum sum f(x,y) * cos 0 * cos 0 其中 c(0,0) = 1/2 4 x=0 y=0 1 7 7 = --- * sum sum f(x,y) 8 x=0 y=0 即一块图象样本的平均值. 就是说, 它包含了原始 8x8 图象块里的很多能量. (通常 会得到一个很大的数值) JPEG 的作者指出连续块的 DC 率之间有很紧密的联系, 因此他们决定对 8x8 块的 DC 值的差别进行编码. (Y, Cb, Cr 分别有自己的 DC) Diff = DC(i) - DC(i-1) 所以这一块的 DC(i) 就是: DC(i) = DC(i-1) + Diff JPG 从 0 开始对 DC 编码, 所以 DC(0)=0. 然后再将当前 Diff 值加在上一个值上得 到当前值. 下面再来看看上面那个例子: (记住我们保存的 DC 是和上一块 DC 的差值 Diff) 例如上面例子中, Diff 是 -511, 就编码成 (9, 000000000) 如果 9 的 Huffman 编码是 1111110 (在 JPG 文件中, 一般有两个 Huffman 表, 一 个是 DC 用, 一个是 AC 用) 那么在 JPG 文件中, DC 的 2 进制表示为 1111110 000000000 它将放在 63 个 AC 的前面, 上面上个例子的最终 BIT 流如下: 1111110 000000000 111000 111001 111000 101101 1111111110011001 10111 11111110110 00001 1011 0111 11011 1 1010 下面简单叙述一下针对一个数据单元的图片 Y 的解码 ----------------------------------------------- 在整个图片解码的开始, 你需要先初始化 DC 值为 0. 1) 先解码 DC: a) 取得一个 Huffman 码 (使用 Huffman DC 表) b) Huffman解码, 看看后面的数据位数 N c) 取得 N 位, 计算 Diff 值 d) DC + = Diff e) 写入 DC 值: " vector[0]=DC " 2) 解码 63 个 AC: ------- 循环处理每个 AC 直到 EOB 或者处理到 64 个 AC a) 取得一个 Huffman 码 (使用 Huffman AC 表) b) Huffman 解码, 得到 (前面 0 数量, 组号) [记住: 如果是(0,0) 就是 EOB 了] c) 取得 N 位(组号) 计算 AC d) 写入相应数量的 0 e) 接下来写入 AC ----------------- 下一步的解码 ------------ 上一步我们得到了 64 个矢量. 下面我们还需要做一些解码工作: 1) 反量化 64 个矢量 : "for (i=0;i<=63;i++) vector*=quant" (注意防止溢出) 2) 重排列 64 个矢量到 8x8 的块中 3) 对 8x8 的块作 IDCT 对 8x8 块的 (Y,Cb,Cr) 重复上面的操作 [Huffman 解码, 步骤 1), 2), 3)] 4) 将所有的 8bit 数加上 128 5) 转换 YCbCr 到 RGB JPG 文件(Byte 级)里怎样组织图片信息 ----------------------------------- 注意 JPEG/JFIF 文件格式使用 Motorola 格式, 而不是 Intel 格式, 就是说, 如果 是一个字的话, 高字节在前, 低字节在后. JPG 文件是由一个个段 (segments) 构成的. 每个段长度 <=65535. 每个段从一个标 记字开始. 标记字都是 0xff 打头的, 以非 0 字节和 0xFF 结束. 例如 'FFDA' , 'FFC4', 'FFC0'. 每个标记有它特定意义, 这是由第2字节指明的. 例如, SOS (Start Of Scan = 'FFDA') 指明了你应该开始解码. 另一个标记 DQT (Define Quantization Table = 0xFFDB) 就是说它后面有 64 字节的 quantization 表 在处理 JPG 文件时, 如果你碰到一个 0xFF, 而它后面的字节不是 0, 并且这个字节 没有意义. 那么你遇到的 0xFF 字节必须被忽略. (一些 JPG 里, 常用用 0xFF 做某 些填充用途) 如果你在做 huffman 编码时碰巧产生了一个 0xFF, 那么就用 0xFF 0x00 代替. 就是说在 jpeg 图形解码时碰到 FF00 就把它当作 FF 处理. 另外在 huffman 编码区域结束时, 碰到几个 bit 没有用的时候, 应该用 1 去填充. 然后后面跟 FF. 下面是几个重要的标记 -------------------- SOI = Start Of Image = 'FFD8' 这个标记只在文件开始出现一次 EOI = End Of Image = 'FFD9' JPG 文件都以 FFD9 结束 RSTi = FFDi ( i = 0..7) [ RST0 = FFD0, RST7=FFD7] = 复位标记 通常穿插在数据流里, 我想是担心 JPG 解码出问题吧(应该配合 DRI 使用). RST 将 Huffman 的解码数据流复位. DC 也重新从 0 开始计 (SOS --- RST0 --- RST1 -- RST2 --... ...-- RST6 --- RST7 -- RST0 --...) ---- 标记 ---- 下面是必须处理的标记 SOF0 = Start Of Frame 0 = FFC0 SOS = Start Of Scan = FFDA APP0 = it's the marker used to identify a JPG file which uses the JFIF specification = FFE0 COM = Comment = FFFE DNL = Define Number of Lines = FFDC DRI = Define Restart Interval = FFDD DQT = Define Quantization Table = FFDB DHT = Define Huffman Table = FFC4 JPG 文件中 Haffman 表的储存 --------------------------- JPEG 里定义了一张表来描述 Haffman 树. 定义在 DHT 标记后面. 注意: Haffman 代码的长度限制在 16bit 内. 一般一个 JPG 文件里会有 2 类 Haffman 表: 一个用于 DC 一个用于 AC (实际有 4 个表, 亮度的 DC,AC 两个, 色度的 DC,AC 两个) 这张表是这样保存的: 1) 16 字节: 第 i 字节表示了 i 位长的 Huffman 代码的个数 (i= 1 到 16) 2) 这表的长度 (字节数) = 这 16 个数字之和 现在你可以想象这张表怎么存放的吧? 对应字节就是对应 Haffman 代码等价数字. 我 不多解释, 这需要你先了解 Haffman 算法. 这里只举一个例子: Haffman 表的表头是 0,2,3,1,1,1,0,1,0,0,0,0,0,0,0,0 就是说长度为 1 的代码没有 长度为 2 的代码为 00 01 长度为 3 的代码是 100 101 110 长度为 4 的代码是 1110 长度为 5 的代码是 11110 长度为 6 的代码是 111110 长度为 7 的代码没有 (如果有一个的话应该是 1111110) 长度为 8 的代码是 11111100 ..... 后面都没有了. 如果表下面的数据是 45 57 29 17 23 25 34 28 就是说 45 = 00 57 = 01 29 = 100 17 = 101 23 = 110 等等... 如果你懂 Haffman 编码, 这些不难理解 采样系数 -------- 下面讲解的都是真彩 JPG 的解码, 灰度 JPG 的解码很简单, 因为图形中只有亮度信 息. 而彩色图形由 (Y, Cr, Cb) 构成, 前面提到过, Y 通常是每点采样一次, 而 Cr, Cb 一般是 2x2 点采样一次, 当然也有的 JPG 是逐点采样, 或者每两点采样 (横向 两点, 纵向一点) 采样系数均被定义成对比最高采样系数的相对值. 一般情况 (即: Y 逐点采样, Cr Cb 每 2x2 点一次) 下: Y 有最高的采样率, 横向采 样系数HY=2 纵向采样系数 VY=2; Cb 的横向采样系数 HCb=1, 纵向采样系数 VCb=1; 同样 HCr=1, VCr=1 在 Jpeg 里, 8x8 个原始数据, 经过 RLC, Huffman 编码后的一串数据流称为一个 Data Unit (DU) JPG 里按 DU 为单位的编码次序如下: 1) for (counter_y=1;counter_y<=VY;counter_y++) for (counter_x=1;counter_x<=HY;counter_x++) { 对 Y 的 Data Unit 编码 } 2) for (counter_y=1;counter_y<=VCb ;counter_y++) for (counter_x=1;counter_x<=HCb;counter_x++) { 对 Cb 的 Data Unit 编码 } 3) for (counter_y=1;counter_y<=VCr;counter_y++) for (counter_x=1;counter_x<=HCr;counter_x++) { 对 Cr 的 Data Unit 编码 } 按我上面的例子: (HY=2, VY=2 ; HCb=VCb =1, HCr,VCr 6/4/2006 奇虎公司行 昨天,被师兄抓去给奇虎即将推出的一项新服务,做个头脑风暴,就是看看这项服务有没有市场,有多少人能接受使用,等等,至于是什么服务还是不说了,免得师兄说我泄露商业机密。 最近在高校大造声势,圈钱势头很猛的校内网竟然也不是中国原创,而是完全模仿了现在US的高校中很火的facebook(www.facebook.com)据说现在很多青少年早上起床第一件事就是更新facebook。校内网很好的把这种火热势头搬到了国内。扯远了。 记住奇虎是个论坛搜索器哦~~~~
5/30/2006 端午节倒计时 似乎和端午节有关的东西,都和绿色相关,粽子、艾草、还有绿豆糕。怎么都是吃的,中国的美食文化是多么的博大精深阿。
今年的端午巧合的赶上了5月的最后一天,吃完了粽子就是6月了。6月意味这告别的开始。论文、答辩、照毕业照、然后收拾东西逃开一段,还是要回来继续读书的。四年的大学生活开没开始就这么突然结束了。四年来不断的咒骂着BITI的垃圾,要离开时却又有一点的不舍。对于这个学校值得留念的并不多,那我在不舍什么呢?也许是这四年的时光吧,美好的青春就这么从指缝中溜走了。再也没有一个可以肆意挥霍的四年了。时光这东西就像手中沙,越想把它攥紧就流失的越快。
赶紧的把毕设做完了,乘着大学的尾巴还没有消失前,抓紧时间疯狂一下。
倒计时开始了!~~嘀嗒、嘀嗒、嘀嗒……
When music starts,It's——"Wake Me Up When September Ends". 5/22/2006 MSN,MOP&QIHOO从实验室眯着眼睛回来(都是长时间盯着电脑闹得),无聊的上上网。惊闻MSN和MOP解约了,和中文论坛新贵qihoo签约了,以后的MSN社区就是msn.qihoo.com拉~~
其实,这种网络新闻本没必要大惊小怪的,可是qihoo嘛,有我崇拜的师兄——小贾,这意义就不同了,很有必要大惊小怪一下的。
这里插播一下牛人的介绍。小贾,上一届的师兄,才毕业一年就做到了qihoo的产品推广部经理了。
不知道能不能以这个缘由让他bg一下我们这些bna的后生呢?? |
|
|