Estoy trazando una imagen PGM: Aquí está el data que estoy usando.Apagado por un error en imshow?
El problema es que algunos de los píxeles que se muestran son incorrectos. Por ejemplo:
- las tres cajas grises cerca de la cima de la imagen tienen un valor de 11 (por lo que deben ser de color rojo, no rojo)
- los dos píxeles de color amarillo en la fila superior - que son de valor 8, entonces deberían ser de color amarillo-verde, no amarillo
¿Alguien puede explicar las discrepancias y cómo solucionarlas?
Aquí es mi fuente:
from pylab import *
import numpy
LABELS = range(13)
NUM_MODES = len(LABELS)
def read_ascii_pgm(fname):
"""
Very fragile PGM reader. It's OK since this is only for reading files
output by my own app.
"""
lines = open(fname).read().strip().split('\n')
assert lines[0] == 'P2'
width, height = map(int, lines[1].split(' '))
assert lines[2] == '13'
pgm = numpy.zeros((height, width), dtype=numpy.uint8)
for i in range(height):
cols = lines[3+i].split(' ')
for j in range(width):
pgm[i,j] = int(cols[j])
return pgm
def main():
import sys
assert len(sys.argv) > 1
fname = sys.argv[1]
pgm = read_ascii_pgm(fname)
# EDIT: HACK!
pgm[0,0] = 12
cmap = cm.get_cmap('spectral', NUM_MODES)
imshow(pgm, cmap=cmap, interpolation='nearest')
edit = True
if edit:
cb = colorbar()
else:
ticks = [ (i*11./NUM_MODES + 6./NUM_MODES) for i in range(NUM_MODES) ]
cb = colorbar(ticks=ticks)
cb.ax.set_yticklabels(map(str, LABELS))
savefig('imshow.png')
if __name__ == '__main__':
main()
EDITAR
veo lo que está pasando aquí ahora. Básicamente, imshow
parece estar haciendo esto:
- determinar el rango dinámico (como
[ min(image), max(image) ]
- representan esta usando el número de colores que se especifican en el mapa de color (13 colores)
lo que quiero que hay que hacer es:
- uso del rango dinámico que he especificado al crear el mapa de colores (13)
- representan esta usando los 13 colores en el mapa de color
puedo verificar esto forzando el rango dinámico de la imagen a ser 13 (véase la línea marcada HACK
). ¿Hay una mejor manera de hacer esto?
Aquí es una imagen actualizada:
+1 - esto parece ser un problema que mucha gente podría llegar a, conseguir "casi corregir "resultados". Odiaría atrapar este _después_ de la publicación. – samplebias