PIL: ¿Crear histograma unidimensional de claridad de color de imagen?

He estado trabajando en un script y lo necesito básicamente para:

Haga la imagen en escala de grises (o bitonal, jugaré con ambos para ver cuál funciona mejor).Procese cada columna individual y cree un valor de intensidad neta para cada columna.Escupir los resultados en una lista ordenada.

Hay una manera realmente fácil de hacer esto con ImageMagick (aunque necesita algunas utilidades de Linux para procesar el texto de salida), pero realmente no veo cómo hacer esto con Python y PIL.

Esto es lo que tengo hasta ahora:

from PIL import Image

image_file = 'test.tiff'

image = Image.open(image_file).convert('L')

histo = image.histogram()
histo_string = ''

for i in histo:
  histo_string += str(i) + "\n"

print(histo_string)

Esto genera algo (estoy buscando graficar los resultados), pero no se parece en nada a la salida de ImageMagick. Estoy usando esto para detectar la costura y el contenido de un libro escaneado.

¡Gracias a cualquiera que ayude!

Tengo una solución (de aspecto desagradable) que funciona, por ahora:

from PIL import Image
import numpy

def smoothListGaussian(list,degree=5):
  window=degree*2-1
  weight=numpy.array([1.0]*window)
  weightGauss=[]

  for i in range(window):
    i=i-degree+1
    frac=i/float(window)
    gauss=1/(numpy.exp((4*(frac))**2))
    weightGauss.append(gauss)

  weight=numpy.array(weightGauss)*weight
  smoothed=[0.0]*(len(list)-window)

  for i in range(len(smoothed)):
    smoothed[i]=sum(numpy.array(list[i:i+window])*weight)/sum(weight)

  return smoothed

image_file = 'verypurple.jpg'
out_file = 'out.tiff'

image = Image.open(image_file).convert('1')
image2 = image.load()
image.save(out_file)

intensities = []

for x in xrange(image.size[0]):
  intensities.append([])

  for y in xrange(image.size[1]):
    intensities[x].append(image2[x, y] )

plot = []

for x in xrange(image.size[0]):
  plot.append(0)

  for y in xrange(image.size[1]):
    plot[x] += intensities[x][y]

plot = smoothListGaussian(plot, 10)

plot_str = ''

for x in range(len(plot)):
  plot_str += str(plot[x]) + "\n"

print(plot_str)

Respuestas a la pregunta(2)

Su respuesta a la pregunta