10 | Imágenes |
Muchas de las funciones de Wolfram Language están orientadas al trabajo con imágenes. Es muy sencillo introducir una imagen en Wolfram Language, por ejemplo, copiándola o arrastrándola con el cursor desde la web o desde una colección de fotografías. O bien, puede simplemente capturarse una imagen desde la cámara del equipo que se esté usando mediante la función CurrentImage.
In[1]:= |
Out[1]= |
Pueden aplicarse funciones a imágenes, tal como se hace con números, listas u otras cosas. La función ColorNegate, que se vio antes en conexión con los colores, también trabaja con imágenes y produce una “imagen negativa”.
In[2]:= |
Out[2]= |
In[3]:= |
Out[3]= |
In[4]:= |
Out[4]= |
Puede hacerse una tabla con los resultados de diferentes niveles de difuminación:
In[5]:= |
Out[5]= |
In[6]:= |
Out[6]= |
Se pueden hacer muchos tipos de análisis con una imagen. Así, por ejemplo, DominantColors produce una lista con los colores más significativos en una imagen.
In[7]:= |
Out[7]= |
Binarize produce una imagen en blanco y negro:
In[8]:= |
Out[8]= |
Como es de esperar, los colores dominantes son, en este caso, el blanco y el negro:
In[9]:= |
Out[9]= |
Se puede hacer otro tipo de análisis con detección de bordes: para eso, se busca en qué partes de la imagen hay cambios bruscos de color. El resultado es como si fuera un bosquejo de la imagen original.
Identifique los bordes en la imagen original:
In[10]:= |
Out[10]= |
In[11]:= |
Out[11]= |
A menudo conviene hacer el procesamiento de imágenes de manera interactiva mediante el uso de interfaces producidas con Manipulate. Así, por ejemplo, Binarize permite fijar un umbral para la conversión a blanco y negro y, en tal caso, la experimentación interactiva puede ser lo más indicado para encontrar el umbral correcto.
Cree una interfaz para ajustar el umbral en la binarización de una imagen:
In[12]:= |
Out[12]= |
CurrentImage[ ] | captura la imagen actual en la computadora, etc. | |
ColorNegate[ ] | obtiene el negativo de los colores de una imagen | |
Binarize[ ] | pone una imagen en blanco y negro | |
Blur[ , 5] | difumina o hace borrosa una imagen | |
EdgeDetect[ ] | detecta los bordes dentro de una imagen | |
DominantColors[ ] | obtiene una lista de los colores dominantes en una imagen | |
ImageCollage[{ , , }] | reúne varias imágenes en un collage | |
ImageAdd[ , ] | suma los valores de color de dos imágenes |
10.1Obtenga el negativo de color del resultado de encontrar los bordes en una imagen. (Use CurrentImage[ ] o cualquier otra imagen). »
10.2Use Manipulate para hacer una interfaz que cambie, en una imagen, la difuminación entre 0 y 20. »
10.3Cree una tabla con el resultado de detectar bordes en una imagen, con niveles variables de difuminación, entre 1 y 10. »
10.4Haga un collage de imágenes, reuniendo una imagen y los resultados de hacerla borrosa, de detectar sus bordes y de binarizarla. »
10.6Cree un Manipulate para mostrar los bordes de una imagen con niveles variables de difuminación, entre 0 y 20. »
10.7Las operaciones con imágenes funcionan con Graphics y Graphics3D. Así pues, si se quiere detectar los bordes en la gráfica de una esfera se puede hacer: »
10.8Haga un Manipulate para construir una interfaz que cambie el nivel de difuminación, entre el 0 y el 20, de un pentágono morado. »
10.10Use ImageCollage para formar una imagen combinada de esferas, con tonalidades del 0 al 1, en incrementos de 0.2. »
10.11Forme la tabla de un disco con niveles variables de difuminación, del 0 al 30, en incrementos de 5. »
10.14Sume una imagen a la versión de esa misma imagen en negativo de color y con detección de bordes . »
+10.1Detecte bordes en una imagen binarizada. »
+10.2Obtenga el negativo de color en el resultado de detectar bordes en la gráfica de un pentágono regular. »
+10.4Use ImageAdd para sumar las imágenes de todos los polígonos regulares que tengan entre 3 y 100 lados. »
En vez de CurrentImage[], consiga una imagen de prueba, por ejemplo, ExampleData[{"TestImage", "Mandrill"}].
Es la gama de píxeles que conllevan la difuminación.
Si no se le fija un umbral, lo elegirá de acuerdo al análisis de la distribución de los colores en la imagen.
- El hecho de que puedan usarse imágenes directamente en un código de Wolfram Language es de enorme importancia y otra de las consecuencias de que Wolfram Language sea un lenguaje de programación simbólico.
- Por ejemplo, si se deseara tener una colección de imágenes de cocodrilos, podría recurrirse al uso de WikipediaData["crocodiles", "ImageList"].
- Suponiendo que se tenga una versión apropiada de Wolfram Language, WebImageSearch["colorful birds", "Thumbnails"] obtendrá las imágenes deseadas mediante una búsqueda en la web (véase la Sección 44).
- CurrentImage funciona en los navegadores más modernos y en dispositivos móviles de igual manera que en computadoras.
- Muchas de las operaciones aritméticas funcionan directamente, pixel-a-pixel, en imágenes (por ejemplo, Sqrt[] o -EdgeDetect[]), así que no es necesario usar explícitamente ImageAdd, ImageMultiply, etc.