给你一副真彩画,你的任务是要完成这个图像的另一个版本,让它看起来就像是用数字彩笔画上去的一样(孩子们经常这样玩)。随着开始画图,你有两个参数可以设定:P,调色板的***尺寸(即使用不同颜色的***数量),和N,使用的单元格的***数量。你的算法不必非要使用所有的P颜色和N单元格,但它一定不能使用这之外的东西。输出的图像应该与输入的图像有相同的尺寸。
单元格被定义为具有相同颜色像素的连续区域。像素仅接近在一个角落不被认为是连续的。单元格可能有中空的现象。
简而言之,你只能通过N个平坦的阴影或固色区域以及P个不同的颜色来粗略估计输入的图像。
为了视觉化参数,这有一个很简单的例子(对于没有特别输入的图像时,炫耀下我牛逼的绘画技能嘿嘿)。下面这个图像的参数是P=6,N=11。
这有几个能测试你算法的图像。
请包含一些不同参数的一系列结果。如果你想展示大量的结果,你可以在imgur.com创建一个画廊,以保持回应图像尺寸的合理性。另外,把缩略图放到你的文章里,并且把他们连接到更大的图像上面,就像上面的图像那样,也是个不错的做好。此外,随意使用其他测试图像吧,如果你找到一些比较好的图像的话。
我认为,在大约N>=500,P~30的时候,输出将类似于真正的数字水彩模板了。
这是一个人气竞赛,所以投票越多的回应作品才会获胜。投票者可以通过这几方面来判断作品的优劣:
1.原始图像被估计的有多好
2.算法在不同种类的图像上能适用多好(绘画可能通常比照片更容易)
3.算法在非常严格的参数下效果有多好
4.单元格形状看起来是不是自然/平滑
我将使用以下Mathemaica脚本来验证结果:
- image = <pastedimagehere> // ImageData;
- palette = Union[Join @@ image];
- Print["P = ", Length@palette];
- grid = GridGraph[Reverse@Most@Dimensions@image];
- image = Flatten[image /. Thread[palette -> Range@Length@palette]];
- Print["N = ",
- Length@ConnectedComponents[
- Graph[Cases[EdgeList[grid],
- m_ <-> n_ /; image[[m]] == image[[n]]]]]]
原文:Paint by Numbers
译文:http://www.php100.com/html/it/focus/2014/1209/8012.html
(翻译:PHP100_Alex)