photo of the month

London Trip – Two Rolles of Kodak Portra 400

February, 2025
More
简单摄影后期–利用曲线还原细节

相当多的时间,我们照出的照片会有灰蒙蒙的感觉,缺乏足够多的细节。于是,适当的后期,用以还原当时人眼所见的场景,便是一个不错的选择。对于画面色彩亮度的调节,最有效的方法便是利用色阶曲线来调整。 右图是一张下午4点到5点左右,逆光拍摄的小孩。整幅图感觉十分明亮且朦胧。原有的逆光下的温暖的阳光显得过于苍白,于是我们可以通过一些简单的手段来恢复图片的细节,让图片不至于过于苍白。 博主用的是GIMP,一个开源的图片处理软件。如果你不喜欢用盗版软件,又十分希望得到近似Photoshop的功能,GIMP是个不错的选择。Linux和OSX下都有相应地版本。对于一个免费软件来说,算是很有良心的了。 开始修改。在菜单栏中选择:color->curve,就会出现左下图所示的对话框。在图片的背景下可以看到原图的亮度分布直方图。这个直方图的横轴表示亮度值,纵轴表示在这个亮度下,图中共有多少这样的点。图中明显可以看到,大多数像素都处在图片的右侧,因此图片的整体亮度偏高。我们可以通过拖拽,得到如中下图所示的曲线。接着,我们选定图中主体,小正太的选区,并再次进入curve对话框,将曲线调整至右下图所示。        于是完成的图片就会像下图一样: 或者不要这么饱和的:

整合Google Adsense和CSE(Custom Search Engine)

Google Adsense和自定义搜索(CSE, Custom Search Engine)是两项独立的服务。Adsense的主要功能是为站点提供广告内容的发布,并获取相应的点击收益。CSE则是为自己的站点制定专属的搜索引擎。在免费的CSE中,会展示相应的广告和推广,因此,CSE本身不光可以提高站点的易用性,更能为站点带来更多的收入。 整合已有的CSE和Adsense: 在cse的dashboard中,找到Edit search engine >> Setup >> Make money,就可以将Google Adsense的账号和CSE进行关联。关联之后,更新下之前所用的CSE代码,确保两者关联成功。 只有Adsense: 在Adsense的dashboard,找到My ads >> Search,在这里点击New custom search engine,然后按照提示就可以得到自己的Search Engine了。如果需要对CSE本身进行更多的设置,可以选择无视Adsense Dashboard给出的代码,直接去到CSE的dashboard中,获取代码。在CSE获取的代码并不会影响收益,同时获得对CSE更大自由的设置。

新主题包

经过今天一天的努力,终于赶在光棍节结束之前完成了数据迁移,以及新站的部署。新站暂未增加广告,以及侧边栏功能。稍后会陆续更新出来。新站的核心代码全面更换,提供了主题编辑功能,可自行编辑不同主题,并用核心代码解析并应用到其他站。新站的最大改进在于增加了微博连接功能,稍后会提供微博分享等各种功能。 稍后会发出新站的代码以及主题编辑说明,使用者只需有一定的html基础,按照说明就能顺利完成基本主题模板的构建。同时也将提供一些高级的个性定制。功能将会逐步更新。 为了庆祝神棍节的到来,决定将网站版本号定为GP0.1.11。GP全名:GP is a Publisher。稍后放出代码。

[切题][boj1095]dijkstra+DP

题目:http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1095 题意:这题要在一个无向正权图上找单源最短路,找到目标点后,还要求出到达这个点的最短路径的数量。有重边。 解法:dijkstra+DP。正权图找最短路首先想到dijkstra,然后考虑如何获得最短路数量和怎样处理重边。因为两点间只需一条最的路径就够了,因此记录图的时候可以考虑忽略其他权比较高的路径,只记录最短的那条。并且增加一个二元数组记录相邻点间的最短路径条数。此外有数组d记录起点到各点的最短距离,count记录到达这点的最短路径数。在dijkstra过程中,加入新节点后松弛没找到最短路的点的过程中,考虑如果松弛过程中d[i]==d[pos]+map[pos][i],则count[i]+=count[pos]*p[pos][i](此处之前错误写成了count[i]++,-_-!),如果d[i]>d[pos]+map[pos][i],则count[i]=count[pos]*p[pos][i]。最后输出d[b],count[b]就行,注意各数组初始化,并且注意是两组输出之间有空行,最后一组输出后不用空行,仅换行,这里我也悲剧了一次。

诡异的e

问:随机在0到1之间取数,当第n次取到的数小于等于前n-1次取到的数中的任何一个时停止,求n的期望。 答案:e。解释:另Pn为停止时次数为n的概率,则这个E(n)=1*P1+2*P2+3*P3+…+n*Pn+…。下面将这组数分组,化为:E(n)=(P1+P2+P3+…)+(P2+P3+P4+…)+(P3+P4+P5+…) …。这样就得到了E(n)=P(n>=1)+P(n>=2)+P(n>=3)+…。考虑到前两项的值应为1,因为无论如何游戏进行的次数不可能小于二次。而P(n>=3)=1/2!。原因是若n>=3则前两个数必须单调递减,因此前两个数排列方式有2!种,因而概率为1/2!。n>=k时同理,若n>=k,则前k-1项必须单调递减,因此概率为1/(k-1)!。因此E(n)=1+1/1!+1/2!+1/3!+…=e。这个神奇的结论就得到了,貌似原题叙述的停止条件是第n个数小于前n-1个数中的任何一个,但如果这样叙述,前k个数单调的可能情况就不是1因此概率也就不数1/k!。因而改成小于等于。原文地址是:http://mindyourdecisions.com/blog/2010/11/16/an-interesting-probability-game/

[poj1753]Flip Game解题报告 BFS+位运算+状态压缩

题目:http://poj.org/problem?id=1753题意:在一个4*4的方格阵里,每格里有一个一面白一面黑的棋子,初始状态由输入给出。游戏开始后,每次选择16格中的任何一个,然后将它以及它周围紧相邻的4个棋子翻转(超出边缘的不计)。游戏的目的是将所有色块翻成同一种颜色。问能不能达到游戏目的,如果能输出最少需要的翻拍次数。解法:bfs枚举每种情况。BYR论坛算法版给出的分类是枚举,但这题枚举要采取广搜策略。另外,注意到一共只有16个格,因此可以用一个16位的int存储状态,这样内存就不会超。存储每个状态是否被访问过可以直接用一个2^16个元素的flag数组完成。模拟翻牌过程用位运算即可。代码: Source CodeProblem: 1753 User: gp2593Memory: 1120K Time: 32MSLanguage: GCC Result: Accepted * Source Code #include<stdio.h> #include<stdlib.h> typedef struct node { int box; int time; int max; }NODE; turn(int bo,int positio) { int k,t; t=1<<positio; bo=bo^t; if(positio+4<=15) { k=t<<4; bo=bo^k; } if(positio-4>=0) { k=t>>4; bo=bo^k; } if(positio%4!=0) { k=t>>1; bo=bo^k; } if(positio%4!=3) { k=t<<1; bo=bo^k; […]

some twitter button added

这两天逛荡在墙外面觉着挺爽,就顺手把twitter的东西给加到博客上了,虽然这东西加上了也应该没人用吧。近况是在实验室实习感觉不错,可以做点喜欢的事情,不用被人强迫。有空了写个翻墙的东西吧,我想这种东西应该很受欢迎的说。

无法正常缩放的图片

这是一张无法正常缩放的图片,因为目前主流的图像处理软件以及浏览器的图形缩放算法都是有问题的。包括photoshop,gimp等试用广泛的软件都不能正常将这张图缩放到50%%u4E00旦缩放到50%%u5F97到的将是一张全灰的图像。而这张图即使不放大,在不同角度观看也会有奇妙的效果。我是在这里找到的这个问题。文章中分析了原因,其中之一是:在将图片缩放50%%uFF0C有些软件会选取没单位4个像素之一为新的像素,这样在一个2*2的单元就缩放成了一个像素,从而实现缩放,但这显然是错误的。另外一些算法会根据4个点的平均色度灰度决定新的像素的色度灰度,但决定过程中采用的是线性变换。如,(4+8+12+16)/4=10。而在亮度上缩放应采用亮度的能量表示来缩放,也就是二次方。目前主要的错误都来源于此。有兴趣可以下载这个包,自己制作这种图片。并用自己的图片编辑器测试。

[切][boj1094]DP

昨天开始感冒,浑身无力,感觉不爽。今天写了两个,第一个是单调子序列,就不贴了。第二个是这个DP。题目:http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1094题目意思是求一个序列,这个序列满足三个一组,并且每组有一个属性m,这个m=min((a-b)^2+(b-c)^2+(a-c)^2),其中a,b,c为序列中这组数的值。求得的序列是在N个元素的序列中的K组,使得这K组的m值和最小。解法:DP。考虑到如果abc顺序排列,则m只能取得(a-b)^2或(b-c)^2之一。类似01背包,将每个数当作每个物品,这个物品重量是1。因为决定一组数的m值尽取决于两个元素,因此第三个元素可以在没被选择的数里任意选择。状态转移:dp[i][j]=min(dp[i-2][j-1]+(a[i]+a[i-1])^2,dp[i-1][j-1])。这个状态转移的意思是,当考察了a中前i项并且最多组k队时的最小m值。这里实际上是在决定将a[i],a[i-1]加入组队,还是保持不变。因为这里每个人的重量为1,而最大容量相当于2*K因此,一定可以将背包装满。因此可以得到K组人。代码:点击下载

[切菜题][boj1036]最小生成树

这个周末很颓废,几乎什么也没干。谴责一下自己。题目:http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1036这题就是要求一个稠密图上的最小生成树,并且求在这个生成树上的一个点,要求这个点到其余所有点的距离和最小。题目条件保证生成树唯一。解法:首先求最小生成树,用prim。每加入一个新的节点时,计算这个点到已经加入的所有点的距离。因为最小生成树中任意亮点的通路唯一,因此可以直接与prim中pre数组中的点到其余点做和求出。代码:依然点击这里下载

Google”雷全胜”

昨儿看某小孩状态,关于雷全胜老师的星座问题。怀疑雷全胜老师的星座到底是不是金牛的。我也很好事,所以干脆也Google了一下,果断打开Google.com,敲进“雷全胜”,回车。得到的结果中除了第一条收录来自评师网,其余大多与”纳达尔膝伤复发落后退赛穆雷全胜首入澳网四强”有关。如图:

php页面伪静态的.htaccess文件实现

搜索引擎对动态页面不是很友好,像我的博客之前显示文章都是用article.php带查询方式,也就是形如article.php?a=12的方式。但是搜索引擎对后面的查询字段通常忽略,把所有article.php当作一个页面,因此多个页面无法被搜索引擎捕获。我们可以通过重写url将地址静态化,改成12.html等形式,这样浏览器就可以很容易的区分不同页面从而抓取。伪静态方法有很多,我这里用的是.htaccess方法,利用apache的rewrite模块进行,里面涉及到非常简单的正则表达式知识。这个方法主要是创建并编辑.htaccess文件。一、创建.htaccess因为我通常在linux下开发web因此没有无法生成.htaccess文件的困扰。对于windows用户,可以新建xx.htaccess然后在cmd里copy xx.htaccess .htaccess得到这个文件。这个文件可以用任意一款文本编辑器编辑。二、书写rewriterule这里首先打开.htaccess文件,然后输入如下文本:RewriteEngine OnRewriteBase [path]RewriteRule [from] [target]其中[path]是指从web根目录开始,要重定向的文件所在目录,比如本站,article.php在blog目录下因此[path]写成/blog。[from]是你希望用户在浏览器里输入的url形式,比如我这里希望用户输入 一些数字.html的形式,那么[from]写成^([d]+).html。这里的^表示目标串的开头,表示从开头匹配,一对圆括号的作用是今后引用它,而一对方括号的意思是将它包括的东西算作一组,后面的加好表示前面的一个或一组模式出现1次或以上次。因为.在正则表达式里有特殊含义,因此要加将其转义。[target]是要转向的文件,因此[target]在我这里是article.php?a=$1。这里的$1就是对前面的小括号的模式的引用,前面如果出现多个小括号就是匹配第一个,$2就是第二个,以此类推。值得注意的是,如果页面内大量链接以及图片的引用用的是相对路径形式,如x.jpg,需要保证重定向后目录层级不变,否则会造成链接失效,图片无法显示的问题。这个问题很容易理解,因为重定向发生在服务器端,因此浏览器并不清楚目前的目录到底在哪里比如在浏览器里输入地址www.domain.com/a/b/c.html并在服务器端指向www.domain.com/index.php?a=a&b=b&c=c文件,这是就会出现问题。原因是浏览器在查找相对路径x.jpg时,会在www.domain.com/a/b/目录下查找,而事实上并不存在这样一个目录。这个问题的另外一个解决办法是所有的链接都采用绝对路径形式,不过这样对今后网站转移和维护都会造成困扰。如果网站会频繁转移,又想用绝对路径,那就只能定义一个全局变量或者常量使其值为”http://www.domain.com/”这样,只要把这个变量在需要链接的位置的相对路径前输出即可。网站转移的时候只要修改这个全局变量。三、上传.htaccess文件书写好这个文件之后需要将这个文件上传到服务器。目前国外的linux主机几乎都支持这个功能,因此只要把这个文件传到想要作用的目录下即可。四、.htaccess的其他功能这个文件功能其实很强大,也可以自定义404错误等各种错误页面。网上这些资料很多。这段时间我会将站内几乎所有的链接都静态化,这可能会导致很多错误,因此只能在错误中前进了。

ubuntu10.10下安装/使用libevent

libevent是个事件驱动库,网上关于它的文章很多,这里就不再多说了。如果你搜到这篇东西,一定是想要在你的ubuntu10.10下面安装/使用它,或者说你遇到了问题。这个问题很可能就是你遇到了段错误。通过gdb调试后发现问题出在libevent中。然后你很无奈。其实问题不在libevent上,而在安装libevent的过程本身。我是采用源码的方式安装的libevent。http://monkey.org/~provos/libevent/在这里下载到你想要的版本后,转到你下载文件保存的目录,tar -xzvf 你下载到的文件名。然后进入解压出来的那个目录。之后./configure,然后make,sudo make install。顺利的话你就安装完成了,看起来很平常。但是当你使用它的时候就会出现问题。这很可能是段错误。问题的原因我现在就开始解释。ubuntu10.10默认会安装一个libevent1.4.2版本的libevent在你的系统里,这个版本的libevent在/usr/lib目录下有个libevent.so.2的文件。而你用源码安装的libevent的so文件保存在/usr/local/lib目录下,这样当你在用编译器选项-levent的时候,系统就在/usr/include,/usr/lib,/usr/local/lib三个目录下寻找libevent.so这样的文件作为连接时候用到的目标文件。问题就出在这里,系统首先找到的是/usr/lib/libevent.so.2这个文件而不是你安装的/usr/local/lib这个目录下这个版本对应的目标文件,于是连接产生的程序就会读取一段不应该读到的内存,于是bug就产生了。因此,在安装libevent之前,首先确保你的系统里是否已经安装了其它版本的libevent,如果发现有安装,那么果断卸载之。 更新:libevent的official site上的document说struct event需要分配到heap(堆区)。如果分配到stack,当临时变量神马的用多了会导致很多意想不到的问题,博主这两天就深受其害。

CodePhoto.WTF © 2025