从上次找工作大潮结束后就很久没有写一点东西了,其实除了找工作以外还有很多事情应该写写,也值得记录一下,可是总是没有勇气去写,不是担心自己写不好,也不是害怕得罪人或是怎么样,而是害怕自己被愤怒蒙蔽了心智而丧失最基本的判断能力,而按照自己的喜恶去判断出现在我文字中的每一个人,从而给他人或自己带来困扰,所以一直到今天,到现在为止我觉得自己已经能够以冷静的心情来思考这些事情的时候才开始写这一些东西。
我会感谢每一位在我人生中起重要影响的人,@cug信工学院许XX老师,在你之前我还天真的以为学校确实是一个至少相对公平公正的地方,虽然你的大名我在本科的时候就早有耳闻,额好吧,上课收手机、非党员不能当班干部这些事情我也不想多说,毕竟我可以理解这是一个学院要做的政绩工程不是么,好吧既然这件事说了我们就来说道说道吧,大学生上课玩手机是一件挺常见的事情,我想所有经历过的诸位应该都会明白,其中的原因很多我不想多说,对于这个问题我想更重要的不是采用没收手机这种形式吧,事实证明这个有用么?事实证明这样只是作秀而已,一场毫无下限的作秀,秀出的是血淋淋的政绩,秀出了我们一脸蒙逼;好吧这件事情作秀就算了,我不知道选个班干部(我指的是非班长党支书)还需要是个党员,WTF我不太懂,好吧你牛逼,你可以牛到天上去。
这些事情也就算了,我不知道作为一个大学老师,即使是行政老师,为什么能够没有一丝一毫的学术品味和学术了解,好吧我确实要说到奖学金评选的这一件事情了,虽然我对这样的结果已经没有什么好说的了,可是当我发出质疑的时候你是怎么回答我的,我问难道我的SCI还不如人家的EI会议,我记得你跟我说的是“你觉得你的比别人好只是你觉得而已”,好吧我当然觉得我的好,就算这个只是我觉得,可是SCI正刊和会议这两者还需要比较么WTF,好吧你说你没有读过书我能理解,你能当上学院副书记我也能理解,卑鄙者总有出卖气节上位的办法不是么,我说我会去申诉,为我看到公告上说得清清楚楚明明白白,评定后三日内是可以申诉的吧,可是你是怎么做的,你打电话给我导师来压我,好吧我承认这一招很有效,可是你不是很有底气么,你不是TM觉得我连评奖的资格都没有么,你TM不是觉得我的文章不够档次么,那么你让我申诉呀,你给我解释啊!你TM打电话给我导师是什么意思,是你心虚了么。不过也就是两万块钱的奖学金而已,为什么我会如此进行一个人生攻击,这是一个很值得探究的问题,为什么呢?当然钱是一个很重要的方面,对一个月收入只有600的学生来说两万块算得上一笔很大的财富了吧,除此以外是对我人生信念的刺激,虽然不知道是好是坏,不过我总算明白了卑鄙者的通行证是何物不是麽。自从上学开始,我一直努力做一个虽然谈不上高尚却也并不卑鄙的人,在我心中老师至少能够给予学生以正确的引导,可是并没有,好吧我心中从小以来这么多好的老师建立的形象在这里全部毁了,毁的很彻底,好吧,也算是在我即将迈入社会的人生中上了最生动的一堂课。
记得当初给自己的设定的最后期限是十一月之前一定要找到工作,当然对于这个期限当初自己没有什么底气。可能也是因为前一段时间一直收到各个公司的打击太多,一直没有找到合适的工作所以感觉特别沮丧吧。虽然每次都跟自己说一定能够找到工作,可是实际上找工作的时候又会备受打击。数数自己面试的单位,到现在为止已经恐怕不下十家了,跟很多面试官都交流过,也发现了很多问题,当然这些问题主要体现在自己的学习上,也许只有这个时候才能发现自己找工作是不是真的有用吧。在学校的时候大家都在写文章做科研,也不觉得有什么问题有什么不对,可是当实际面临到工作的时候才发现有时候可能我们做的不一定能够有实际的应用或者是别人需要的,那这种情况下我们应该怎么做?我默默的突击数据挖掘,默默地研究CUDA,默默的看看HADOOP,仅仅只是希望在工作的时候突然谈论到这些不会显得茫然和手足无措,就跟乔爷说的一样,在找工作的时候每一个公司都要跪舔。所以经过惨痛的教训之后我们开始正确的认识自己,我们开始正确的定位自己,开始思考到底自己想要的是什么,开始明白不是所有的希望都能够变成现实。
到现在发现以前找不到工作并不是我们不行,而是我们定位太高,对于这一点我觉得自己深有体会,可是向高处仰望不应该是每个人应有的姿态么,不拼搏一波都不知道自己有多菜,这个才是我自己的真实写照吧,然后发现原来自己这么菜之后就开始要试着接受这么菜的自己,开始把目光方平,然后发现原来放平目光之后一切都不是那么高不可攀,发现原来你能够获得的工作都是那么自然,所以信心又开始建立起来,所以虽然雨一直下,但是气氛依旧很融洽,想想每一次痛苦的挣扎之后都是一个全新的开始,所以对之前所遭受的一切也都安然接受了。其实不应该这样的,经历过这么多事情之后也应该早已经明白,风来雨来都是自然,但是雨终究会停,云终究会散,云消雨霁之后一定有明媚的阳光不是么,所以雨中的我们也只需要默默撑开伞。
也许还有同学没有找到工作,也在心急如焚或者已经开始对自己有怀疑了,相信除了真大神,相信在找工作的过程中都会被各种鄙视,不过鄙视也好,拒绝也罢,凡此种种不过是历练而已,很喜欢古人的豪迈风情,喜欢李白的豪放,也喜欢苏轼的豁达,喜欢指点江山激扬文字也喜欢潜入技术的海洋钻研技术,爱看笑脸,也接受批评。将进酒,杯莫停,天生我才必有用,千金散尽还复来。
经历了各种艰难奔波,终于是回家了,昨晚才到,过几天又要离开,在家总是没有什么事情可做,呆在家也很无聊,也不知道应该去做一些什么。老妈总想让我出去溜达溜达,可是我本人并没有这个意愿,家里有点热,但是仿佛也不是那么热,会有一些沉闷的感觉,很久没有回来,家里还是老样子,只是好像家人又变老了。也许在学校里的时候并不觉得,可是现在这种感觉尤为明显了,昨天回家把家里的电脑给弄了一下,估计是系统的问题,网总是连不上,也不太想去连了,反正家里上网基本上使用的是手机和平板,电脑使用得并不多,所以也没有那么上心,不过做的这个启动U盘还是挺好用的。
翻翻抽屉突然看到了高中毕业的毕业证,打开看到那时候青涩的自己不由得笑了,当时自己确实挺嫩的,怪不得没有妹纸能看上我,现在照照镜子看着镜子里的自己,相比之下就沧桑了很多,我说的沧桑固然有年纪的变化,其实更重要的是眼神的变化,那个时候的眼神是那么的清澈,可是现在我看着镜子中的自己,在微小的表情中总是能够看到一些落寞与忧伤,也不知这个忧伤从何而来。也许是看过了生离死别的忧伤,也许是见过悲欢离合的淡然。坐火车的时候我总是喜欢观察车厢里的每一个人,观察他们的眼神,观察他们的神态表情,他们说话的语气还有动作和笑容,有的人沉默,有的人热闹,有的人高声喧哗,有的人低声交谈,有的人一杯杯的就这一些简单的下酒菜喝着不知名的酒,然后看着他连上的皱纹一点点的舒展,然后眼神一点点的迷离,我很好奇为什么会在火车上喝这么多酒,所以我多看了两眼,那人棕褐色的皮肤一看就是饱经风霜,剪着平头,一个军绿色的背包放在行李架上,座位下面放着一个大大的帆布包,我知道他是南下务工的工人,我不太敢去猜测他们的年纪,也许四十,也许只有三十,可是他们一定都有一个家,一个听话或者不听话的孩子,一个贤惠或是不贤惠的妻子,生活的重担全部都压在肩上,所以十几个小时的火车也舍不得买一张卧铺或者无法在互联网抢票如火如荼的今天抢到一张卧铺车票,只能够在这个小小的座位上将就上十个小时。我想也许只有经历过生活风雨的人才能够才这个纷乱嘈杂的车厢内一杯接一杯的喝得下去吧,也许醉了反而是件好事呢,也许醉了反而是一种逃离吧。
曾经看到过一句话叫心安处是吾家,可是何处才是心安处呢,是逃离生活琐事的地方?还是睁眼能够看到亲人的房子,又或者是能够为梦想而奋斗的地方,信念刚过又去了一趟海南,又去了一趟天涯海角,记得第一次去的时候司机跟我们说像我们这样年纪的小伙子小姑娘就不要去天涯海角,天涯海角是那些老人家过来还愿的地方,对于这个说法我竟然是无言以对。作为一个笃信宗教的人,我相信人生短短数十年,而经历的不过是劳苦愁烦,我相信人生如梦唯有心安,因为心安之处便是天涯。
好吧,其实这个过程相对来说比较简单,也没有什么特别需要讲解的,就是在处理的过程中有几个问题需要注意。鉴于好像网上没有特别的教程来讲解这个问题,所以我这里稍微记录一下以免自己以后忘记,同时也是帮助有需要的人。我们的目的是在程序启动的过程中能够弹出一个进度条,同时这个进度条的为止,进度能够由外部函数控制,主要包括:1.设置进度条的范围;2.设置进度条的步长;3.进度条向前走一步。另外需要封装好打开和关闭函数。这样的设计不知道是不是有问题,因为在实际处理过程中一般是将界面显示作为主线程响应,然后数据处理放在分线程中,不过既然提到这个问题还是应该好好解决才对。我们下面详细介绍一下整个构建MFC进度条dll的步骤:首先我们新建一个工程,工程类型为MFC DLL,在DLL类型选项中我们选择MFC扩展DLL,这三个选项好像有一些差别,但是差别具体体现在什么地方我也有点迷糊,网上有大神提到这个问题,但是说的也不是太清楚,我们暂且不管这个问题,就选择这个选项就好了,然后点击完成就生成了一个MFC扩展的DLL。
下面要为这个DLL添加资源,我们需要新建一个对话框,然后在对话框中我们添加一个进度条控件和一个静态文本控件,结果如下图所示:
添加完成之后我们整个资源就添加完毕了,下面就需要给这个对话框添加一个类,这个就跟MFC的应用程序的过程是相同的,我们为这个对话框绑定一个类,然后为控制进度条添加一个进度条变量,到这里我们自动添加的工作就完成了,下面是要手动操作的了,由于是在对话框外部要对对话框中的进度条进行操作,所以我们需要在对话框类中封装一系列操作进度条的函数如下图:
这里封装的函数主要包括对话框销毁函数,设置静态文本变量函数,进度条向前运行函数,设置进度条范围函数,设计进度条位置函数,设置进度条步长函数,一般来说对于一个进度条常用的函数就这些了,下面我们要说说为什么添加一个对话框销毁函数,因为在对话框类定义变量并进行操作的过程中并不支持对话框在外部调用DestoryWindow()函数进行销毁,所以我们需要通过一个接口在内部调用函数关闭这个对话框。那么到目前为止我们已经完成了对话框函数的基本处理和一些操作的封装,下面就是写dll接口,由于是dll所以我们不能把对话框的函数暴露在接口中因此我们重新定义一个接口文件,其中包含初始化,销毁,以及对进度条操作的接口并将其定义为dll导出,实际定义如下:
接口定义好之后我们需要通过这个对整个对话框和进度条进行处理,在这里我纠结了一下,因为如果将对话框定义为在函数中的话,这样就没有办法对对话框进行操作,同样这样有一个好处就是对话框不用手动销毁,但是实际上要求能够在外部对对话框进行操作,所以最后我只能将对话框作为一个全局变量在cpp中定义,但是这样在使用的过程中如果创建了对话框必须先进行销毁,然后才能进行下一次的创建,这样的话就稍微麻烦一点,好了,然后我们在cpp中调用对话框类中封装好的函数就行了,记住首先必须先创建对话框才能对对话框内部的进度条进行处理,同时一个创建必须对应一个输出,下面我们演示一下整个对话框调用结果(由于截动态图比较麻烦,随便截一个图演示一下):
刚从武汉的海洋中逃离出来,还没有晴几天,如今又是一场大雨将武汉拉入了大海的怀抱。不过这一场雨下过之后天气却是凉爽了不少,实验室的师弟师妹们都去实习了,就留我在实验室坚守了,因为老板要搬家,所以也有时间来写这些莫名其妙的东西。
一早上晃晃悠悠什么都没有干时间就过去一半了,所以不得不感叹,时间过得确实有点快呀,现在偶尔回到西区晃晃想起自己刚进大学校园的日子也不得不感慨,那个时候条件要比现在艰苦得多了,可是也有激情得多,总是会想出一些有趣的点子娱乐自己,也娱乐别人,总是有着各种各样的爱好,总是有时间也愿意花时间去练习。现在的自己似乎失去了那么多的激情,总是觉得简单就好,不太愿意去取悦别人,只想安安静静的坐着想想自己的事情,只想简简单单的休息一下,做好自己应该做的。
很多时候我都会很好奇,是不是自己走得太快把灵魂给丢在了后面,在每一个晴天的日子都是义无反顾向前的日子;有时候我会反思是不是自己想做的事情太多而忽略了自己真正喜欢什么?想起以前考研的时候我跟华哥说过的话,其实有些事情我们不用喜欢也能做得很好,有些事情我们从心底里热爱,却有诸多无奈。我喜欢晴天,晴天可以不打伞,晴天可以想去哪儿就去哪儿,晴天可以好好学习,晴天心情也会更加舒畅。我曾经不喜欢下雨,我很烦下雨,下雨让人只能宅居室内,让人心烦意乱,可是后来我渐渐接受了雨天,有时候下雨又何尝不是一件美好的事情呢,雨天让我们可以忘记出门的诱惑,我们能够静静的坐下来思考。
武汉这连续的大雨使得城市多处积水,上次去财大的车都不通了,如果这次下起雨来恐怕更甚,想着过几天就回家去了就有一些兴奋,已经有一段时间没有回去了,这个暑假也应该回去看看了,想想这恐怕是学生时代最后一个暑假了,不奢望能够在家搞学习了,好好在家休息一下陪陪爸妈就很满足了,作为一只工科狗我很愿意用理性的思维去思考这个世界,去看待人们之间的感情,去思考思维的过程和方式,可是这个世界的并不总是理性的,我们看待问题的方式总是受我们所在环境,受到我们心情的影响,所以我们在匆忙状态下作出的选择与决定总可能不太对。
这一段时间下棋,总是会范一些很早就有的毛病,那就是总是太极端,每次总想杀棋,然后拼尽全力去杀,最后棋没有杀死自己反而一点都没有得到,每次落子总是特别的匆忙,总是凭着感觉下而不是凭借着理性的思考和判断。可能是总是由于在网络上对局,所以不能有时间好好思考下出比较高质量的对局。我想这就是我们现在的状态吧,总是凭着感觉往前走而不是理性的思考,也许雨天正是上天留给我思考的时间吧,每一段匆忙的日子过后总需要一些闲暇的时光去回回顾前一段的日子,去选择后一段的日子。
今天在百度上看到了一篇评论特斯拉,准确的来说是黑特斯拉的文章,对此我表示十分的不理解,特斯拉确实出了问题不假,但是不能否认特斯拉是先驱,当然出了事故我们首先需要分析的事情,而不是上来就责怪自动驾驶,作为一个正在默默搞机器学习的硕士狗我表示十分的愤慨。理性的分析,特斯拉所有自动驾驶程序运行了多少公里,曾出过多少事故,相对于驾驶员驾驶来说这个事故比例如何,我们首先需要分析,如果自动驾驶出现事故的比例远远高于人工驾驶,我们有理由相信这个技术目前还不成熟;另外我们得分析事故出生的原因,难道我停在路边被人撞了事故的责任方也在我?如果对方酒驾神智不清了,那责任方也要归咎于自动驾驶,因为自动驾驶不能自动判断酒驾的驾驶员的行为?
对于什么电池的技术,什么车辆制造的技术,对于这个东西说句实话我不懂,我也不知道好坏在哪里,但是对于人工智能,对于机器学习的东西我还是略懂一点点,我认为在大多数情况下算法计算得到的结果是远远要强于人判断的结果,这个是毋庸置疑的。对于这个问题有疑问的人可以自行阿尔法狗,从曾经的深蓝到如今的阿尔法狗,事实证明人工只能按照目前的发展状况,远远不止做简单的运算和判断,即使是复杂的逻辑处理,合理的推断,甚至是创造性的组合创新也是能做到的。关于这个问题,我想很多人(包括李开复)都被阿尔法狗狠狠地甩了一巴掌,说好的电脑在围棋上战胜人类还需要至少十年呢?这十年真的被狗吃了么,我们认为合适的学习方法和足够的样本能够给予人工智能有无限的可能,我是一个技术乐观论者,所以我对机器学习和人工智能的发展呈现出乐观的态势。
上面一段举了一个小栗子说明人工智能用于车辆驾驶,也就是我们所说的自动驾驶的可行性,下面我们分析一下相比于人工驾驶自动驾驶的优势在哪,首先自动驾驶具有稳定性,一个自动驾驶系统,理论上来说在保持运行的状态之下就是稳定的,当然即使存在突发状况我想比例也应该是极低的;而人工驾驶呢就存在诸多的不稳定性,如驾驶员的心里状况,驾驶员的生理状况(疲劳情况,酒驾情况),驾驶员的情绪等各种因素的影像,导致即使同一个人对于同一状况,在不同时间出现的判断也可能出现差异,而这样的差异就导致了人工驾驶的不可预测性,我想这应该就是很多事故发生的主要原因。从这一个角度来说相比于人工驾驶自动驾驶是有其独特优势的,另外自动驾驶的整体学习性能,相比于一个人从新手到老司机这一个过程,自动驾驶是从老司机到大神的过程,每一个人都要经历从新手到老司机这个过程,而这个过程恰恰是事故频发的阶段,因为我们也需要学习,需要了解如何处理各种突发情况,而自动驾驶的连贯性和其超强的学习能力则可以大大避免这个问题。综上我认为即使特斯拉的自动驾驶系统真的出现了问题,我们也不应该去批判去否定这迈出一步的正确性和伟大意义并上升到否定这家公司的地步。
说到这里好像和我的主题并没有什么关系,其实并不是这样的,在每一个时期,在每一次变革和创新的过程中都有几个先行者和殉道者,当然这个殉道者并不是指经历车祸的可怜的人们,而是假设因此而倒下的特斯拉,我为死者默哀,可是这并不是阻挡我们进步的理由。这个世界看到了光明便不会停下追求光明的脚步,每一个先驱都是值得尊敬的,而我有幸生在这个技术先驱辈出的时代,我想我是一个幸运的人,我想我应该看到这个时代,而不是否定它,恶意攻击与中伤它。
很久很久以前,大家就在说百度如何如何不好,后来被爆出出现竞价排名,后来又又贴吧各种竞价吧主事件,后来又被爆出魏则西事件,这些通通都是百度的丑闻,可是对我来说这些都没有什么影响,毕竟我还并不是真的百度这些丑闻的受害者。相反那时的我还认为百度虽然有错但是罪不至死,企业逐利本来也就是这么回事,然后就像他们说的:
“起初,他们追杀共产主义者,我不是共产主义者,我不说话;
接着,他们追杀犹太人,我不是犹太人,我不说话;
后来,他们追杀工会成员,我不是工会成员,我不说话;
此后,他们追杀天主教徒,我是新教徒,我不说话;
最后,他们奔我而来,再也没有人站出来为我说话了。”
我想说起初他们做竞价排名,我并不看广告,我不说话;接着他们买贴吧,我不是贴吧吧主,我不说话;后来他们卖假药,我不去网上就医,我不说话;最后他们奔我而来,再也没有人站出来为我说话了。可是今天我不得不说话,从前百度一切的龌蹉我都不谈,只想简单的就我这次百度云盘帐号事件谈谈。
不知道怎么突然就被盗号了,其实想想自己网盘里面似乎也没有什么值得别人盗号的东西吧,不过就是一些自己的的照片,一些照片而已何必这样大动干戈呢!可是事情就偏偏发生了,关于这一点我无话可说,被盗号这样的事情也是常有的,可是接下来的事情就让我有些蒙了,我马上进行了帐号申诉,申诉后提示向我的邮箱发了验证码,我仔细看了邮箱的地址,似乎并没有问题,可是我反复刷新收件箱,却没有收到发来的验证码,到此为止我就开始有些不理解了,我的云盘帐号是没有绑定手机号码的,而是我绑定了一个我使用多年的邮箱,想必也是没有问题的,可是事实是不仅出问题了,还出大问题了,百度提示的验证码一直发不过来是怎么回事!
后来我只好去做人工申诉,可是人工申诉更奇怪,让我回答的问题是我的帐号是哪一年哪一月在什么地方申请的,WTF!!我一个用了四五年的帐号我还能记得是在哪里在几月申请的,好吧,为了自己上千张照片也只好默默的根据记忆填了一个大概,然后我到网上去看看是不是有同是天涯沦落人的朋友们也曾遇到过这些问题,不查不知道,一查吓一跳,原来很多网友们都遇到这样的问题,然后很多关于此类问题的解决方法都在贴吧上被删除了,我很好奇人家到底是说了什么需要闹到要删人家帖子的地步,就是说了你百度几句不好的话,吐槽了一下你们的服务么?
记得第一次接触到搜索引擎是在读小学五年级左右,那个时候谷歌,雅虎等搜索引擎还算业内比较大的,后来后来,后来百度出现了,也一直做的不错,起码在中文搜索这一块不得不说百度做的挺好的,可是随着百度渐渐独占市场之后问题就渐渐出现了,出现在百度上的广告越来越多,你们不是一家做技术的公司么?为何像一个贴满牛皮癣广告的电线杆一样,让人厌恶。有道是上帝欲使其灭亡,必先使其疯狂,所以百度疯狂了是么,疯狂的敛财,越来越明目张胆的收费,竞价,至用户的体验于不顾。我曾经也是相信过百度的,我也曾认为虽然有些弊病可是瑕不掩瑜,可是事实证明果然是我图样图森破。一旦人变得贪婪,变得失去梦想,失去危机意识只想靠着垄断去做着发财的梦,那它就再也回不来了,曾经的IBM如此,百度也是如此……
看到网上很多大牛的槽点,也许我的这个真的是并没有什么作用,可是作为一个用户,我想说其实我的要求并没有那么多,仅仅是做到简单好用就行。作为半个程序猿,我想说这个要求确实不简单,可是也不见得有多难,站在用户的立场去考虑,百度不应该这么差,虽然我的白度云被盗号只是一件小事,我的几千张照片也不是那么重要,我也不想对百度落井下石,可是我想说作为一个用户我真的真的已经对百度渐渐失望到绝望了,所以纵使艰难,我也不会在使用了,此番分别,愿你越做越好。
上期我们讲到了地下怪物的打法,下面我们讲讲饥荒巨型触手怪,巨型触手怪算是饥荒中比较大的一种怪物了,一般在巨型2触手怪洞中可以找到,我们可以给一张图:
在上图的触手怪洞穴中可以找到巨型触手怪,其实这个大怪看起来很恐怖事实上血很少,也没有什么攻击力,最大的问题在于这个怪物会召唤小触手来围殴你,所以打的时候也是比较麻烦的一件事情,当然咯,实话说如果不是做这个主题的攻略我也不会打它,感觉没有什么太大意义。好了下面讲讲具体打法,主要是通过收买岩石龙虾来打它,收买四五个岩石龙虾就足够扫清那些小触手了,然后冲上去对着巨型触手一顿胖揍,这个时候巨型触手就会召唤小触手,这个时候赶快跑开,不然会被小触手打得很惨。跑开之后就等待这石头龙虾消灭那些小触手就好了,说到这里,似乎打矩形触手很好玩一样,实际上并没有,消灭巨型触手是一件很危险的事情,而且消灭巨型触手并不能获取什么好东西,所以总的来说还是不是很建议去打巨型触手怪的。

上面这张图是石头龙虾与巨型触手怪互殴的场景,其实做法很简单,就是收买了石头龙虾之后引诱到触手怪的位置,然后看着石头龙虾被打之后一起上去消灭小触手,而自己只需要带上盔甲与头盔去打大触手就好了,打完之后我就从地洞上去了,总的来说并没有什么特别,主要是抗住压力直接杀大触手。

上周看代码的时候发现自己把机器学习的代码写了个开头,然后就烂尾了,想着既然开了个头,干脆就花一些时间写下去得了,反正是使用OpenCV去做一个封装,想必也没有多难,所以就开始写了。其实关于模式识别和机器学习的东西很早就开始做了,但是总是觉得做的并不太好,所以感觉有点遗憾,也没有能够留下一点什么东西。
总的来说以前主要做的东西是关于MNIST手写数字识别库的一些东西,手写数字识别库是一个用于机器学习的开源库,在机器学习中这个库使用得很广泛,其中包含了60000个训练样本和1000预测样本,这个库的格式很简单,首先是4字节的int型变量,表示样本的个数,然后是两个四字节的变量表示每个手写数字的大小,实际上训练样本是60000个,每个样本影像的大小为28*28,在读取数据头的时候注意,需要字节取反,所以整个读取存在一个字节取反的问题,字节取反的代码如下:
void mnistFile::swapBuffer(char* buf)
{
char temp;
temp = *(buf);
*buf = *(buf+3);
*(buf+3) = temp;
temp = *(buf+1);
*(buf+1) = *(buf+2);
*(buf+2) = temp;
}
由于是通过OpenCV进行机器学习,所以我们最后数据都要转换为OpenCV的Mat格式,实际上在数据构造的时候可以直接讲数据转换为Mat就好了
void CVMachineLearningTrain::CV_GetMnistTrainData(const char* pathMnist, const char* pathLabel, Mat &trianMat, Mat &labelMat)
{
ifstream ifs(pathMnist, ios_base::binary);
char magicNum[4], ccount[4], crows[4], ccols[4];
ifs.read(magicNum, sizeof(magicNum)); ifs.read(ccount, sizeof(ccount));
ifs.read(crows, sizeof(crows)); ifs.read(ccols, sizeof(ccols));
mnistFile tmp;
int count, rows, cols;
tmp.swapBuffer(ccount); tmp.swapBuffer(crows); tmp.swapBuffer(ccols);
memcpy(&count, ccount, sizeof(count));
memcpy(&rows, crows, sizeof(rows));
memcpy(&cols, ccols, sizeof(cols));
ifstream lab_ifs(pathLabel, ios_base::binary);
lab_ifs.read(magicNum, sizeof(char) * 4);
lab_ifs.read(ccount, sizeof(char) * 4);
int intmagicNum, ccountint;
tmp.swapBuffer(magicNum);
tmp.swapBuffer(ccount);
memcpy(&intmagicNum, magicNum, sizeof(magicNum));
memcpy(&ccountint, ccount, sizeof(ccount));
unsigned char* imgData = new unsigned char[rows*cols];
float* imgDataf = new float[rows*cols];
float* label = new float[10];
int num = 0;
double totalNormal = 0;
Mat tmp1(count, rows*cols, CV_32FC1);
Mat labelsMat(count, 10, CV_32FC1);
char tmpLabel;
for (int j = 0; j < count; ++j)
{
ifs.read((char*)imgData, rows * cols);
for (int i = 0; i < rows * cols; ++i)
imgDataf[i]= float(imgData[i])/255.f;
memset(label, 0, sizeof(float) * 10);
lab_ifs.read(&tmpLabel, sizeof(tmpLabel));
int tlabel = tmpLabel;
label[tlabel] = 1.0f;
memcpy(tmp1.data + j*rows*cols*sizeof(float), imgDataf, rows*cols*sizeof(float));
memcpy(labelsMat.data + j*10*sizeof(float), label, 10*sizeof(float));
}
trianMat = tmp1.clone();
labelMat = labelsMat.clone();
float* p = (float*)labelsMat.data;
lab_ifs.close();
ifs.close();
delete[]imgData; imgData = NULL;
delete[]label; label = NULL;
delete[]imgDataf; imgDataf = NULL;
}
获取数据之后保存在Mat之中,从以上代码我们可以看到,实际上我们获取了28*28的数据,一共60000个,组成了一个60000*784的矩阵,而训练结果我们使用一个60000*10的矩阵表示,0-9数字,为哪个数字则一个10维的向量对应的一项为1其他项都为0,对于不同的训练数据类型应该采取不同的转换样式,如果为BP神经网络训练,则Label可以为10维的向量;若训练方式为SVM则结果为1维int类型的结果向量。
则使用OpenCV进行分类的代码为:
void CVMachineLearningTrain::CV_ANN_BP_Train(const char* pathDataset, const char* pathLabelSet, const char* pathNet, DatasetTypes datasetType)
{
Ptr<ANN_MLP> ann = ANN_MLP::create();
int layers[3] = { 28 * 28,15,10 };
Mat_<int> layerSize(1, 3);
memcpy(layerSize.data, layers, sizeof(int) * 3);
ann->setLayerSizes(layerSize);
ann->setActivationFunction(ANN_MLP::SIGMOID_SYM, 1, 1);
ann->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 300, FLT_EPSILON));
ann->setTrainMethod(ANN_MLP::BACKPROP, 0.001);
Mat trainMat, labelMat;
if (datasetType == DATASET_MNIST)
CV_GetMnistTrainData(pathDataset, pathLabelSet, trainMat, labelMat);
Ptr<TrainData> tData = TrainData::create(trainMat, ROW_SAMPLE, labelMat);
printf("BP Netural Network train~ing...\n");
ann->train(tData);
printf("-done\n");
ann->save(pathNet);
}
void CVMachineLearningTrain::CV_SVM_Train(const char* pathDataset,double C ,const char* pathLabelSet, const char* pathSVM, DatasetTypes datasetType)
{
Mat trainData;
Mat labelsMat;
if(datasetType== DATASET_MNIST)
CV_GetMnistTrainData(pathDataset, pathLabelSet, trainData, labelsMat);
float* labelf =(float*)labelsMat.data;
Mat labelsMatAdapter=Mat::zeros(labelsMat.rows, 1, CV_32SC1);
for (int i = 0; i < labelsMat.rows; ++i)
{
int j = 0;
for (j = 0; j < labelsMat.cols; ++j)
{
if (abs(labelf[i*labelsMat.cols +j] - 1) < 0.0001)
break;
}
labelsMatAdapter.at<int>(i, 0) = j;
}
Ptr<TrainData> tData = TrainData::create(trainData, ml::ROW_SAMPLE, labelsMatAdapter);
Ptr<SVM> svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::POLY); //SVM::LINEAR;
svm->setDegree(1);
svm->setGamma(0.3);
svm->setCoef0(1.0);
svm->setNu(1);
svm->setP(0.5);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 10000, 0.01));
svm->setC(C);
printf("SVM train~ing...\n");
svm->train(tData);
printf("-done\n");
svm->save(pathSVM);
///////////////////////////////////////////////////////////
}
void CVMachineLearningTrain::CV_LogisticRegression_Train(const char* pathDataset, const char* pathLabelSet, const char* pathLogisticRegression, DatasetTypes datasetType)
{
Mat trainData;
Mat labelsMat;
if (datasetType == DATASET_MNIST)
CV_GetMnistTrainData(pathDataset, pathLabelSet, trainData, labelsMat);
float* labelf = (float*)labelsMat.data;
Mat labelsMatAdapter = Mat::zeros(labelsMat.rows, 1, CV_32FC1);
for (int i = 0; i < labelsMat.rows; ++i)
{
int j = 0;
for (j = 0; j < labelsMat.cols; ++j)
{
if (abs(labelf[i*labelsMat.cols + j] - 1) < 0.0001)
break;
}
labelsMatAdapter.at<float>(i, 0) = j;
}
float* data = (float*)labelsMatAdapter.data;
Ptr<LogisticRegression> lr1 = LogisticRegression::create();
lr1->setLearningRate(0.001);
lr1->setIterations(10);
lr1->setRegularization(LogisticRegression::REG_L2);
lr1->setTrainMethod(LogisticRegression::BATCH);
lr1->setMiniBatchSize(1);
printf("logistic regression train~ing...\n");
lr1->train(trainData, ROW_SAMPLE, labelsMatAdapter);
printf("-done\n");
lr1->save(pathLogisticRegression);
}
训练得到训练好了的分类库输出到文件中,在进行判别的时候直接从文件中读取训练结果进行判别。
则进行判别的代码比较简单,在这里不进行详细描述,详细代码在Git上可以获取:https://github.com/wuweiFrank/rsProcess/tree/master/rsProcess/machineLearning 关于相关算法的具体描述,以后有时间会陆续进行记录和描述。
标签: 机器学习, BP, logistic regression, OpenCV实现, SVM
前面讲到了下地洞的攻略,下面我们要说说在地洞一层遇到的一些怪物了,地洞一层还是比较简单的,不太容易死的。前提是你有一些装备的话,好了,闲话就不多说了,直接上一些怪物图鉴,最多的几种应该就是蝙蝠,蜘蛛,还有兔子和龙虾了,其中国兔子和龙虾是中立生物,如果身上没有肉兔子就不会打你,龙虾是可以通过石头收买的,所以下地洞的时候最好先准备这几块石头,这样比较方便。
我们先上几张图:


第一张图是我已经探索到的地图的情况,我们看到其实地底世界是挺大的,我应该只打探清楚了一小部分,还有很大一部分没有探明白,第二张图是石虾,我发现石虾有一个很大的特点就是打不死,每次受到攻击石虾就会化身为石头,然后过一会又变成石虾。所以带着石虾当小弟是很好的事情。然后我就看着石虾和蜘蛛女王互殴,自己只要在边上吃瓜就好了。这些是一些比较平常的怪,下面介绍一个地面上看不到的怪——地龙,地龙这个怪就比较有意思,跟地鼠一样躲在洞里,你经过的时候就会伺机上来咬一口,打死地龙可以得到发光浆果,发光浆果除了吃了自己能发光似乎没有发现别的什么作用了。


上面两张图是地龙和触手怪互殴的场景,这个场景看着特别爽是不是,其中还有几个蜘蛛在卖萌,我作为一个围观群众,忠实的记录下了这一次的斗殴事件,结果当然是地龙和触手怪两败俱伤,然后我上去收割了一只地龙,完成了最后的收尾工作。
大家注意一下就可以发现,我头上带的是一顶高礼帽,为什么要带高礼帽呢,因为我拿的武器是暗影剑,暗影剑的攻击力很高,但是缺点同样明显,会降san值,而高礼帽有回san的作用,所以我会带上高礼帽,还有另外一点就是在地洞中同样会降san值,所以带上高礼帽还是有点作用的。当然高礼帽的防御不太够,所以在遇到怪我准备干的时候一定要换上铠甲,换上头盔。好了,由于我对地洞也不是很熟,所以也处于摸索阶段,如果各位已经在地洞探索,那就祝大家好运了。
好了,说了一百次下次写攻略要下地道这次终于下了地道,为什么等了这么长的时间才下地道呢,这里主要因为在下地道的过程中需要做一些准备工作,所以耽搁了一点时间,好吧相信各位玩家能够坚持到现在或多或少也下过几回地洞了,当然我以前也下过几次地洞,但是每次不是san没有了死了,就是被地下的各种怪我干死了,所以提起地洞就有一点点恐惧,因此这次下地洞准备会比较多,首先要准备的是一个矿工帽,矿工帽是一个好东西,可以戴在头上当照明,但是矿工帽需要一个比较少的资源那就是萤火虫,萤火虫智能通过虫网去捉了,为了捉萤火虫还是花了我一番功夫的,捉到萤火虫之后我就下地洞了,可是毕竟萤火虫的寿命是有限的,很快就会消耗完,所以我第一次下地洞的主要目的是采集,采集萤光果,荧光果是制作提灯的必备工具,而提灯是一个十分方便的工具,提灯的主要作用在于拿在手里可以进行照明,同时还可以放在地上进行照明,是一个不可多得的神器,当然咯,提灯与矿工帽各有优劣,不管大家喜欢哪一个,反正好好准备这些东西下地洞总是没有差的。
此外还有一个东西是挺重要的,那就是吃的东西和治疗药膏,至于其他的东西可以适量的带一些,我一般会带上一个盔甲,一把武器,然后带上几块石头,一些树枝和一些干草,为什么要带这些基本的东西呢,主要是因为提灯有可能没有电了,当然咯我带了两个提灯,但是为了保险起见还是带一些生火的物品,这样安全一点。

这是第一次带上矿工帽下地洞的截图,由于下地洞时间比较紧,所以没有截很多图,从图上我们可以看到其实由于准备不太充分,所以带了很多乱七八糟的物品,以至于后来有东西没有办法捡。
下面是从洞穴中顺上来的好东西:



上面第一张图是一个兔子窝,兔子窝很好做就是要兔子毛,兔子毛只能到地下通过杀兔子,获取锤兔子窝获取到了,实际上我锤了几个兔子窝,然后搞到了一些兔子毛,建了第一个兔子巢穴,但是我认为兔子还是不如猪人好,兔子会攻击自己,如果你身上带了肉的话,我就是这样被兔子打死过一次,说起来都是类,另外下了洞穴之后还获取了一些有意思的东西,比如荧光果,提灯等等。
好了第一次下地洞就介绍到这里,下次介绍一下洞穴中的怪怪物以及其打法,敬请期待~~
曲率驱动扩散模型的影像修复
数学基础
基于TV模型影像修复的局限性
在TV模型1中,扩散强度只取决于对比度或等照度线的强度,在表达式中表现为:
根据上式2,扩散强度并不取决于等照线的集合信息,对于一个曲面,其几何形状通过一个标量,曲率来描述,对于文章3中图2TV模型失效的原因在于,在四个交点,其曲率为相反门根据心理学校正在图中的校正结果,所有等照度线应该被处理的尽可能伸展和平整,因此曲率应该尽可能的小才对。
曲率扩散校正模型的数学基础
正是由于基于全局变差模型的校正方法存在以上问题,因此需要对模型进行改进将原始TV模型求的方法:
修改为:
其中是一个去除曲率极大值,稳定曲率极小值的函数,通过此函数,在曲率具有较大值的时候有比较强的扩散作用。因此对于文章图2中所示模型,能够更好的符合人类感知。在文章中函数为:
而在点上的曲率为等照线的量化曲率方向通过如下公式获取:
因此CDD模型为:
则求解时间进行的方程,初始值满足:则曲率驱动的扩散场流为:
在大多数情况下原始影像是存在噪声的,因此如果直接使用公式(7)进行修复,则对噪声比较敏感,文章提出了两种方式解决噪声的问题:
1.在使用CDD模型进行修复之前,先进行去噪处理;
2.在实用CDD模型的过程中进行去噪,对于此过程分为两个自然阶段,在修复区域内部使用公式(7)所示的CDD影像修复模型,而在正常的区域采用如下模型:
数值解法
同样是以公式(7)为例,其数值解法为:
则
- Shen J, Chan T F. Mathematical models for local nontexture inpaintings[J]. SIAM Journal on Applied Mathematics, 2002, 62(3): 1019-1043. ↩
- http://wuwei-cug.blogspot.com/2016/05/tv.html ↩
- Chan T F, Shen J. Nontexture inpainting by curvature-driven diffusions[J]. Journal of Visual Communication and Image Representation, 2001, 12(4): 436-449. ↩
记得曾经写过一篇关于EM算法的博客,在新浪博客上,不知道是因为是没有仔细学习还是别的什么原因,突然发现自己又不太理解这个算法了,所以在这里又详细进行了一番思考和记录。
准备知识
1.贝叶斯公式:
相信学过统计的同学们对这个公式都不会陌生,贝叶斯公式是表示在确定事件A发生的条件下事件B发生的概率,因而我们将此概率称为最大后验概率,公式表示为:
其中为事件A出现的先验概率,为在B发生的条件下A发生的概率。
2.高斯分布:
高斯分布相对来说比较简单也比较熟悉,高斯分布主要有两个参数,1.确定高斯分布位置的参数,2.确定高斯分布离散度的参数, 这两个参数确定了之后高斯分布也就确定了,高斯分布的标准形式为:
高斯分布的主要特征为:
1.集中性,正态分布的高峰位于正中央,即均数所在的位置;
2,对称性:正态曲线以均数为中心,左右对称,曲线两端永远不与横轴相交。
3,均匀变动性:正态曲线由均数所在处开始,分别向左右两侧逐渐均匀下降。
4,正态分布有两个参数,即期望和标准差,可记作:期望决定正态曲线的中心位置,标准差决定正态曲线的陡峭或扁平程度。越小,曲线越陡峭;越大,曲线越扁平。
3.相对熵:
相对熵又称KL散度,相对熵是两个概率分布非对称性的度量。设和为随机变量的两个不同的分布密度,则他们的相对熵定义为:
相对熵的性质有:1.相对熵是不对称的;2.相对熵不满足三角距离公式。
EM算法介绍
EM算法是一种经典的最大似然算法,主要用于解决样本数目不足或似然函数中含有参数的方法,从有限的样本数据中准确求取模型的参数是EM算法的主要目的。
现在给定训练样本样本间相互独立,现在假设样本都来自同一个高斯分布,则我们要找到高斯分布的参数使得取出这些样本的概率最大,则可以表示为:
对于上式求解极大值,由于对于累乘的求解比较困难,取对数化为累加,然后对于求偏导等于0,求解出最优参数,上面描述的问题是一个简单的高斯分布的参数求取问题,而实际上我们面临的问题要复杂得多,我们假设从一个高斯混合模型中取得了样本样本相互独立但是我们不知道取出的样本属于哪个高斯分布,那么现在我们的问题是根据这些样本估计各个高斯分布的参数。
首先如果我们知道哪些样本属于同一高斯分布,则我们就可以通过这些样本求取各个高斯分布的参数,另外,如果我们知道各个高斯分布的参数,那么我们就可以通过高斯分布的参数确定各个样本的归属。也就是说高斯分布的参数和各个样本的归属类别其实是相互影响的。对于这样的情况就比较适用EM方法进行求解了。(什么你跟我说这个跟K均值算法很相似,好吧确实有点相似,我们等一下会分析他们之间的联系和区别的)
对于上面那个混合高斯模型的问题,实际上在各个变量中隐藏了一个参数就是各个变量的归属,我们假设这个参数为,则公式(4)的最大似然估计可以被描述为:
相信在看过了上面的解释后大家对这个变量的出现就不以为然了。现在我们所要做的就是对公式(5)进行求解,但是由于有着隐藏变量的存在,求解比较困难,所以我们想呀,如果确定了,那就跟最大似然是一样的了,好了这里我们留一个悬念,下面直接进入EM环节,在EM算法中分为两个步骤:E步骤,建立函数的下界,M步骤,对函数的下界进行优化,这两个步骤看起来比较抽象,下面我们将进入具体的公式环节,
对于每一个给定的样本我们假设为隐藏变量的分布,满足:。这个跟的表示相关。
则对于公式(5)我们对公式进行变形得:
好了我们可以看到,公式(5)和公式(6)比较起来只是乘了一个,可是依旧没有什么帮助,但是最重要的部分为公式(6)的等式可以转换为
由(6)到(7)的变换为Jensen不等式,这个不等式可以参考:http://www.cnblogs.com/jerrylead/archive/2011/04/06/2006936.html
好了根据以上推导我们可疑总结一下EM算法流程了:
E步骤:根据参数的初始值或上一次迭代结果记为:,通过迭代结果来求解一个分布使得最大化;
q(z)\theta\theta^{n+1}l(q,\theta)$
EM算法与K-Means算法的区别:
其实EM算法和k均值算法很类似,都是分配然后调整的过程,只是在k均值算法过程中采用的调整策略是距离策略,而EM算法采用的调整策略是概率策略,当然,对于正太分布的对象来说他们之间的区别在这里,而对于EM算法来说它是一种广义的调整算法,类别可以为各种分布形式而不仅仅局限于高斯分布。
基函数的字典为:
常用的基函数文Gabor基,LoG(高斯拉普拉斯基)和其他小波基函数,假设有表示基函数的平移,旋转和尺度变化,为正交转换空间,然后我们获取影像基的数据集
则根据影像基元的影像成像模型可以表示为:
在公式(1)是基的数目,是第个基元的系数。由于是过完备的字典,变量集可以唯一标识一个基所有的隐藏变量通过一个基础映射表现:
在影像编码的过程中,我们认为影像基是独立同分布的,位置,分辨率,方向都假设是均匀分布:
其中可以选择为拉普拉斯分布或两个标准差接近于0高斯混合的分布,对于任何
由于具有很高的丰度,因此的具体形式并不是很重要,在以上影像模型中,影像映射包括隐含变量和字典的参数。
在特征空间的K均值聚类
在区分方法中,基函数可以被认为是滤波器,通过对滤波器进行旋转和尺度变换可以获取一系列的滤波器则对于在位置指示滤波响应为:
与上一个模型相比,此模型为影像的确定性的转换,如果影像结构具有重复的特征,则我们有理由相信可以以聚类的形式得到,通过K均值聚类的方法可以得到纹理单元。聚类中心可以被视为从特征向量到影像标识转换的伪逆矩阵,则令是聚类中心,则影像标识可以通过最小二乘得到:

上图为k均值聚类方法得到的纹理单元的结果。
对于以上两种方法有两个结论,首先以上两种方法的基础不同,在影像生成方法中影像可以通过确定的方程生成,通过一些基向量求和得到。另外此两种方法都会面临一个问题,同一个影像结构平移、旋转和尺度变化会有多个结构,这是由于在分割影像快的时候都是以固定的位置和方向进行分割的。
根据点击量来看还是饥荒攻略比较受欢迎呀,既然这样那我就咬咬牙再更新一篇攻略吧!我们知道在饥荒中除了一些常见的物品以外还有许许多度的魔法装备比如冰魔杖,火魔杖等,除了这些呢还有一些比如暗夜灯,暗影剑等,当然,使用这些魔法装备是要耗费san值的,当然在后期我们制作一个高礼帽是可以回复san值的,所以也不需要太担心san值的问题。
但是呢,这些魔法装备的制造是一个很麻烦的事情,起码对于许多新手玩家来说是一件比较麻烦的事情,其实别的资源都比较好获取,但是制作魔法装备有一个必备的资源,那就是噩梦燃料,噩梦燃料的获取想必对于所有新手玩家来说都是一个很头疼的问题,为什么呢!因为噩梦燃料获取的几种方式都是有损san值的,总的来说噩梦燃料的获取有以下几种方式:1.在san值很低的时候会出现噩梦怪,相信很多新手玩家都是被噩梦怪杀死的,所以对于噩梦怪有阴影了。2.在san值很低的时候兔子会变成黑色的兔子,此时杀死黑色的兔子会获取噩梦燃料,当然此时如果san值不够低,则会变成怪物肉,这种方法挺不划算的,兔子肉还是留着做肉球比较划算;3.采集恶魔之花,每采集一朵恶魔之花会降低五点san值,而每四朵恶魔之花才能合成一个噩梦燃料,所以挺损san值的,不过也没有关系,睡一觉会恢复很多的san值,所以在制作噩梦燃料的时候一个帐篷是必不可少的装备了。
上面介绍了几种制作制作噩梦燃料的方法,下面我们就每一种方法分别讲解一下,首先是揍噩梦怪刷噩梦燃料的方法,这个方法总的来说就是要想办法降低自己的san值,然后等待噩梦怪出现然后往死里揍,就会爆出噩梦燃料,一般快速降低san值的方法就是爬虫洞了,来来回回爬几次san值就低了,揍噩梦怪的方法有一个缺陷,那就是每揍死一个噩梦怪会恢复san值,这样噩梦怪又会消失,这其实挺烦的…..我个人认为捡恶魔之花是最好的方式了,既省时省力有省心,还不浪费资源,所以强烈推荐使用检恶魔之花的方式获取噩梦燃料,当然,如果各位玩家想锤炼自己的刷怪水平去刷刷噩梦怪也是挺好玩的,下面这张图是我带恶魔兔子的截图,为什么步推荐逮恶魔兔子,因为划不来,血泪的教训,划不来,太划不来了,简直是亏大了!!

通过以上说明想必大家都能够获取不少噩梦燃料了,那我们就开始升级魔法了:

上面这张图是造出来的魔杖,这个魔杖的作用是可以通过其反应强度来知道恶魔零件的位置,这是它最大的作用,不过似乎也没有什么太大的作用,反正资源比较多,做一个出来玩玩而已,实际上目前我也用不上所以在这里只是截一个图让各位玩家看一看魔杖长什么样而已。

上面这张图是一个比较重要的东西,在右边,一个高礼帽魔法放大器,通过这个可以制造出很多魔法装备比如冰杖,火杖等,这个东西的制作原理也不是一件多么复杂的事情,主要是要获取一个紫宝石,紫宝石是一个比较难获取的物品,因为紫宝石是通过一个蓝宝石和一个红宝石合成的,而红蓝宝石目前发现只能通过杀死冰狗和火狗得到,且爆出率比较低,所以是一件比较麻烦的事情,当然好像挖墓也可以挖到没有试过,以后可以去挖挖试试。

下面介绍最后一个物品,复活人偶,这个东西好像只有威尔逊能造,因为需要威尔逊的胡子,别的角色好像都没有胡子,复活人偶的作用就是复活一次吧好像,跟复活石的作用应该差不多,不过复活人偶可以放在基地里,这样复活后马上就拥有足够的资源,如果在野外冬天或夏天复活身上又没有豹纹或降温的装备,恐怕就是一个死了。其实我还做出了一个冰杖,这个也不是什么特别的东西,有玩家也能够在游戏中捡到,在这里我就不赘述了,最后提一提,魔法装备的制作过程中我已经捕捉到了萤火虫,随时可以准备下地洞了。
今年的端午特别有意思恰逢高考完,其实高考离我已经很远很远了,很多人的在文章中写到自己的高考恐惧,说自己到了多年之后在高考的时候依然会在晚上做恶梦,好像自己并没没有这样的恐惧,可能是跟自己高中的环境比较宽松有关系吧,很多人在回忆高中的时候恐怕都是满满的奋斗和习题册吧,其实对我来说奋斗和习题并不是全部,由于学校一直离家比较近,,直到高中,特意挑选了一个离家比较远的地方上学好让自己离开家。这对于我来说是一个全新的体验了,总之高中第一次的集体生活还是让我有很多回忆的,同时我想高中的生活对自己的性格也有一个改变和塑造吧。
考完之后估计有很多写高考的文章了吧,高考大过天的也有,说高考只是人生一项选择的也有,说它重要也罢,说它不重要也罢,总之不管什么文章想必都会让各位考生心烦意乱,不知所措!其实作为一个从这个过程中熬过来的人不管他们说什么恐怕都不会作为你们的参考吧。小时候会因为一块糖、一个小玩具变得难过,一点也不愿意让着同龄的小朋友,这时大人会跟我们说让我们让着别人一点。长大了很多朋友会因为成绩的好坏变得郁郁寡欢,这时总有人站出来说成绩并不是最重要的。后来渐渐情窦初开,沉浸在甜蜜或悲伤中无法自拔,这时又会有过来给我们指手划脚,对我们说爱情不过是昙花一现不要沉浸其中。随着自己一点点的成长我们渐渐明白,原来玩具和糖果真的是那么不值一提,原来成绩的作用真的仅仅代表过去在学习上的努力,原来爱情真的没有我们想象中的那么重要,可是谁又能够不经历这些事情就明白了呢!我其实很讨厌突然有人在我们生活中跳出来跟我们说我们在意的这些不重要,我们在意的那些不重要,是呀!如果你垂垂老矣了,时刻不知道能不能见到明天的太阳,所有一切都不重要了!可是没有经历过的人永远也不会明白,没有人能够像圣人一样一出生就明白这一生的一切,那些所谓的过来人也不不过是因为熬过了最初的痛苦而已。
在这里我并没有说过来人给我们的经验不对,他们的经验确实可以给我们作为参考,可是他们并不能替我们去承受,他们所说的我们都会认同,但是我们他们面对我们所经历的事情的时候那种不在意与风淡云轻并不是我们能够装的出来的。曾经作为学校吉他协会的负责人之一,我们也曾举行过许多活动,我也曾见到一位同学在选拔的时候在我们几个负责人面前弹琴时手都在抖,后来慢慢的他能够自信的在各种舞台上参与演出且丝毫看不出他会有过这么青涩的曾经,想我自己第一次上台的时候,恐怕不止手在抖连脚也在抖。我能理解他,我也能在他第一次上台演出的时候告诉他们不要紧张,即使偶尔的出错观众也是很难体会到的,可是这是多次经历之后的淡定和从容,并不是与生俱来的天赋,所以希望所有今年高考的考生不要被别人的文章,想法所左右,你们所经历的一切,不管是难过也好喜悦也罢,你们觉得重要也要不重要也罢,这些都是那些所谓的过来人曾经经过的,不要羡慕,好好体会这些情绪,有一天你也会跟他们一样回首向来萧瑟处,也无风雨也无晴!
这次端午没有回家,一方面是家里没人,另一方面是家里没网,总觉得没有网会缺少些什么,让我这样习惯了在网上挂着的人有点不知所措。不过说句实在话,其实一个人呆在宿舍也是不错的,没有人打扰的情况下会更容易思考,一个人听听音乐,一个人弹弹琴、看看书、一个人写些东西也挺好的,前天晚上去买了几个粽子,味道还不错,就当第二天的中餐吃了,毕竟是端午节怎么能少了粽子呢,其实往年这个时候都应该在大姑家吃粽子的,因为老爸的几个兄弟姊妹估计只有大姑包的粽子最好吃了。可是大姑去年就去世了……
本来端午佳节,不应该说这个,不过一旦提起来就没有不继续下去的理由了,其实生命在上帝看来是多么脆弱,随时可能逝去不是么?昨天翻完了一本鸡汤口水书,总觉的是空洞的说教而已,并没有什么实际的意义,这样的空洞说理的书看得多了可是依然没有什么帮助……我只能说道理毕竟只存在于书上,生活还得自己去经历,最近在看《耶路撒冷三千年》,虽然老外些历史的角度很奇怪,感觉是以一个个历史事件将历史串起来的,不过不管怎么样总是觉得看历史书还是比较有收获的,穿越历史的尘埃看到的是曾经的圣城,看到耶路撒冷在血与火中倒塌,然后又在血与火中重生,看到大卫、看到所罗门,看到尼布甲尼撒,看到希律王,看到那些在历史上叱咤风云的人物一个个站起来,然后又倒下去,看到那些伟大的王国一个个被建立然后又被摧毁,我看到的是时间伟大,同样伟大的还有人们的的信念。
在这里不得不提犹太民族,这个民族的命运如同他们的圣城——耶路撒冷一样经历了无数次的刀剑的蜂鸣,还有血与火的淬炼,然后无数次的摧毁再重建!然而现实的耶稣撒冷可以被摧毁,但是心中的耶鲁撒冷却没有办法被摧毁,总有人以生命为代价点燃那信念传承的圣火,让故事在人们血液中流传,所以才有了犹太民族的信仰——《圣经》因为妈妈是一个基督徒所以我对这本书应该比大多数人都要熟悉吧,曾经我不明白什么一本书会有如此大的力量,可是看到耶鲁撒冷的历史后我明白了,这也许不仅仅是一本书而已,这是一个民族的血脉它记载了这个民族的荣耀、屈辱还有希望,我想这也许就是犹太民族与众不同之处吧,我们华夏民族从一开始有许多记载,我们的历史一直是连贯的我们有着很多文化的传承,而犹太民族不一样,他们经历过太多的摧毁与重建,而他们几千年来所有的历史都被浓缩在了这么一本不算太厚的圣经之中,所以才说这本书是他们移动的国家吧。
好了,趁着端午节放假又更新一篇饥荒攻略吧,话说不知不觉攻略都更新到第五篇了,前面四篇基本讲述的是如何在饥荒游戏中安然度过这么些天的方法,当然如果一直对于出现的怪物都避而不见的话也是可以的,但是这样玩到后期就会出现一些问题,比如在后期猎狗出现的个数会越来越多,同时还会有冰猎狗和火猎狗的出现,其实冰猎狗倒还比较好解决,毕竟冰冻之后解冻就没有事了,但是火猎狗是一个比较麻烦的事情,一不留神就会将家毁于一旦,此外还有树人、蜘蛛女王等一系列的巨人怪会来找我们的麻烦,好吧,鉴于许多新手玩家都没有见过这些巨人怪,所以我会首先上几张图来说明一下这些巨怪:

上图是蜘蛛女王,蜘蛛女王是三级蜘蛛巢穴生出来的,三级蜘蛛巢穴到了一定的时间就会出现蜘蛛女王,女王的特点在于每隔15s可以生出一只蜘蛛,不知道有没有上限,所以绞杀蜘蛛女王的方法为首先消灭其小弟,如果是一只落单的蜘蛛女王,穿上盔甲打就好了,不要给它时间生产小蜘蛛,不然再杀起来会比较麻烦,另外可以带上猪人一起帮忙杀,由于早我的地图上有猪人火炬彩蛋,所以我将蜘蛛女王引到火炬边上的时候守护的猪人就会上去围殴蜘蛛女王,这样的情况下只要在边上看着他们互殴,然后上去收割就好了,杀死蜘蛛女王可以获取一个蜘蛛女王帽,带上这个帽子蜘蛛就不会打你(有没有特别爽!),相对来说蜘蛛女王是比较容易杀的,毕竟女王的血量比较少,容易就打死了。

介绍过蜘蛛女王我们再来介绍一下树人,不知道大家能不能看清,几个猪人在围殴一个树人,树人是有松树生成,桦树也可以生成,但是桦树生成的树人不能移动但是可以生成小的桦树怪特别烦,以后有机会再介绍,首先我们还是来介绍一下上图的树人,树人的特点为:血厚,攻击力高;当然树人也有其缺点,那就是行动缓慢,所以树人也不算难打,带二师兄打树人不太靠谱白白牺牲二师兄而已,上图是在带着二师兄砍树的时候突然出现的树人,树人行动迟缓每两次攻击之间有2s-3s的时间间隔,利用这个时间间隔我们在树人两次攻击的间隙可以攻击树人3-4下,新手建议打三下往后撤。一直循环直到打死树人,树人算是一个比较难打的巨怪,但是也不算太难,因为树人毕竟行动迟缓,只要花时间慢慢打还是能够打死的。

上面这个图是火蜻蜓,是夏天的大BOSS,理论上每个夏天都会出现,饥荒巨人统治冬夏的巨怪都很有特点,火蜻蜓可以点火,通过点火来摧毁建筑,说句实话小编对于巨怪也没有什么很好的手段,上图是通过巨眼炮塔打死的,使用了修改代码,实在打不过,当然如果准备得比较早的话可以制造炸药炸死他。

上图上部为狗牙陷阱,对付突然出现的疯狗有很好的效果,但是狗牙陷阱攻击力不是很高,所以要堆很多才能起到效果,狗牙陷阱也比较容易做,布置好狗牙陷阱后通在疯狗来了之后将疯狗引到狗牙陷阱大阵中就好了。好了由于时间的原因这个号也只玩到了这里,同时为下地洞做准备,估计到下下期我们就会下地洞了,敬请期待!!
上几次讲到了如何在饥荒中最基本的谋生,想必大家都能顺利过冬了,然后春天其实比较好过的,只要有一把雨伞就能安然过完整个春天,下面我们的攻略要讲的是如何顺利过完一整个夏天,顺利玩过冬天的玩家一般都在夏天死像很凄凉,为什么会这样?主要是因为夏天有两个比较难玩的地方,首先夏天温度比较高,就如同冬天会冻死一样,夏天体温身高后会热死,所以我我们随时要想到的是如何降温,有朋友们抱怨说在玩的时候看不到自己的温度,其实小编在刚开始玩的时候也是这样,可是怎么办呢?在这里就要给大家推荐一个MOD,其实我是不建议大家用MOD的会影响游戏平衡,使得游戏失去了应有的乐趣(虽然我在刚开始的时候也是各种希望使用变态MOD来玩,可是还是忍住了@_@,哈哈哈~ing)。好了回到正题,我们今天的主题是在饥荒中如何安然惬意的度过一整个夏天。
这个时候我们就要回顾一下我们教程中关于过冬的攻略了,如果大家严格的按照过冬的攻略游戏的话基本上大家夏天就只有等死了,所以考虑到整个季节的变化,我们需要在夏天到来之前获取如下物件:齿轮:至少两个,金子:至少15块,岩石:一组,硝石:20块。这些东西都是过夏天必备的物品,我们下面来说明一下这些东西:
上面三种物品分别是齿轮,金子和岩石,硝石的图片找不到了……
齿轮有比较大的作用是制作冰箱、灭火器的主要工具,金子不用说,各种物品的制造都可能用到金子。其他两种材料比较常见这里就不加以说明了,齿轮是比较难获取的,墓地中挖墓会有一定的几率掉落齿轮,杀死齿轮怪如炼金术士、齿轮骑士等可以获得齿轮。遇到了千万别放过,有了齿轮我们可以制造灭火器。
我们知道夏天很多东西都会自燃,万一我们的农场或者草场或者其他东西自燃了,那所有的努力可就白费了,所以灭火器是很重要的,另外需要金子和硝石制作冷火焰,冷火焰与石头火堆的作用相同,都是可以照明的,火堆可以在冬天升温,而冷火焰可以在夏天提供降温,在夏天的时候是比较有用的。好了造好了这些东西后我们夏天基本就可以安然度过了,剩下的最主要的问题就在于不断的给灭火器添加燃料了,这个是十分重要的,如果忘记添加燃料到时候自燃了就不太好办了。以上所有必备的东西建造好了之后剩下的就只有获取食物了,还是一样获取大肉,然后种植水果蔬菜。这个时候会比较烦的是离开一小会就会温度升高得很厉害,可以通过打遮阳伞来降低温度升高的速度,但是不能使得温度下降,这个时候当然要在冬天和春天就开始准备,做一块大冰块,在温度实在升高得厉害之后可以顶在头上降温,这样带着冰块就可以去到比较远的地方逛逛了。
下面是我玩的图:

从图上可以看到我已经造好了冷火焰,和灭火器等物品,这个时候春天垮掉的兔子洞又会重新出现兔子,我们又多了一个食物来源那就是吃兔子肉了,好了,本次的饥荒攻略就讲到这里了,希望大家看完之后顺利度过游戏中的春夏秋冬四季。相信大家在做到上面几个工作后很容易的就能够在四季中坚持下来了,以后的章节中我们会慢慢讲解饥荒中各种怪物的打法,尽请期待。
聚餐完毕,喝了一点点酒,脑袋混混沉沉,默默的穿过华科走了回来。回到宿舍就扑倒在床上,默默的翻来覆去,然后慢慢进入了梦乡。可是今天的梦似乎和以前有所不同,今天的梦是那么真实,那么具体,似乎那一都切有具体的触感。慢慢的我就开始习惯,不过是做梦嘛,有什么了不起的,然后我就在梦境中开始闲逛,我看到了云彩,我看到了天空,还有不知名的高山,从未见过的宏伟建筑!
我走在空旷的城市,这儿仿佛一座死城,安静得只有自己的心跳和呼吸,不对呀!我不是在梦中么?怎么会有心跳和呼吸声,赶快醒来,赶快醒来逃离这个梦境,惊恐的我开始大声叫喊,一种莫名得到恐惧涌上心头,为什么这次梦里的一切都是那么清晰,用力的掐了掐自己的脸,居然感觉到了疼痛!不可能呀,这不是梦么,怎么会在梦里也能感觉到疼呢?难道这不是我的梦,恐惧的种植一旦种下就变得不可抑止的生长起来,我开始在这个陌生的位置疯跑,我开始感觉到疲惫,开始不知所措,时间渐减过去了,我开始变得疲惫,可是周围依旧是那些灰蒙蒙的街道,陌生的宏伟建筑,还有远处那不知名的高山和云彩。可是这究竟是怎么回事,为什么为什么我会感觉疼痛,为什么我会疲惫,我坐在街边的椅子上喘着粗气,街上的路灯亮着,似乎已经亮了千年,这个鬼地方没有太阳、没有月亮;没有人烟,也没有时间。我感觉过了好长好长时间,我已经不知道来到这里多久了,也许是一两个小时,也许是一两天也许更长,我脑袋开始变得沉重,变得无法思考。我想我需要睡会了。所以我躺在街边的长椅上睡去了。
过了不知多久,我睁开眼睛,看到自己正躺在一张床上,周围一切都变了,我记得我躺在街边的长椅上的,怎么突然到了这个地方,我起来打量着这周围,只有一张的床和椅子,还有一张简单的书桌,桌上有个关着的笔记本和一个烛台,烛台看起来光亮如新,那似乎是一个日记本,好奇心驱使我走到烛台边上拿起那本日记本,房间没有窗户、也没有灯,可是一切都能够看的清楚,那是一个看起来很精致的本子,黑色的封皮上什么字都没有,我正准备翻开时突然门被打开了!我手一哆嗦,本子掉在地上,进来的是一个姑娘,深色的长发扎成马尾,她的眼睛似乎有种魔力,看得我有些不知所措。
“对不起,我…”我想解释些什么,可是又不知道怎么说,只好保持沉默。
她只是默默的走来捡起地上的本子放进了书桌的屉子。
“我叫L,你好!”她坐在椅子上看着我。
“我叫W,我第一次来到这个地方….”我有很多话想说,可是此时她已经转身在书桌的屉子里找些什么了。我只好把所有的话憋回心里了。我默默的走到床边坐下,L是我在这里见到的第一个活人,我翻遍了记忆的每一个角落哦也不记得曾经认识过这样一个人。
“你是不是有很多问题想问,不要着急,慢慢你就会知道了,我来到这个地方的时间也并不长,这个地方是似乎是一个神秘的梦境。”
“梦境?不可能的,我从来不认识你,你怎么可能出现在我的梦中。更何况这里一切都太真实了,根本不像梦境。”
“这是梦境,只是不是你的梦境,也不是我的梦境,这里就是一个梦境的城市,我们都在这个梦境之中!”她的语气果断而坚决,我也无意反驳,我需要好好消化这些东西。
这一篇是我的第三篇攻略,本攻略主要是告诉大家如何刷猪肉,相信大家在经过上一个攻略之后已经能够顺利的渡过残酷的冬天了,不过天天吃兔子肉想必大家也吃的想吐了,可是大肉还是比较难大的,有时候好不容易打死一个猪人还没有肉,那如何快速的获取大肉呢?下面这个攻略就是饥荒中刷大肉的方法。
想必大家大家也很好奇为什么大家都能够大口吃肉,而自己只能天天逮兔子,而且冬天过去,春天到来之后兔子洞就垮了,毕竟兔子也要繁殖嘛,这个时候逮兔子就不太靠谱了,想吃肉怎么办呢,就只能杀猪了,而杀猪也是一个技术活,如何快速杀猪并获取大肉也并不容易,因为我们辛辛苦苦杀了一只猪后还不一定能够获得大肉。但是饥荒里面有一点就是杀死一个疯猪可以得到两个大肉和一个猪皮。所以我们可以让普通猪变成疯猪,然后干死疯猪就好了。
我们知道喂猪吃四块怪物肉就可以让猪变成疯猪,此时再杀死疯猪就可以得到两块猪肉和一块猪皮,猪皮可以用来建猪房,又可以得到长期猪肉。好了闲话不多说了下面我们来说说如何获取猪肉,首先我们要做的事情是拿我们逮到的兔子肉去收买猪,得到很多猪小弟,这个任务轻松就能够完成,然后我们找到森林里面,里面一般会有很多蜘蛛巢穴,然后我们就去刷蜘蛛,不停地刷蜘蛛得到很多蜘蛛肉,我们看看地图,猪村里面假设有个猪屋,则我们收集个怪物肉,然后去刷猪肉了。

好吧,上面是带猪刷木头的截图,毕竟收买了这么多猪,刷肉是很快的,在刷肉之前还可以充分榨取猪猪们的剩余价值,砍几个木头。
刷疯猪肉有技巧,我们不能够一次单独给一只猪吃四块,而是先给每一头猪一块,这样猪猪们会聚集起来,然后我们再一块一块的给,然后一头猪变成疯猪了其他所有猪就会群起而攻の,这样我们只用在边上看着,然后及时把掉落的肉抢到手就大功告成。就这样一只一只的杀,可以杀死所有的猪得到大肉和猪皮。最后只有一只疯猪了,我们只要穿上木甲拿起长矛,没有别的想法了,干之!!!
本来是想着写一篇论文笔记,可是老板不在,实在是没有心情去写什么论文笔记了,突然想起来自己写过一篇饥荒游戏攻略,既然写了第一篇那就应该好好接下来写一个系列出来吧,由于最近也没有玩得太多,目前的存档在五十多天,对于许多刚开始玩饥荒的新手玩家来说第一个冬天是特别难熬的,主要因为冬天温度低,各种作物都不生长了,难以获得食物,其实冬天并不难过,将基地建在兔子洞附近,冬天就有源源不断的兔子肉可以吃,当然也可以养蜂蜜,吃蜂蜜也是极好的。
闲话不多说,假设看这篇攻略的都是新手玩家,急需熬过第一个冬天,那么恭喜你,这个教程绝对是你过冬的神器。我们在开局选择秋天,白天可以选择长日,这样白天时间会略长一点,对于新手玩家来说要简单许多。好了我们角色还是选择威尔逊,刚开始的时候我们主要目标在于找到适合建基地的位置,当然针对不同的地图可能略有不同,首先收集基础材料,树枝、石头、干草、燧石等材料,就我个人的看法树枝、干草、木头各收集一组;石头和燧石多多益善,除了基础材料之外就是初级食材,初级食材是保命的东西必须要多多收集,主要是浆果和胡萝卜。一般在一边收集基础材料一边收集食物,然后要做的就是开图,开图的攻略有很多我这里也不会详细说明,总之就是到处跑,把整个地图分为几大块搞清楚,然后确定下面几个地方:1.矿区,矿区在开始的时候可以提供金子,这是建造基地必备的东西;2.沙漠地区,沙漠地区会有很多兔子洞,在这个地方建造基地是极好的,当然也可能有牛群,牛群也是一个好东西;3.找到红树林和里面的猪王,挖矿这个事情毕竟不能长久,所以找到猪王可以用肉跟猪王换金子,这个还是挺值得的;4.还有确定一些如森林,墓地,沼泽等地区,这些地方在刚开始的时候不建议进去深探,毕竟比较危险,整个地图会如图所示:

上面是我开对的地图,没有将所有位置都开发出来,不过找到了一些主要的位置,如草原,红树林,森林以及矿区等,这些位置找到了之后该有的资源如:黄金,石块等应该足够了,然后找到一个好地方建基地,还是这样一个原则,在兔子窝边上建造基地,这样能够方便过冬:

从上面两幅图我们可以看到我把基地建立在兔子窝边上,这样可以方便的捉兔子,然后在靠近河岸的地方,在这个地方猎狗不会从四面八方围过来,关于猎狗我在这里要提一句,刚开始猎狗就一两只比较少,带上猪人或者穿上木甲,用长矛就可以干死,到后来猎狗多了最好是种上食人花,这样猎狗就会被食人花打死完全不用担心。
到这个时候应该在6-10天,事件还很充分,然后我们接下来的工作就是移植,我的意见是移植一组干草,一组树枝,一组浆果就足够了,这个工作大概要花费两天的时间,然后我们就要准备造一些必备的设置了,如干燥架,锅等,造这些东西估计也就两天时间,这样我们已经过了15天左右,然后我们去打死几只蜘蛛或者捉到兔子,带上猪人去杀蜘蛛,杀蜘蛛这样的事情是为了得到怪物肉,得到足够的怪物肉之后去猪村刷猪肉,杀死疯猪可以得到两个大肉和一个猪皮,所以杀疯猪比较划得来,一般来说喂猪吃四个怪物肉可以变疯猪,通过这种方法能够获取足够的猪肉和猪皮。得到猪肉和猪皮之后就可以回去建猪屋,这样以后利用猪人防御和杀猪都比较方便。
我开的这个地图运气比较好,有干草彩蛋,但是附近有猪人守卫,不过这也难不倒我,我在边上种了一个蜘蛛卵,这样主任守卫和蜘蛛就会互殴,我只要默默的检肉就好了,然后在适当的时候把干草彩蛋收刮一下,爽到爆!!不过不是所有的地物都有彩蛋的,所以这个是可遇不可求的事情,至于怎么种蜘蛛卵,这个其实很简单,一个三级的蜘蛛巢穴,如果没有编程蜘蛛女王打爆他就有蜘蛛卵了。好了,到了这个时候应该过完一整个冬天是没有问题了。
MAP数学模型
令和分别为输入的辐亮度和传感器的响应,在位置则传感器的成像模型可以表达为:
则公式(1)的向量表示形式为:
假设为正确的影像,为退化影像,则影像修复可以表示为:
则上式的贝叶斯公式表示为:
由于在中是独立的,因此公式(4)可以描述为:
公式(5)中等式右边第一项为:
其中为噪声的协方差矩阵,假设噪声在各个波段是独立的,则为一个对角矩阵,则可以简化为:
其中为对角矩阵。
而公式(5)中等式右边第二项为:
其中是一个常数,是一个影像类别数据集中的一类,则数量是像素的空间测度,通常构成形式为一阶导或者是二阶导,是Huber函数1:
对于,在四个方向上计算二阶导,则有:
将式(7)、(8)代入到公式(5)中有:
假设和方法总纲
基于时序轮廓指数的方法通过匹配相似的时序光谱形状的像素来对位置像素值进行估计,此方法有三个主要的步骤:
1.时序光谱轮廓对准,对准的目的在于确保具有较高的轮廓相似度,且保证区别是由于土地覆盖响应差别引起的;
2.协同使用完整的和修复的轮廓,确保在进行脚哦正过程中有足够多的像素参与估计;
3.使用时序和空间信息解决突变点的模糊性的问题,采用KNN算法进行估计
(1)时序轮廓对准:
假设和为两个像素时序光谱,其中 为时序光谱维数,假设两个光谱只在响应的强度上有差异,响应想去差异为则在比较两个光谱相似性时需要减去强度的差异,比较和,且的计算可以表示为:
(2)使用完整的和未修复的像素时序轮廓:
其方法的有点可以描述为:
假设一个5时相的数据其中有一个时相数据发生了缺失表现为,其中为可观察到数据的模式为不可观察到数据,则对这样的缺失修复有()等,我们将成为完整的轮廓,而在其他位置存在缺失的成为补充不完整轮廓。
(3)模糊性问题:
在对突变区域进行修复的过程中,如果只采用时间光谱轮廓信息则可能存在多种情况,而面对多种可能,求均值显然并不是最好的处理办法,因此考虑空间临近性,给空间临近性比较高的权值进行求解。
使用PBI方法进行缺失像素估计
PBI方法使用KNN的估计方法,KNN的估计方法优点在于操作简单,只使用最近邻的数据进行估计,且是非参数的方法,避免了复杂的参数求解的过程;而使用PBI方法进行缺失像素估计主要分为两个步骤:1.通过KNN方法选择与缺失像素光谱最相似的像素,对这些时序光谱进行分类;2.通过空间的临近性对不同类别的光谱给与不同的权重。
江湖风雨如晦,我自不动如山
侠客情似剑,文人笔如刀。
江湖六千里,有酒醉今朝。
九剑惊天下,武帝城墙高。
举世皆敌手,气运江湖老。
一剑两千甲,两袖青蛇摇。
风流曹官子,气散广陵道。
木剑出江湖,折剑有情长。
天下熙熙来,世人攘攘往。
立地入圣贤,情仇自此消。
江湖风雨近,庙堂心意高。
谁揽天下事,我自任逍遥。
金庸封闭古龙逝,江湖唯有英雄志
前一段时间看了孙晓的《英雄志》,不得不承认,这部小说当时后金庸时代的巅峰之作,文章构思精妙,结构紧凑,细节描写细致入微,同时又有着深刻的内涵。与燕垒生的《天行健》相比,在宏大场面上的描写要稍微逊色一些,然而在人物细节的描写和对武侠内涵的深刻阐述上《英雄志》堪称一流。
小说以明朝英宗为背景,描写了朝堂江湖的纷争,面对当世巨变(改朝换代),所有人都不能置身之外。不管是天下第一宁不凡还是剑神卓凌然;不管是权臣江充还是市井小民卢云。但是每个人都有着其追求和坚持的东西,这种追求和坚持才是侠之根本。
秦仲海那句此生不必跪人是多少人心中的理想!而卢云心中所求唯有正道而已,至于杨肃观,虽成修罗仍不改其道,那就是天道。弱肉强食这就是天道,从他对待吃羊的老虎的态度可以看出来。舍身求道,虽九死亦未悔。所以秦仲海最终战死沙场,杨肃观也难免一死,卢云舍生求道。但是心中所求就一定正确?卢云虽然心怀天下,然而却辜了一直深爱他的顾家小姐和银川公主。杨肃观为达目的可以利用所有人。
有时候不免会思考,到底什么是对什么是错,有的人也许生前风光无限死后却遗臭万年,有的人生前凄凄惨惨,最终落得青史留名,到底有什么值得?这不禁让我想到金庸的封笔大作《鹿鼎记》,韦小宝是一个不折不扣的小人物,没有郭靖黄蓉的侠气,没有令狐冲的豪放,也没有杨过的深情。这样一个人物如何能够称得上是侠,在江湖中,我们都是小人物,每个人都有自己的坚持也有自己的顾忌。有时候牺牲也许并不是伟大,偷生也不一定渺小。
英雄在世,难道就是宁叫我负天下人?难道牺牲身边爱我们的人去为了所谓的天下就是英雄?天行有常,连爱我们的人我们都可以舍弃,那拿什么去爱天下人,江湖太大,天下太广,君且待何如?
喜剧之王
本来想写一篇关于喜剧之王的观后感,可是又觉得怎么也写不出来,网上看了一篇觉得不错,跟大家分享一下,原文地址
寻找一份,能放飞梦想的坚持
文:米新磊
把所有的观察,怀疑,思索,挣扎,愤懑,不平都收束于幕后,沉淀一个老少咸宜的结论,那是喜剧。
一些重而痛的东西爬上脸庞,留下皱纹、沟壑、胡茬,而后一个转身,一副刀枪不入的表情抚平一切,那是喜剧演员。
尽可能放弃思考和敏锐。否则,从不老实归位的面部肌肉某个松弛的瞬间,透露出些微隔靴搔痒的真实,令人浮想联翩甚至悲从中来……
这是有一次在《看电影》扉页上看到的三段话。在这三段有点深刻的话语旁边,是周星驰和吉姆 凯瑞略显深沉的面容。这两位现当今东西方最出色的喜剧演员,演艺经历竟也出奇的相似。
都因为其独特的表演风格受到大众的喜爱。都因为其喜剧演员的身份在前期遭到主流奖项的排斥。而他们都因为自己默默的坚持最终拨开云天。
1998年,吉姆 凯瑞凭借《楚门的世界》一片展露了他隐藏在那张搞怪面孔下的精湛演技,夺得金球奖最佳男主角。
1999年,周星驰自编自导自演了《喜剧之王》。这部真实的喜剧展示了周星驰最让人难忘的真正演技。让无数影迷唏嘘不已感慨万千。
第一次看《喜剧之王》的时候还小,看完后第一感觉好像像鸡肋,食之无味,弃之可惜。现在想想原因,可能正是它不像当时眼中“正统”的周氏喜剧一样让我笑的癫狂吧。某些地方总是感觉笑的不痛不痒难以尽兴。
这便是我对它的第一印象。
第二次看的时候已经隐隐体会出其中的某些不同之处了,扫除了之前先入为主的不好的感觉,让我较为客观的从头到尾审视了一遍,然后得出了一个结论:其实,这是一部正剧。
第三次观影的时候我已经无可救药的陷入其中了。我也在笑,但觉得胸口很堵,有某些东西在心底涌动翻腾就是找不到出口。于是我发现我爱上了这部影片,以后每看一次都不会有丝毫的厌倦,都会有不同的感触,唯一不变的一点是,心中的暗涌依旧。
“努力∼奋斗∼” 尹天仇对着宽广的大海如是说。
“喂,阿姨,什么时候开工啊……”尹天仇对着被戛然挂断了无数次的电话如是说。
“其实呢,我是一个演员” 尹天仇一遍遍的对着每个人如是说。
我相信每个人都曾用一个梦想去鞭策过自己,刚开始仿佛什么都充满了希望,这是梦想的光辉点亮的希望。
可《肖申克的救赎》里的瑞德曾经严厉的警告安迪:“在这个地方,希望是个危险的东西。”
我明白他的意思,希冀绝对无法实现的希望,带来的痛苦会让把生命都吞嗤殆尽。
所以有了越来越多的人开始诅咒希望,他们曾经强烈希冀过的梦想但却变成了泡影。他们的诅咒给越来越多的摇摆不定着带来了不用辛苦坚持的借口,然后他们也加入了这个队伍……不能说他们是失败者,路是自己选的,走什么样的路是每个人的自由。可总会有这样的人,坚定的向梦想挪动,即便步伐小的让人绝望,却义无反顾的固执。比如,尹天仇。
有人说这是周星驰半自传体的作品,只有自身经历过才会有这样真切的感受。
他每天都去剧组跑龙套,即使阿姨对他下了驱逐令也仍然不放弃要找一个小小的角色。
他每天都翻开斯坦尼拉夫斯基的《演员的自我修养》,合上书本后的他显得格外平静。
他每次都会耐心的告诉骂他是“死跑龙套”的人说:“其实我是一个演员。”
他不会对谁发脾气不会对谁大吼大叫不会对谁有丝毫偏颇,好像周围的一切挫折都渺小的不足以关注。
可我可以清楚的看到他内心在挣扎,那种每天的失望带给他的不是麻木而是更大的失望。但灰色的事实却很快被一个坚定的信念还原成出了亮丽的色彩。“我是一个演员”,这个梦想是如此的绚丽如此强大能支持着他一直貌似平静的走下去。
但他很孤独,没有人去了解他丰富隽永的内心,虽然有梦想做伴,但却找不到倾诉的共鸣。一个人的旅途是残缺的,还好有飘飘的出现。
柳飘飘也是个曾经有梦的人,但现实刺痛的回忆让她把这些深深的埋到了最心底。她害怕回忆起来的那种焦灼,所以当第一次尹天仇问到她的初恋时她才会恼羞成怒转身离去。埋在心底的隐痛拿出来接受阳光的曝晒是需要勇气的,还好飘飘并没有像大多数人一样放弃梦想,只是把它藏了起来。当她遇到天仇后,她的梦想开始复苏了。他们不是因为痛苦而在一起寻找慰藉,他们是因为缘分而在一起放飞自己的梦想。
所以当尹天仇大声的对着飘飘喊:“我养你啊!”飘飘在车里无法抑止的泪流满面,这是梦想还原那一刻的悸动。
所以当尹天仇因为娟姐的器重得到男主角的角色时,他不可抑止的欣喜冲刷掉了以往所有的失落。这是梦想实现那一刻的激动。
如果梦想就这么实现,他们之前也就不会经历那么多的挫折了。我心里这样告诉自己,虽然我并不想这样的情景出现。
尹天仇失去了扮演男主角的机会,他死死的抓着剧本,想要紧紧的抓住一些东西。那是梦想的所有载体,咫尺之远,却眼看着要逝去。我终于还是看到了他失落的表情,那是一种根本无法再用平静来掩饰的失落,从来没想过放弃的梦想像外面的雨一样在凋零。
“你还是走吧!”剧组的人员最后还是忍不住说出了这句话。
我不知道周星驰在现实的奋斗过程中遇到过多少次这样的挫折,那种无可奈何的失落表情让我觉得心底都被掏空了一般。
同样的表情,同样的感觉也来自飘飘。看到和自己的偶像娟姐在一起的天仇,看到娟姐呵护关切的话语,她好像明白了些什么。勉强的微微一翘的嘴角,牵动着脸上因为倔强而受到的新伤。她想也许这就是现实吧,也许自己本来就不应该做梦吧!面对着驶远的车子,她自嘲一样的失落的说了一句:“就这样吧!”这句话说出来平静如斯,却承载了多少痛苦和压抑。
那一刻,我突然想,如果这不是一部电影,飘飘是否还会在几乎放弃的最后一刻,突然大喊着问一句:“你上次说养我,是真的吗”。如果不会的话,是不是真的“就这样了”呢?
于是,我也会想,如果这不是一部电影,尹天仇是否还会在那一次的失败之后最终得到了寻觅以久的成功呢?如果不会的话,他还能坚持的走多远呢?
毕竟,这不是现实,有人说现实不会出现这样的结果。
但是,这却无比真实,真实源自于最心底的向往和追寻。
人人心底都期待这样的结局,为什么要在转瞬间因为现实林林总总而败下阵来。
如果连去想的勇气都没有,梦想就真是一个悲哀的词了。
我决定心存感激,因为电影总是把最完整的人生和最美好的结局留给我们去回忆。我决定心存希望,因为尹天仇告诉我即使过程有多艰难也无所谓,携着希望的人总会找到幸福的出口。
在这个旅程中,总会有一个懂你的人,一直陪着你,直到放飞彼此的梦想为止。
TV模型数学理论
TV模型与基于偏微分方程的主要用于修复较小的图像缺失区域和噪声,假设是一个定义在二维平面上的光滑影像函数, 是一个待修复的区域,其区域直径为,令为在区域上的限制,则影像的修复过程可以描述为获取在上的拟合。
如果区域的直径收缩到0,则可以采用线性插值的方法获取任意光滑的测试数据:
同样,影像修复过程可以使用k阶修复方式:
二阶格林公式1影像修复
数学基础
假设表示拉普拉斯算子:在区域上的二阶格林公式为:其中:和为在闭合环上定义的二维函数,n为区域边界上定义的朝外的法向量,为边界的长度。
假设是一个基于在上基于珀松方程的格林函数,格林函数的意义为:处所产生的脉冲对处的场的作用,他是距离的函数,则对于任意一个,作为对应的点则求解为:
则应用格林二阶函数()则讲代入公式(4)中,可以得到:
其中公式(6)中的第一项表示为表示的光滑的扩展。
到公式(6)开始我就开始看看不懂了,简单的来说公式(4)就是格林公式,然后将代入到公式(4)中得到公式(6),但是具体怎么得到的由于数学基础不够没法进行数学证明
为边界与源点关联的和谐程度的度量,而非和谐程度可以表示为且满足泊松方程2:
假设为待修复影像区域的直径是泊松分布的格林函数,则有以下条件成立:
公式(9)的证明有兴趣的可以参看原文3 ,基于上述理论我们可以很简单的建立准确的基于二阶格林公式的影像修复方法:
(a)Linear inpainting via harmonic extension 假设我们只通过和谐扩展修复,则线性修复的表达为:
当时公式(10)成立,根据公式(6)均匀性修复误差正好就是非均匀性组份。由于为固定的光滑函数,因此存在常量使得满足:
对于所有的上式都成立,且对于根据公式(9)则有:
(b)Cubic inpainting via Green’s formula 为了提高影像修复的精度,除了需要对整体结构进行修复外还需要对细节组份进行修复。假设为线性修复的结果,然后我们修复通过根据如下积分方程:
或者通过求解已知的泊松方程:
最后将这些新的细节信息加到均匀性修复过程中,可疑得到更加准确的修复结果
局限性
实际上上述模型在大部分情况下是不适用的,因为:
1.影像通常情况下来说并不是平滑的函数,而是包含各种边界信息和非连续性的
2.影像在统计上也不能完全一致,由于存在影像噪声
全局变差模型的影像修复
模型数学基础

如上图所示,其中为待修复区域,待修复区域具有分段光滑的边界,为待修复边界的外环。假设是被白噪声污染的区域,则基于变差修复模型为在扩展域找到变差函数使得如下规则函数取得最小值:
在以下约束下:
对式(16)(17)求解其欧拉拉格朗日方程为:
其中为拉格朗日乘数子,则剩下的问题为求解这个欧拉拉格朗日方程。
- https://en.wikipedia.org/wiki/Green%27s_function ↩
- https://en.wikipedia.org/wiki/Poisson%27s_equation ↩
- Shen J, Chan T F. Mathematical models for local nontexture inpaintings[J]. SIAM Journal on Applied Mathematics, 2002, 62(3): 1019-1043. ↩
实在是不知道写什么题目了,随便打个题目凑凑数,这一段时间有很多事,又是女朋友离职去深证找工作,又是师兄和晓楠毕业,一连串的事情下来,自己都有些晕头转向了,一想到自己明年就要毕业了,到现在为止毕业论文什么的还没有着落,其实心里还是很着急。总是想着赶快做完了毕设好好找工作,可是到目前为止看了不少文献,可是总是感觉一团糟,不能将文章很好的串联起来,所以显得有些心烦意乱。
也许每一个阶段都有着这一阶段的苦闷和烦恼吧,现在这一段时间让我想到了自己大三下那门通选课被挂了的时候,也跟现在差不多,总之就是很烦恼,总之就是很迷茫,感觉诸事不顺一样。其实相对来说自己还算是幸运的,毕竟在实验室一直学习也不用为生计发愁,目前文章也已经被录用,只等发表了。其实自己应该很感恩了,毕竟一切都是这么顺利。我还能奢望一些什么呢。老妈去韩国进修,总是时不时会晒一些照片,感觉过得挺舒服的,其实有信仰也不是一件坏事,毕竟人总是要有一些敬畏和感恩才好吧,如果把一切都归功于自己,从不感恩或者没有敬畏那才是可怕的吧。有时候觉得自己很奇怪,一方面觉得应该有敬畏和感恩,可是我却很怀疑上帝的存在,其实信仰这个东西是关乎心,在于人的吧。虽然我不相信上帝能主宰我的一切,可是我确实应该感谢上帝,应该学会感恩与敬畏。
闲话说了不少,感觉还是槽点慢慢,就如同心中有一团火在烧,,让自己很难受,难道这也是一个周期性的症状么?在GitHub上一直在维护着的项目也停了下来,不知道应该怎样去维护了,主要是没有心思再去维护,不过还是应该再努努力吧。毕竟维护了这么久也不想就此荒废掉。刘艳去了深圳,或者有可能去广州,其实不管是广州还是深圳,总之在那边估计最好还是做开发的工作了,所以现在还是想学习一下怎么做web端的开发,现在也有一个项目在维护着,还是坚持做下去吧,毕竟多学一种技能总是不会有坏处的。
我觉得自己会有一个毛病,那就是喜欢把所有的事情都放在心理,然后不停的去思考,去发酵,所以显得很沉重,压力很大,看来自己还是心不够宽,体不够胖呀,其实想想自己也不应该有这么大的压力,家里在市区有一栋房子,这就已经让我不应该为什么事情担忧了,不管在外面混得怎么样,总是有家可以回的不是么。还是应该放宽心,不要想的太多,只要能够好好的过自己的一生不就好了么!其实自己也有不少的愿望清单,相信也会一点点慢慢的实现吧。
今天刘艳走了,其实这些是早已商量好的事情,但是今天面临着别离还是会有些不舍的。在这个毕业季,突然有面临着离别,不管多么乐观积极的人总是会有一些忧伤吧。我知道每个人在离开一个生活了多年的城市转而去到一个陌生的城市去闯荡,去生活,总是会有诸多的不舍不过这总是要经历的过程,每个人的生活际遇不同,每个人需要付出的努力和代价也不一样,有的人含着金钥匙出生,一生无忧,可是我们毕竟不是他们,所以我们要付出更多的努力,要忍受这更多的孤独与漂泊,可是这些都不是我们放弃的理由不是么。
虽然有很多理由留下,可是我依然支持你离开,我想每个离开的人需要的不是安慰而是鼓励,我希望你在一个新的环境中依然能够保持坚强,依然能够乐观能够自信,我相信你能够做到。网上的鸡汤文太多,鸡汤喝多了也会太腻,所以我也不喜欢说一些鸡汤文,我知道有些的事情是没法避免的,比如家庭,可是这些并不是我们选择退缩的原因,我想只有我们更加努力的过好自己的生活才会得到更好的生活吧。
希望在一个新的地方能够有一个新的生活,希望你能够做到最好,放心,我有时间就会去看你的,不过我希望我们再见的时候是一个更好的你,这样让我知道你也在努力改变,努力为了自己想要的生活而变得更好。
引言
大部分纹理合成的方法可以通过使用何种纹理类型模型来进行分类,包括反应扩散模型,频率域方法,分形的理论与方法或者是统计和随机场方法。有一些使用混合模型的方法,包括确定性组份方法和随机组份方法。除了上述纹理之外还有扫描图像和手绘图像的纹理特征。本文着重于对随机纹理进行处理,目前对于纹理区分的理论主要基于以下假设:
当两种纹理在在频率和空间域的的频率分布是相同的,则这两种纹理难以区分出来,这个理论是建立在人类纹理感知的基础之上的。
影像金字塔
线性转换代表影像基函数的加权和,因此影像可以表示为:其中表示影像,为基函数,为转换系数,转换系数是通过将信号投影到一系列投影函数中:比如傅立叶转换的基函数为空间频率变化的正弦函数,余弦函数。
影像金字塔也是一个典型的子带转换,影像金字塔的特征是基函数(投影函数)可以通过彼此的基函数的平移和膨胀得到(和膨胀的转换因子为其中为整数)。影像金字塔子带是通过卷积和降采样得到的,对于一系列的降采样因子以增长。
拉普拉斯金字塔
拉普拉斯金字塔的构造主要有两个步骤:1.缩减;2.扩张;缩减操作使用一个因子为2的降采样低通滤波器在各个唯独上进行处理,扩张操作使用一个因子为2的升采样因子,像素点之间的值用0填充。最常见的低通滤波核为:一个完整的金字塔影像层包含两景影像:和高通滤波影像,两景影像通过如下公式计算:其中为原始的输入影像,原始影像可以通过和恢复:
下一层的金字塔也通过对进行同样的操作获取,得到和
方向金字塔
有方向或者是长条型结构的纹理通过拉普拉斯金字塔不能够被探测到,因为拉普拉斯金字塔的基函数是径向对称的,为了合成各向异性的纹理,可以采用方向金字塔转换。方向金字塔和拉普拉斯金字塔一样,都是将影像分解为几个空间频带,另外对于每个空间频带,进一步划分为一系列的方向频带。

上图说明了使用方向金字塔进行纹理分析与合成的过程,左边的范式为分析部分,主要是构造方向金字塔的过程,右边是合成部分,通过纹理合成进行金字塔合成,在两个过程中的圆圈表示影像子带分解。方向金字塔首先通过一个径向对称频率响应的,高通滤波对应于四个方向。每一个连续层的金字塔都由上一层的低通滤波组成,表示的是各个方向的带通滤波器。注意到金字塔影像像素远大于原始影像像素,但是只有低通滤波结果被降采样了,这样做能够在每个子带最小化混淆现象,避免混淆现象很重要,因为基于金字塔的纹理合成方法对每一个子带处理是独立的。
处理过程
直方图匹配
直方图匹配是对两景影像直方图进行匹配获取:(1)一幅影像的累积分布函数;(2)另一幅图像的逆累积分布函数。直方图匹配的处理过程为:
Match-histogram (im1,im2)
im1-cdf = Make-cdf(im1)
im2-cdf = Make-cdf(im2)
inv-im2-cdf = Make-inverse-lookup-table(im2-cdf)
Loop for each pixel do
im1[pixel] =
Lookup(inv-im2-cdf,
Lookup(im1-cdf,im1[pixel]))
纹理匹配
纹理匹配的主要过程是对输入的噪声影像进行修改,使其与输入的纹理图像相似,1.匹配噪声图像的直方图和输入纹理的直方图;2.从修改后的噪声和纹理影像中构造金字塔;3.在两个金字塔数据循环,获取最佳的直方图匹配的金字塔子带;4.进行直方图匹配,生成初步的合成纹理。为了使得像素和金字塔直方图匹配都能够最好的匹配,进行迭代重新匹配影像直方图和子带金字塔直方图。
Match-texture(noise,texture)
Match-Histogram (noise,texture)
analysis-pyr = Make-Pyramid (texture)
Loop for several iterations do
synthesis-pyr = Make-Pyramid (noise)
Loop for a-band in subbands of analysis-pyr
for s-band in subbands of synthesis-pyr
do
Match-Histogram (s-band,a-band)
noise = Collapse-Pyramid (synthesis-pyr)
Match-Histogram (noise,texture)
目前文章1并没有对其收敛性进行证明,但是文章给出经验在处理过程中总是能够收敛,由于滤波器并不是完美的,迭代次数过多会引入重构误差。
除了以上处理以外还包括辩解处理,颜色处理,纹理混合等操作。
结论
局限性
文章2提出的算法还是有着其局限性:1.输入的纹理应该是一个均匀的纹理,如果纹理不均匀,则合成的结果会出现污斑现象;2.算法对于准周期性纹理和随机镶嵌的纹理并不适用;3.对于局部存在方向性,但是不同影像部分方向不同的纹理并不适用;
结论
文章提出了一种纹理合成的方法,其主要的有点在于本文提出的方法十分简单,在处理过程中并不需要理解复杂的纹理结构。
- Heeger D J, Bergen J R. Pyramid-based texture analysis/synthesis[C]// Conference on Computer Graphics and Interactive Techniques. ACM, 1995:229-238. ↩
- Heeger D J, Bergen J R. Pyramid-based texture analysis/synthesis[C]// Conference on Computer Graphics and Interactive Techniques. ACM, 1995:229-238. ↩