Conceptos básicos del procesamiento de imágenes en Python

Conteúdo

Escribir el artículo de hoy fue una experiencia fascinante para mí y también lo sería para los lectores de este blog. ¿Qué es tan diferente? Dos cosas: em primeiro lugar, el artículo trata sobre algo que siempre quise hacer desde que tenía 5 anos; em segundo lugar, este tema / Ferramentas / algoritmo también son nuevos para mí. De ninguna manera soy un maestro en el procesamiento de imágenes, pero la utilidad de este campo simplemente me dejó alucinado.

image-process-3102321

Imagine, si puede crear una aplicación para etiquetar automáticamente una fotografía como la de Facebook, o crear su propia contraseña de reconocimiento facial para su computadora portátil. Neste artigo, recogeré una aplicación muy simple pero interesante del procesamiento de imágenes. Usaremos Python para hacer el procesamiento de imágenes. Nos próximos artigos, abordaré ejemplos más complejos de procesamiento de imágenes. Este es el problema en el que trabajaré en este artículo:

Exposição do problema

¿Adivina qué es esta imagen?

wint_sky-3146717

Tienes razón, es una imagen típica de un cielo abierto. Tomé esta foto desde la última noche hasta anoche en Bangalore desde mi terraza. Nesse momento, no tenía ni idea de que este puede ser un ejercicio tan emocionante y gratificante. Cuando era niño, solía pasar horas contando estas estrellas, pero casi siempre fallaba en ir más allá de 50-60. Quería completar este ejercicio con ayuda de mi máquina. No tenía ni idea de que esto fuera posible hasta el domingo pasado, y hoy he completado esta larga tarea pendiente usando Python.

Comecemos

Paso 1: importar la biblioteca requerida

El paquete Skimage nos permite procesar imágenes usando Python. El lenguaje es extremadamente simple de entender pero realiza algunas de las tareas más complicadas. Aquí hay algunas bibliotecas que necesita importar para comenzar,

code11-5316907

Paso 2: Importa la imagen

Una vez que tengamos todas las bibliotecas en su lugar, necesitamos importar nuestro archivo de imagen a Python. A continuación se muestra el código que puede utilizar para importar el archivo de imagen. Tenga en cuenta que la imagen se importa en escala de grises, lo que básicamente significa que cada píxel tiene un tono de gris. Y cada píxel se convierte esencialmente en una celda en una matriz. Neste caso, la imagen es una matriz de 480 * 581 celdas (o una imagen de 480 * 581 píxeis).

code21-9945847

Paso 3: Encuentra el número de estrellas

Ahora viene la parte crítica en la que nuestro trabajo principal se realiza mediante unos pocos comandos. Estos pocos comandos salen para buscar objetos continuos en la imagen. Blobs_log da tres salidas para cada objeto encontrado. Los dos primeros son las coordenadas y el tercero es el área del objeto. El radio de cada blob / objeto se puede estimar usando esta columna (área del objeto).

code31-2120523

Como podemos ver, el algoritmo ha estimado 308 estrellas visibles. Veamos ahora qué tan precisas son estas lecturas.

Paso 4: Validado si capturamos todas las estrellas

e depois verifique se o segundo parâmetro tem um valor 308 todavía está saliendo de una caja negra. Veamos si hemos detectado correctamente todas las estrellas. Para isso, estoy rodeando cada posición estimada de las estrellas. Y la mirada a la imagen si nos falta alguna estrella.

code41-6557620

Aquí está el código completo:

from matplotlib import pyplot as plt
from skimage import data
from skimage.feature import blob_dog, blob_log, blob_doh
from math import sqrt
from skimage.color import rgb2gray
import glob
from skimage.io import imread
example_file = glob.glob(r"C:UsersTavishDesktopwint_sky.gif")[0]
im = imread(example_file, as_grey=True)
plt.imshow(Im, cmap=cm.gray)
plt.show()
blobs_log = blob_log(Im, max_sigma=30, num_sigma=10, threshold=.1)
# Compute radii in the 3rd column.
blobs_log[:, 2] = blobs_log[:, 2] * sqrt(2)
numrows = len(blobs_log)
imprimir("Number of stars counted : " ,numrows)
FIG, ax = plt.subplots(1, 1)
plt.imshow(Im, cmap=cm.gray)
for blob in blobs_log:
    e, x, r = blob
    c = plt.Circle((x, e), r+5, color ="lime", linewidth=2, fill=False)
    ax.add_patch(c)

Notas finais

¡El procesamiento de imágenes es fascinante! Comencé mi viaje con el procesamiento de imágenes de Python no más de 5 dias. Para el beneficio de la comunidad, animaré a compartir cualquier sugerencia o mejor práctica en este foro. Es posible que este ejercicio no tenga ninguna aplicación práctica, pero se pueden realizar análisis similares para las estimaciones de pureza. Por exemplo, en la industria del vidrio necesitamos la cantidad de partículas de sílice en el vidrio a un nivel microscópico. Al capturar los fotogramas en un video, puede usar este código simple para hacer muchas cosas. Por exemplo, estimación del tráfico a través de imágenes de CCTV. Este código se puede adaptar fácilmente para lograr lo mismo.

O artigo foi útil para você? Si ha realizado trabajos similares en el procesamiento de imágenes de Python, compártalos con nosotros. Deixe-nos saber sua opinião sobre este item na caixa abaixo..

Se você gostou do que acabou de ler e deseja continuar seu aprendizado sobre análise, inscreva-se em nossos e-mails, Siga-nos no Twitter ou como o nosso página do Facebook.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.