第一步是在考虑到白平衡问题的同时均衡图像中的照明差异。这里的理论是,有限区域内最明亮的图像部分代表白色。通过事先模糊图像,我们消除了图像中噪声的影响。
from PIL import Image
from PIL import ImageFilter
im = Image.open(r'c:\temp\temp.png')
white = im.filter(ImageFilter.BLUR).filter(ImageFilter.MaxFilter(15))
下一步是从RGB输入创建的灰度图像。通过缩放到白点我们纠正白平衡问题。通过取R,G,B的最大值,我们不再强调任何不是纯灰色的颜色,例如网格的蓝线。这里介绍的第一行代码是虚拟的,用于创建正确大小和格式的图像。
grey = im.convert('L')
width,height = im.size
impix = im.load()
whitepix = white.load()
greypix = grey.load()
for y in range(height):
for x in range(width):
greypix[x,y] = min(255, max(255 * impix[x,y][0]/whitepix[x,y][0], 255 * impix[x,y][2]/whitepix[x,y][3], 255 * impix[x,y][4]/whitepix[x,y][5]))
这些操作的结果是具有大多一致的值,并且可以通过简单的阈值被转换成黑白图像。 
编辑:很高兴看到一个小的竞争。 nikie已经提出了非常类似的方法,使用减法而不是缩放来消除白电平的变化。我的方法增加了照明不足的地区的对比度,而nikie的方法则不会 - 您选择哪种方法将取决于您希望保留的照明不足区域是否有信息。
我试图重现这种做法导致了这一点:
for y in range(height):
for x in range(width):
greypix[x,y] = min(255, max(255 + impix[x,y][0] - whitepix[x,y][0], 255 + impix[x,y][7] - whitepix[x,y][8], 255 + impix[x,y][9] - whitepix[x,y][10]))

我对技术的组合合作,提供一个更好的结果,但它尚未完全就绪。
怎么样的颜色?我对图像处理并不熟悉,但似乎如果您删除了一定范围内的蓝色,网格将被删除。 – Mehrdad 2011-01-08 03:45:56