Automágica: durante 2017 estoy trabajando bastante en Automágica, mi software para editar libros: Más información - Posts relacionados

Visión robótica

Hace un par de noches me escribió mi amigo Joel. Es licenciado en Filosofía y está haciendo un doctorado. Me cuenta que está leyendo un libro llamado How the Mind Works, de Steven Pinker, quien actualmente se desempeña en la cátedra de psicología del MIT y es uno de los principales referentes de la psicología evolucionista.

En el libro, contrastando con lo que muestran los directores de cine en las películas, Steven dice:

Si pudiéramos ver el mundo con los ojos de un robot, su aspecto no se parecería al fotograma de una película a base de crucecillas, sino que se asemejaría más a esto:

225 221 216 219 219 214 207 218 219 220 207 155 136 135

213 206 213 223 208 217 223 221 223 216 195 156 141 130

206 217 210 216 224 223 228 230 234 216 207 157 136 132

211 213 221 223 220 222 237 216 219 220 176 149 137 132

221 229 218 230 228 214 213 209 198 224 161 140 133 127

220 219 224 220 219 215 215 206 206 221 159 143 133 131

221 215 211 214 220 218 221 212 218 204 148 141 131 130

214 211 211 214 220 218 221 212 218 204 148 141 131 130

211 208 223 213 216 226 231 230 241 199 153 141 136 125

200 224 219 215 217 224 232 241 240 211 150 139 128 132

204 206 208 205 233 241 241 252 242 192 151 141 133 130

200 205 201 216 232 248 255 246 231 210 149 141 132 126

191 194 209 238 245 255 249 235 238 197 146 139 130 132

189 199 200 227 239 237 235 236 247 192 145 142 124 133

198 196 209 211 210 215 236 240 232 177 142 137 135 124

198 203 205 208 211 224 226 240 210 160 139 132 129 130

216 209 214 220 210 231 245 219 169 143 148 129 128 136

211 210 217 218 214 227 244 221 162 140 139 129 133 131

215 210 217 218 214 227 244 221 162 140 139 129 133 131

219 220 211 208 205 209 240 217 154 141 127 130 124 142

229 224 212 214 220 229 234 208 151 145 128 128 142 122

252 224 222 224 233 244 228 213 143 141 135 128 131 129

255 235 230 249 253 240 228 193 147 139 132 128 136 125

250 245 238 245 246 235 235 190 139 136 134 135 126 130

240 238 233 232 235 255 246 168 156 144 129 127 136 134

Cada número representa la luminosidad de una de las millones de manchas que forman el campo visual. Los números menores corresponden a las manchas más oscuras, y los mayores, a las más claras.

Joel me preguntaba si se me ocurría una forma sencilla de convertir estos números en una imagen. El ejercicio es válido y un buen ejemplo de la biblioteca PIL.

from PIL import Image

image = Image.new('L', (14,25))

imageMap = image.load()

f = open('vision1.txt')

lines = f.readlines()



for i, l in enumerate(lines):

    for j, v in enumerate(l.split()):

        n = int(v)

        imageMap[j, i] = n



image.save('vision1.gif')

image.show()

Y esto es (ampliado) lo que está mirando el robot de Steven:

Visión robótica con PIL (ampliada)

update: la versión de Milton usando Octave:

matriz = dlmread('vision1.txt');

matrizNormalizada = matriz ./ max(max(matriz));

imshow(matrizNormalizada);

Visión robótica generado con Octave

update 2:

Joel implementó una solución muy ingeniosa utilizando una planilla de cálculos:

Visión Robótica con planilla de cálculo


El segundo color predominante: PIL

Hace unas semanas necesité hacer un script en Python que genere algunas decenas de imágenes. Básicamente, se tiene como entrada imágenes como estas:

(un borde con alguna forma y un color en un fondo blanco)

Las imágenes generadas tienen que tener ciertos números en el centro, pintados en cada caso del mismo color que el borde:

La primer parte del script tiene que determinar el segundo color predominante de la imagen (el primero es el blanco), esta es la forma en que lo hice usando PIL:

def get_color(image):
colors = image.getcolors()  # colors is a list of (count, color)

colors.sort(lambda y,x: cmp(x[0], y[0])) # bigger count first

c = colors.pop(0)

while white(c): # find the non-white color most used in the image

    c = colors.pop(0)

return c[1]

def white(color):

color = color[1]

return color[0] == 255 and color[1] == 255 and color[2] == 255</pre></body></html>