天高く、雲は流れ 第一卷 第一章 呼唤暴风雨的男人 2

* 本文(包含其插图)严禁转载,并且不会同意您的转载请求。如有需要引用或介绍本文,您可以提供本文的连接。

隔了两个月,终于又开始翻译了= =||说不定两个月前开始看的人都忘了剧情了……下面是序言和第一节的链接:
http://www.dgwxx.com/blog/index.php?blog:6
http://www.dgwxx.com/blog/index.php?blog:8

悠法这才发现,自己已经跑到了别的街道。
街道变得狭窄,建筑物也变得拥挤起来,因此明明是白天却怪异地显得有些昏暗。
“爸爸,你在哪。”
在没人经过的街道上,悠法一个人跌跌撞撞地走着。就像飞龙他们猜得那样,悠法迷路了。
爸爸在一边热烈地谈话,悠法觉得很无聊。这时,他看到了一个带着奇怪动物的人。那是一只后背隆起,提醒很大的动物,悠法从来没有见过。悠法出于好奇心追了上去,但没一会就跟丢了,因此不但离开了大道,而且完全迷失了方向。
“爸爸……”
悠法一边走着一边用紧握的小拳头擦着眼睛。一个人处在陌生的地方,由于不安和无助哭了起来。
“呜——妈妈——”
悠法一边哭一边在连方向都搞不清楚的街道上走着。忽然,从旁边的小路上突然飞出来了一个黑色的东西。
“啊!”
虽然被吓到了,但是悠法马上就绽开了笑颜。从小路飞出来的,是一只小狗。小狗全身漆黑,眼睛像红宝石一样,背上有银色的鬃毛,跑到悠法的脚边,使劲地摇着尾巴。
“哇,好小。”
悠法蹲下来,抱起小狗。抱在胸前的小狗热乎乎的、软软的。
Image
“你长得好怪啊,但是真漂亮。”
悠法抚摸着小狗的脑袋,小狗好像很高兴地舔着悠法的脸。
“好痒啊。”
摆脱了一个人的孤单,悠法高兴起来。

“在这。”
小狗飞出来的小路上,出现了一个中年男人。小狗在悠法的怀里发出了哀鸣。
“孩子,快把那只狗交给叔叔。”
中年男人一接近悠法,小狗突然狂叫起来。
“叔叔,你要干什么。”
悠法仿佛碰到了什么恶心的东西似的问那个男人。男人手里拿了一根棍棒似的东西,尽管藏到了身后,但是仍能隐约看到。
“小朋友,那只狗可是魔族中的魔犬啊。你仔细看看,它的眼睛像血一样红,背上连鬃毛都有,不可能是普通的狗。它又可怕又危险。乖,快把它给叔叔。”
男人一边用撒娇的声音说着,一边靠近悠法。悠法抱着小狗慢慢后退——
“不要,不给你!”
悠法突然意识到,如果给他的话,小狗就会被杀掉。
“明明这么小,只是因为被说是魔犬就要被杀掉……爸爸说过,虽然被叫做魔族,但他们跟人类、动物一样。”
悠法强硬地说道。

在这个大陆上,有着被叫做魔族的人们。他们因为是 “大黑暗”时代的后裔,所以拥有与常人相异的外表和特殊的力量。魔族除了人类,还包含动物和植物。
“怎么能叫他们魔族呢。不能只因为与别人不一样,就歧视他们。”
悠法想起了飞龙对他说过的话。睡觉前,飞龙经常在暖炉前讲各种各样的故事。这其中,也有关于“大黑暗”的事情。
“那是很久很久以前,这个大路上还有很多国家、有很多很多人的时候的故事了。”
这样说着,飞龙讲起了很久以前的故事。
有一天,一个不该存在于这个世界上的东西突然出现,于是被称作“大黑暗”的时代开始了。它放出红色的光,照着世界,浸在红光中的动植物变得狂暴。世界陷入了极大的混乱当中,很多人因此而死,很多国家也灭亡了。
这时,出现了七个魔法师。他们打倒变得狂暴的人们,或将他们封印在“世界的尽头”。
“大黑暗”就这样结束了。
但是,却还有很多外貌改变或拥有特殊力量,却没有变得狂暴的人们。人们害怕他们,称他们为魔族。只是因为不同,就厌恶他们。
“虽然说是不同,但这跟每个人的长相、声音都不同不是一个道理吗。为什么要排斥他们呢。”
飞龙露出悲伤的表情说着。总是很开朗的爸爸那时的表情,深深烙在了幼小的悠法心中。

“我跟它是朋友!不要把它给你!”
悠法紧紧咬着嘴唇,更加用力抱紧了胸前的小狗。男人恼怒地咂了一下嘴。
“真是不懂事的小鬼!那只狗是魔族,如果放任不管一定会去害人!在那之前杀了它是最好的!”
一边说着,一边把藏在背后的棍棒拿出来对着悠法。
“快把那只狗给我,不然就算是小孩我也不饶你。”
明显是在威胁。无论是多任性的孩子,听到这样的话都会这样想吧。但是——
“就是不给!”
悠法就这么抱着小狗,转过身去跑开了。
“喂!”
感觉到背后追来的男人,悠法拼命地向前跑。无论如何,都非跑不可。
“明明什么坏事都没做,这么小就要被杀,实在太可怜了!”
悠法拼命在昏暗的小路上跑着,甚至有好几次都产生了把小狗放下来的心思,但就算这样也要全力向前跑。然而,孩子终究是跑不过,马上就会被追上。
“小鬼!”
悠法被从后面揪住脖子,仰面倒在了地上。虽然后背猛地磕在了石板路上,痛得流出了眼泪,但就算这样悠法也不放开小狗。
“真是的,一开始就给我不就好了。”
俯视着悠法,男人恨恨地说。
男人在旁边蹲下,伸出手想要抓住小狗。这时悠法不假思索地撞向男人的下颚。
“哇!”
男人吃痛向后坐了下去。趁着这个工夫,悠法站了起来,又跑了出去。
悠法在迷宫似的小道上跑着,不时回头张望。虽然看不到男人,但咒骂声和杂乱的脚步声却不断接近。
“会被追上的!”
如果那样的话,大概会被那根棍子打吧。悠法越想越害怕,不由得闭上了眼睛。突然,嗵!好像撞到了什么东西上。
“唔——”
不知道撞上了什么东西,悠法按着额头哼着。
“没事吧?”
年轻男人的声音。正面向上看去,是一个裹着头巾的高个子男人。尖尖的、端正的脸,深青色的上衣和同样颜色的裤子,披着白色的披风。
悠法直直地凝视着这个青年。青年紫色的眼睛里有着狭长的瞳仁,像猫一样。
“像猫一样的眼睛。”悠法说道。
青年好像想要说什么一样动了动嘴唇。

“看你是个孩子才对你这么好的,竟然不识抬举!”
怒吼声爆发而出,那个高举着棍棒的男人出现在了小路上。本来以为会从后边追过来的男人竟然突然出现在了面前,悠法下了一大跳。
“快把魔犬交出来!必须杀了魔族!”
挥舞着棍棒的男人终于过来了。
“他要杀了它!”悠法梗起身子,紧紧地抱着小狗。
呜——小狗发出了悲鸣。正在悠法以为逃不掉、正要放弃的时候——
“必须杀掉魔族?别胡说了。”
青年又反了回来。突然,男人的脸色变了,手中的棍棒也落到了地上。
“帕、帕加!?”
“明明什么坏事都没做,只是因为是魔族就要被杀?而且还举着棍子追打小孩?”
被叫做帕加的青年用放光的紫色眼睛盯着男人。
“不、不好意思!刚才我不知道是你!”
因为位置的关系,男人只能看到青年的背影。男人发出“请绕了我吧”的悲鸣,用比来的时候快得惊人的速度逃走了。
悠法呆呆地望着逃走的男人的背影。
“这是你的狗吗?”
帕加摸着小狗的头,悠法摇摇头。
“但是如果爸爸同意的话,我就能养它了。”
悠法抚摸着小狗,小狗舔着悠法的脸,像摇旗似的摇着小小的尾巴。
“那只狗可是魔犬,你不害怕吗?”
被帕加这么一说,悠法一幅呆然的样子。
“为什么?”
被反问回来的帕加轻轻耸了耸肩。
“如果我弄错了实在不好意思……难道你是飞龙的儿子?”
帕加转换了话题。悠法使劲点头。

“嗯,我爸爸就是飞龙。”
悠法很精神地回答。帕加的一片眉毛轻轻地颤了一下。
“我叫悠法。嗯——帕加叔叔是爸爸的朋友吗?”
似乎是碰到了爸爸的朋友,悠法稍微放心了一些。但是帕加的回答似乎有些复杂。
“不是朋友,只是在一个道场互相认识而已。”
“……?”
悠法歪过头,似乎不知道“朋友”和“相识”的区别。
“话说回来,现在飞龙在哪?那个混蛋什么时候回首都来的?”
悠法被帕加连珠炮似地问着。但是,迷路的悠法怎么可能知道飞龙在哪。
好像只是看到悠法窘在那里不说话,帕加就全都察觉到了似的——
“原来迷路了啊。”
帕加苦笑道。悠法轻轻地点头,告诉帕加爸爸因为和一个叫埃伊卡的朋友说话,自己因为无聊,去追奇怪的动物,就迷了路。
“真是的,竟然聊天聊得忘了孩子,这个爹是怎么当的。好吧,去埃伊卡的店里吧。那样的话应该能见到飞龙吧。”
发完牢骚,帕加像是在说跟我来一样摆了摆手,快步走开。悠法放下小狗,跟着帕加。
“帕加叔叔走得好快啊。”悠法一边跑一边想。然而自己就算跑也追不上帕加。大人和孩子,无论步幅还是速度都差太多了。
“但是,一定要跟上。”
为了不被帕加落下,悠法拼命地跑着。小狗一边跑,一边顽皮地跟着悠法。
忽然,前面的帕加站住了。
“怎么了?”悠法不知道帕加为什么停下来了。
“帕加叔叔,怎么了?”
好不容易才追上的悠法一边喘着粗气一边问,但帕加没有回答。只是稍微看了一眼悠法,就继续无言地走了。
“?”
虽然不知道怎么回事,但是悠法还是继续跟着帕加。这次,悠法忽然感觉到帕加的速度变慢了。
“啊,慢下来了。”
虽然说相对于孩子来说还是很快,但现在至少不用跑就能跟上了。
不必担心有人追杀,又能轻松地跟上帕加,悠法开始高兴地跟帕加搭话。
“帕加叔叔,你跟爸爸在一个道场吧。道场是什么样的呢?你跟爸爸谁比较强?”
但是,帕加几乎都没有回答。就算回答,也是“啊”、“不知道”什么的,尽是些让人难以理解的回答。“如果是爸爸的话就会告诉我了。”如果是飞龙的话,肯定会说很多,但是帕加好像完全不同。
“好无聊。”
就算一个人不停地说也不好玩。没办法,悠法只能选择沉默。
两个人默默地走着。不知拐过了几个小道,穿过了多少街区,终于到了热闹的大道。
“啊,太好了!”
从昏暗的小路出来,正当悠法东张西望的时候,一直没说话的帕加终于开口了。
“东张西望的,小心又跟丢了。”
像被钉子刺到一样,悠法小声回答“是”。
在大路上走着,悠法注意道路上的人都躲开帕加。拿着棍棒追悠法的男人也是这样的,看到帕加马上就逃到不知道哪里去了。
就算不逃,也远远地用嫌恶的实现看着他,好像看到什么不吉利的东西一样。就算这样,也绝对不跟他对视。
“帕加叔叔……”
总觉得帕加很可怜。悠法抬起头看着他。
“别在乎周围的人。他们只是看我而已,没什么。”
帕加面无表情地说,无视他人的视线和沉重的气氛,至少看上去如此。
现在像帕加这样,从外表一眼就能看出来是魔族,并拥有特殊能力的人越来越少了。因为经过了漫长的岁月,血统变得稀薄了。但是在人们对魔族的恐惧完全消失之前,隐藏魔族血统生活着的人也为数不少。
“到底是为什么呢?”
似乎是遇到了自己还无法理解的事情,悠法咬着嘴唇。
“啊!找到了找到了”
冷清大街上想起了明亮的声音。
“来了吗,那个混蛋。”
朝着声音的来源瞥了一眼,帕加咬牙切齿地说道。悠法转过头,看到了一个朝这边跑过来的人影。
“爸爸!”
跑过来的正是飞龙。

今天更新了Waki-Blog!

今天小小更新了一下Waki-Blog,主要有以下几个方面:
1.修改了一下数据库结构,blog表增加一个字段cmds,记录该条Blog的评论数。
2.修改了Blog阅读页面的数据库查询,如果没有评论/Trackback的话,就不查询数据库,阅读既没有TB也没有评论的Blog的时候,可以节省两次数据库查询和两次循环。在某种意义上解决了Blog阅读页面的数据库查询稍多的情况。当然,如果有TB/评论,该查的还是得查= =||
3.增加了删除评论的功能。现在删除评论不用再跑到phpMyAdmin里面了~HOHO~网页的中的JavaScript借用了Z-Blog中的代码。这里感谢一下~HOHO

图像压缩原理基础 连载2 运动图像压缩基础(1)

* 本文(包含其插图)严禁转载,并且不会同意您的转载请求。如有需要引用或介绍本文,您可以提供本文的连接。

本节将抛开具体的编码器与运算原理,讲一讲一些运动图像压缩的基本思想与模型。
(1)运动图像压缩的可能性
信息(这里不仅仅指图像信息)可以被压缩,是因为其中包含着冗余。若将信息(数据)中的冗余去除,即可减少其数据量。
具体到运动图像信息的压缩,则是通过去除其中包含的统计冗余、空间冗余、时间冗余等来实现的压缩。我们经常提到的无损压缩,就是通过去除图像信息中的统计冗余来实现的。但是这样似乎并不够,因为目前对于视频的无损压缩算法只能获得很有限的压缩率。因此,现在多数使用的压缩技术是建立在有损压缩的基础之上的。有损压缩的代价是解压缩信号和原始信号不完全相同。因此,我们进行视频压缩的目的就是,在获得尽量高的压缩效率的同时使失真最小。

(2)视频编码器的模型
压缩是降低数据量的过程。而视频压缩,则是降低数字视频序列数据量的过程。视频压缩包括编码器(encoder)和解码器(decoder)两部分,合称为编解码器(CODEC)。
编码器需要通过某个模型来描述一段视频,这种模型既要兼顾压缩率,也要顾及压缩后的视频质量,使其尽可能地接近压缩前的图像。然而压缩率与质量通常是互相矛盾的:随着压缩率的提升,质量也随之下降。
下面的图示展示了一个典型的视频其编码模型:
Image
典型的编码模型包括三个主要部分,时域模型、频域模型、熵编码器。相邻的帧之间具有较大的相似性,因此未压缩的视频流输入时域模型之后,时域模型通过建立预测帧来降低时域冗余。频域模型输入的是残差图像,利用同一幅图象中相邻像素点的相似性,消除残差图像的频域冗余。熵编码器对运动向量和变换系数进行压缩,消除存在的统计冗余,最后输出用于传输或存储的数据。

预告:简单分析过视频编码器的典型模型之后,我们将逐个讲解时域模型、频域模型、熵编码器的简单原理。
时域模型中具体是如何消除时域冗余的呢?运动估计、运动补偿、1/2插值又是什么呢?请期待下一节时域模型的讲解。

参考资料:
1.《多媒体技术基础》 雷运发主编 中国水利水电出版社 2005年4月出版
2.《H.264和MPEG-4视频压缩——新一代多媒体的视频编码技术》 [英]Iain E.G.Richardson 著 欧阳合、韩军 译 国防科技大学出版社 2004年11月第一版

一段很经典的对话

这是一段发生在上个学期、我和老八之间的对话。
(背景:老八拿着某女同学的某不知名牌MP3听。)
老八:(对我,感叹状)看,这个耳机是苹果的。
我:哈?我看看……这个是假的(不知名MP3会附带苹果的耳机才怪)。
老八:(不服气状)你怎么知道是假的?
我:因为我见过真的。
老八:(无语状)囧……

再次说说Blog的人身安全

上次写了一篇文章叫“Blog的人身安全”。今天月光博客又发表了一篇文章,提到了Trakcback的问题。今天就再次来谈谈我在反SPAM上的一些小招数。

1.首先要做到的,也是最简单能做到的,就是将Trackback地址复杂化。
回顾今年3月份的Donews Trackback SPAM事件,正是因为Donews的Trackback地址采用了连续的ID作为Trackback的URL,所以才会使系统变得易被攻击。(话说Donews现在的TB URL貌似依然是连续ID,比如:http://tb.donews.net/TrackBack.aspx?PostId=930641)
一个方法是在TB URL中加入验证字串,比如tb.php?id=123&auth=78q34f,验证字串的算法可以使用标题或者文章内容的MD5 Hash中的一部分来充当。然而,这样增加了URL的长度和本来不应该有的信息量,似乎并不是最好的办法。那么,我们为什么不连ID一起加密掉呢?
我的做法是采用一个可逆加密算法(目前Waki-Blog使用的是我自己写的z-Enc),加密URL中的ID,Trackback程序收到字符串之后,解密、验证,若合格则继续,不合格则拒绝。同时起到了提高URL复杂度、隐藏ID、验证提交的作用。我的Blog中的TB URL中类似“response.php?tb::0a2MTc%3D”的部分,就是z-Enc编码的结果。
z-Enc的详细说明和源代码都可以在上面的链接中找到,希望能给Blog程序的作者们提供一丁点思路。

2.进行敏感关键词过滤。
为了进一步防止通过人工方式对某个Blog(甚至某个Blog系统)进行某些有“特殊目的”的SPAM,需要对Trackback以及留言评论的内容进行过滤。具体到程序上,就是检查接收到的信息中是否有规定的词汇。再细分,则是检查敏感词汇出现的次数是否超过了规定的次数(即敏感度,或者说宽容度)。如果出现违规的词汇,则予以拒绝。
为什么要采用一个“宽容度”设定呢?请看下面两句话:“Google Earth是Google提供的免费地图服务”、“免费激情小电影 观看免费电影”。同样是“免费”这个词语,出现在正常的句子当中和出现在广告SPAM中的频率是不同的。经过观察,在正常句子中“免费”出现的频率较小,而出现在广告中的时候则很可能大量出现。若没有宽容度,只要出现“免费”就一律杀掉,未免错杀无辜;若不过滤,则很可能漏掉广告。
下面是Waki-Blog的过滤代码:
function bad_word_detect($str){
include_once("./include/badword.php");
//英语垃圾词检查
$message_for_check_en = str_word_count(strtolower(preg_replace('~[^A-Z ]~i', '', $str)),1);
if(count(array_intersect($message_for_check_en,$bad_word_en)) > 0) return true;

//中文垃圾词检查
$message_for_check_cn = str_replace($bad_sign,"",preg_replace('~[A-Za-z0-9 ]~i', '', $str));
for ($i=0;$i<count($bad_word_cn);$i++){
if (substr_count($message_for_check_cn, $bad_word_cn[$i][0]) >= $bad_word_cn[$i][1]) {
return true;
}
}
}
Waki-Blog分别对英文和非英语敏感词汇进行过滤。敏感词汇列表储存在badword.php中,可以随时扩充。
(1)英文关键字过滤:
首先使用正则表达式过滤掉除大小写英文字母外的全部字符。之后使用PHP内建函数strtolower将全部字母转换为小写(防止使用类似pORn的乱序大小写来蒙混过关)。之后用str_word_count来分词,全部词语转换为数组$message_for_check_en,之后用array_intersect求其与$bad_word_en数组的交集,若存在交集,则判断内容中包含敏感词语,函数返回true。
(2)中文关键词过滤:
比起英文关键词过滤,因为中文关键词过滤引入了宽容度问题,所以要稍微复杂一些。
首先将所有的英文字母、0~9的阿拉伯数字、英文符号、中文符号都过滤掉组成纯非英语字符串$message_for_check_cn。之后进入循环,逐个检查每个敏感关键词在字符串中的含量。若发现超过宽容度的出现次数,则立即返回true中止循环。
这种方法虽然有些花费系统资源,但是过滤效果和灵活度方面都好一些。而且,这种方式的应用不仅限于此,如果将某些经常发广告的网站的网址列入敏感字符列表中,将容忍度设置为1(只要出现一次就block),那么敏感字符列表便充当了黑名单的作用。
当然,这种过滤方式当然也存在一些不足。比如无法防止汉字同音字代替,偏旁部首拼字等等的比较极端的办法,但防护一般的SPAM还是足够的。因为语言天生的复杂性,除非使用机器分词、语法语义分析、统计学分析过滤等等的技术,SPAM是没办法从根本上过滤的。然而遗憾的是,目前这些技术本身就不是很成熟,应用在SPAM过滤上就更有难度了。

越高级复杂的过滤与防护只能催生出来更加变本加厉的SPAM办法。在想办法不断对付没完没了的SPAM的同时,为什么不倡导响应中央“文明办网”的号召,让广大网站的发展都“文明”起来,不要SPAM呢?

选修课与旧书

Image
今天在大四学生的书摊上买了两本旧书,《摄影技术教程》和《日本历史》,前者原价¥32,后者原价¥13.8,买的时候一共花了¥15,还是很划算的。
下学期要求修4学分的选修课,我就选了摄影技术(2分)、日本地理(2分)、Linux操作系统(3分)。
《摄影技术教程》正好是下学期上课的教材,而《日本历史》是大三的必修课,所以也顺便买了回来。在大四学生的书摊上经常能买到一些非常超值的二手书。比如前些天买的《幕末新撰組》(池波正太郎,早春文库),定价590円,只花了5块钱就买了回来。

Waki-Blog继续升级

最近对Waki-Blog进行了一些改动。
首先是6月24日增加了Blog的评论功能,主要有以下几个方面:
1.敏感词汇过滤。可以分别指定中、英文关键词,及其宽容度。关键词出现等于或超过宽容度所限制的次数即视为垃圾留言不予接受。
2.记录留言者IP。
3.支持记忆个人信息功能,可选在COOKIE中记录自己的名字、E-mail和URL。
4.留言不解析UBB代码和HTML代码。
5.若留言人留下了网站地址,现实是对其添加nofollow属性,使搜索引擎(主要是Google、MSN、Yahoo!)不对其进行追踪,防止广告目的的链接。

6月25日:
1.增加了Blog的阅读统计,可以统计某篇Blog的阅读次数。并在首页、存档页和Blog浏览页显示浏览次数。
2.是为了加快程序执行速度,首页和存档页只显示文章摘要,并去掉首页和存档页的UBB代码解析,需要进入浏览业才能全文浏览。
3.侧边拦更加细化,将导航栏与订阅栏分开。增加“最新评论”栏,现时最近的10条评论。

6月26日:
1.在评论显示时,取消发表人IP显示。
2.E-mail设定为可选项目。
3.对E-mail地址进行替换,替换掉@和.,防止E-mail地址被收集。

图像压缩原理基础 连载1 JPEG静态图像压缩

从今天开始的《图像压缩原理基础》将会以大约每周一篇的速度,用浅显易懂的语言讲述静态图像以及动态图像压缩的原理。这个系列的文章既是我在向大家讲述视频压缩的基础知识,同时也是我在学习这些知识的“学习笔记”。
* 本文(包含其插图)严禁转载,并且不会同意您的转载请求。如有需要引用或介绍本文,您可以提供本文的连接。

本节以JPEG为例,讲解静态图像压缩的原理。JPEG图像压缩主要分为下面四个过程,离散余弦变换、量化、编码以及组成位数据流。下面通过一个简单的例子说明各步骤的原理。
1.离散余弦变换
(1)通过离散余弦变换(DCT变换,下略),可以将能量集中在矩阵左上角的少数几个系数上。简单地说,我们可以将DCT看作用一个8行8列的二维数组产生另一个8行8列的二维数组的函数。也就是说,把一个数组通过某种变换,变成另一个数组。
首先将一幅图像划分成一个个8*8像素的图像块。比如,原图的尺寸是640*480,那么将会被划分成80行60列的图像块。如果图像只包含灰度,那么每个象素都会用一个8bit的数字表示。因此可以将每个图像块表示成一个8行8列的二维数组,这个数组中每个元素都是0~255的8bit整数。DCT变换就是作用在这个数组上。再看一下彩色的情况。如果图像是彩色的,那么每个象素都可以用24bit、相当于3个8bit的组合来表示。因此可以用3个8行8列的数组来表示这个8*8的图像块。DCT变换作用于每一个数组。
(2)用f表示像素值的数组,f(i,j)表示第i行第j列的值,则DCT变换之后定义一个新的数组F(u,v)表示第u行v列的值。

DCT变换通过下面公式完成:
Image

逆DCT变换公式:
Image

在上面两公式中,当u,v=0时,Image,其他情况下,C(u),C(v)=1。
下面举例说明。下面矩阵表示一个8*8的图像样本的原始数组。
Image

为了便于计算,在进行变换之前先对原始图像中的每个样本数据减去128。然后再按照公式计算出数组中每个元素的值。举F(0,0)的值的计算过程如下:
Image

按照这样,继续计算其他值:
Image

f(i,j)经过DCT变换之后得到了F(i,j),其中F(0,0)是直流系数,称为DC系数,其他的为交流系数,称为AC系数。

2.量化
为了达到压缩的目的,我们需要对经过DCT变换的DCT系数进行量化,目的是减小非0系数的幅度以增加0值系数的数目。在一定的主观保真的前提下,丢掉那些对视觉效果影响不大的数据。量化是压缩过程中造成质量下降的最主要原因。
因为人眼对于亮度的感知能力高于色度,JPEG压缩时使用了两个量化表——色度量化表和亮度量化表。
Image

对于上面的例子,我们使用亮度量化表对其进行量化,得到数组Q(i,j)。量化的公式是:
Image

其中U(i,j)为量化表中第i行j列的值。也就是说,要用数组F中的每一个元素除以量化表中起对应位置的值。按照这个公式,我们对上面例子中的数组F进行量化后得到如下结果Q:
Image

我们很高兴地看到,呃……基本上都变成了0。

3.编码
z形排列:对图像块进行DCT变换后,能量集中在矩阵左上角的少数几个系数上。所以一般左上角的数值比较大,而0则主要集中在矩阵右下角。为了增加连续的0的个数,我们采用z形排列(zigzag),以便更好地压缩数据。这样,我们就能把一个8*8的矩阵转换成一个1*64的矢量。我们将上面经过量化的结果Q进行z形排列,如下所示:
Image

经过z形排列之后,结果变成了:15 0 -2 -1 -1 -1 0 0 -1 0 0 ……后面全部是连续的0,这样一来,连续0的个数变多了。
DC系数编码:8*8图块经过DCT变换后得到的DC系数有两个特点,一个是数值很大,另一个是相邻两个图块之间的DC系数很相近。因此,JPEG采用取DPCM编码对DC系数差进行编码。公式如下:
Image

其中Delta为差值,即差值为当前图块DC系数减去上一个图块的DC系数。
AC系数的编码:经过量化的AC系数的特点是有很多连续的0。所以可以使用非常简单和直观的RLE编码对其进行编码。
霍夫曼编码([size=-1]*注1 注2):在JPEG有损压缩中,使用霍夫曼编码来减少熵(读Shang,1声)。压缩数据符号的时候,霍夫曼编码器对出现频率较高的符号使用较短的代码,对于出现频率较低的符号使用较长的代码,最终使得编码的平均码字最短。

4.组成数据位流
JPEG编码的最后一步为把各种标记代码和编码后的图像组成数据,这样做的目的是为了便于传输、存储和译码器进行译码。

注1:JPEG标准也允许(但是并不要求)使用在数学上优于霍夫曼编码的算术编码。然而,这个特色几乎很少被使用,因为它被专利所涵盖,且它相较于霍夫曼编码在编码和解码上会更慢。使用算术编码一般会让档案更小约 5%。
注2:Huffman编码,除“霍夫曼编码”外,还有“哈夫曼编码”等其他译法存在。

本文参考资料:
《多媒体技术基础》 雷运发主编 中国水利水电出版社 2005年4月出版
中文Wikipedia中关于JPEG的条目:http://zh.wikipedia.org/wiki/JPEG

夏天来了

Image
转眼间,夏天到了——在这里,似乎夏天来得比别的地方都晚。尽管人们早就穿上了短衣短裤,但是潜意识中,期待的那几样夏天的标志,之前还都没来。比如蚊子、雷阵雨、闷热、高温等等。
前些日子说过“连续两周的阴雨刚刚过去”,谁知那只是夏天的开始。不知道是今年气候异常还是怎么的,每天午后这里一定会下雨。哈尔滨的阵雨真厉害,雨来的又急又快,雨点大,乘着风砸在地上能溅起来很高。
昨天晚上睡觉的时候,隐约听到耳边有嗡嗡的声音,这才一下子意识到,啊,原来夏天已经来了。今天早晨,果然发现手上多了一个小小的包,不断发痒。于是拿出上个星期买的花露水喷在上面,感觉立刻好了不少。只是喷了一下花露水而已,房间里面立刻溢满了浓浓的花香。陕西同学开玩笑地说,忍不住想让蚊子多咬我几次,那样就能“常咬常香”了。

廉通猴急了 校园上演抓“代理”闹剧

昨天在校园网上看到了下面这条通知:

关于禁止学生在宿舍内做网络代理的通知
我校的校园宽带网是由联通公司投入大量资金建设而成,运行5年来,为学校的学科建设、教学、科研、管理、对内对外宣传等各项工作和师生的日常生活提供了较好的服务,发挥了巨大的信息交流与传递作用,全校师生员工应按照校园网管理规定进行使用。但是,近期发现有部分学生私自在宿舍内做网络代理,自行吸纳用户,牟取私利,严重违反了校园网络管理规定,对我校网络规范化管理及使用造成极大损害。
为加强对网络的管理,学校决定从下周起对学生宿舍进行大规模检查,对私自做网络代理的学生一经发现,将严格按照《黑龙江大学学生管理规定》的有关条款严肃处理,并罚款1000元。学校鼓励广大学生对此类事件进行揭发检举,如情况属实,对举报人实行500元奖励。
学校希望各学院深入了解学生情况,及时掌握学生动向,在最短的时间内通知到每一位学生,做好学生的思想工作,坚决杜绝此类现象的发生。
黑龙江大学
2006年6月23日

看这篇公告写的,真是太有水平了。义正言辞、恩威并用、赏罚兼施、威逼利诱,一副“大义在我这边,学生们不仁不义,非但不乖乖给我交钱,还翻着花样折腾我‘吃巨资’搭建的校园网”的脸孔。但无论话怎么说、檄文如何写,总之一句话,“你把代理给我拆了”。
这里先不看学生们是否陈凯歌、廉通是否猴急。我们先来看一看黑龙江大学的网络情况:
黑龙江大学本部分A、B、C三个区域,网络中心在B区(A区和C区中间,可以参考上篇Blog中贴的卫星照片)。这里着重讲问题最为严重的C区。
C区的电话、网络全部由廉通垄断。外局的ADSL信号无法到达,学生在宿舍中打电话必须要使用廉通的电话卡。C区为四人宿舍,每间宿舍有两个网络接口,分别到达楼下值班室的机柜内连接HUB。所以学生上网就只有,也必须通过廉通的这条线进行虚拟拨号连接至校园网。
现在看看廉通的资费标准:
套餐A:每月80元/80小时(相当于1元/小时),超过80小时按照1.5元/小时计费。
套版B:1.5元/小时,按时间计费,消费满30小时赠送5小时。
套餐C:80元包月。但仅限于教师住宅区的用户,要求使用身份证和工作证办理帐号。
很明显的抢钱资费,廉通利用其在C区的垄断地位(在B区可以用电话线通过网通ADSL上网。廉通在C区的垄断已经经过了网通和电信的证实。我打电话给网通客服,询问是否可以在C区安装网通ADSL,对方直言不讳“C区被廉通给霸占了”),强破学生接受如此高额的、与网吧相同的资费标准(相对于电信/网通一般80元/包月)。普通学生一般只是在网上聊聊天、浏览一下网页,网络资源被闲置浪费,却要被迫承担昂贵的资费。于是,部分学生想出了数人分摊支付费用,设置代理服务器的方法。这种方式高效地利用了网络资源,并且由于分摊支付费用,降低了每个人所支付的费用,是非常好的办法。但是这样一来,就断了廉通的生财之道,所以廉通当然要猴急。这恐怕是廉通当初吃巨资建设校园网的时候没有想到的吧。
廉通抨击架设代理服务器行为的根本立足点为“牟取私利”,那么我们来分析一下学生们的“私利空间”到底有多少:
按照每月30天、每天6:00~23:00提供服务计算,每月要使用510小时的上网时间,其中480小时的上网时间可通过套餐A来实现(6*80小时),另外30小时通过套餐B来实现(由7名学生分别持自己的学生证至廉通营业厅办理7个帐号)。这样一来在网络费用方面每月成本约为525元(31天/月的月份为550元)。
此外还需计算电费所产生的成本。我们假设代理服务器的功率为350W,同样早6:00~晚11点开机,每月约用电178.5度。宿舍分配给每个宿舍每月20度电免费使用,超过部分要缴电费。假设这20度电中15度用于电灯、随身听、手机充电以及其他用途,那么每月实际需要支付电费的电量为173.5度,按照学校的电价0.45元/度计算为78.07元(31天/月的月份为80.75元)。
这样一来,除去电脑本身的折旧与损耗,每月的成本为603元左右(31天/月的月份为631元左右),按照30元/人来计算,至少要有21人参加代理计划才能收回成本,人数为22人的时候才能开始盈利。扣除了朋友、同学等因为义理人情无法实现收费的人,要做到保持21人的用户是异常困难的。这也是为什么学生搭建的代理服务器大多坚持不果两个月的原因。
依据学生代理用户提供的线索可以了解到,因为学生的代理服务器成本高、生命周期短,教师住宅区内的部分“住户”(教师住宅区内住着谁,不言自明)便举起了代理大旗,每月80元包月,只需吸纳5、6人便可盈利。与学生的代理服务器相比,其竞争力之强、成本之低一眼就能看出。而廉通此次“整治行动”——我们姑且先称之为“整治行动”——却把矛头对准学生宿舍,“决定从下周起对学生宿舍进行大规模检查”,可见其决策的错误与愚蠢。学生在这次事件中,不但受到廉通的剥削,还要受到校方的检查,是双重的受害者。
我在此呼吁,廉通——你不要在错误的道路上越走越远,悬崖勒马,回头是岸,一个企业若只看到眼前小利,不惜作恶来赚取“短钱”,那这个企业终究会在市场竞争中彻底失败。试想——若没有黑大在背后给你撑腰,而与网通、电信进行竞争,你在黑大还活得到今天吗!