给出两张卡通脸谱,如下面两幅图。这两幅图的特点是,黑色像素主要集中在眼球的位置上,且图形的宽度和高度都是500像素。本文的目标,是使用Mathematica来大体确定眼球在图片中的位置。
工具/原料
1
电脑
2
Mathematica
方法/步骤
1
先用下图做试验。
2
提取图片第一个通道的灰度图:dt = ImageData[img][[;; , ;; , 1]];
3
计算这个灰度图每一行的像素值的和:a = Total[#] & /@ dt;绘制折线图:ListLinePlot[{a // Reverse, c}\[Transpose]]其中,c = List[Range[500]][[1]];看下面的图像,越靠近左边,说明数值越少,也就是说,相应的行的像素值总和越少,黑色像素多。
4
计算这个灰度图每一列的像素值的和:b = Total[#] & /@ (dt\[Transpose]);绘制折线图:ListLinePlot[{c, b}\[Transpose]]
5
把这两个折线图画在一起:ListLinePlot[{{a // Reverse, c}\[Transpose], {c, b}\[Transpose]}]效果不好。
6
调整一下两个折线图,增加峰和谷的对比度。
7
下图就是调整之后的折线图。
8
把这个折线图放到原图上面。
9
可以看到,蓝色折线图谷底所在行,与绿色折线图谷底所在列,正是对应着脸谱的眼球的大体位置。
10
下面,是用另一幅图做试验的效果。
注意事项
剩下的问题,是怎么确定谷底所在的行数或列数。
上一篇:怎么用七巧板拼出一驾飞机?
下一篇:浏览器调试篇之Opera