es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir grupo de puntos en un solo píxel.

Tengo una imagen en blanco y negro con 4 grupos de puntos, y necesito transformar cada grupo en un solo punto.

Mi idea era encontrar y eliminar puntos por distancia, por lo que si un píxel está tal vez a 20px de distancia del otro, eliminaría uno y mantendría el otro, y repetiría el proceso hasta que solo tenga 4 píxeles, pero parece que no es realmente bueno en términos de rendimiento.

¿Hay alguna mejor manera de hacerlo?

Gracias

Imagen:

Descripción de la imagen

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Un enfoque alternativo es utilizar algoritmos de agrupamiento, como el agrupamiento k-means o el agrupamiento jerárquico, para agrupar puntos similares juntos. Puede especificar el número de grupos como el número de puntos finales que desee. Una vez que los puntos han sido agrupados, puede tomar el promedio o el punto central de cada grupo como el punto individual final. Este enfoque puede ser más rápido y preciso que la eliminación basada en la distancia.

    En Python, puede utilizar la biblioteca scikit-learn para los algoritmos de agrupamiento y la biblioteca OpenCV para tareas de procesamiento de imágenes y visión por computadora. Aquí hay un código para comenzar:

    import cv2
    import numpy as np
    from sklearn.cluster import KMeans
    
    # Leer la imagen
    img = cv2.imread('imagen.jpg', 0)
    
    # Convertir la imagen a píxeles en blanco y negro
    _, img_bn = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
    
    # Obtener las coordenadas de todos los píxeles en negro
    filas, columnas = np.where(img_bn == 0)
    coordenadas = np.column_stack((filas, columnas))
    
    # Utilizar el agrupamiento k-means para agrupar las coordenadas en 4 grupos
    kmeans = KMeans(n_clusters=4)
    kmeans.fit(coordenadas)
    puntos_centrales = kmeans.cluster_centers_
    
    # Convertir los puntos centrales a enteros
    puntos_centrales = np.round(puntos_centrales).astype(int)
    
    # Dibujar círculos en los puntos centrales
    for punto in puntos_centrales:
        cv2.circle(img, tuple(punto), 5, (255, 0, 0), -1)
    
    # Mostrar el resultado
    cv2.imshow('Resultado', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    Ten en cuenta que este es solo un ejemplo básico y es posible que necesites ajustar los parámetros o utilizar un algoritmo de agrupamiento diferente según la complejidad de tu imagen y el número de grupos de puntos.

Comments are closed.