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.

Modificando la función ‘try_all_threshold’ de skimage

Actualmente estoy trabajando con la función try_all_threshold que viene con el paquete de filtros skimage (skimage.filters.tryallthreshold).

Esta función aplica 8 tipos de métodos de umbralización en una imagen y luego representa estos 8 umbrales generados uno al lado del otro. Sin embargo, hay muchos más métodos de umbralización descritos en la documentación de skimage y actualmente estoy tratando de encontrar una manera de modificar la función try_all_threshold de tal manera que pueda agregar o intercambiar los métodos de umbralización que normalmente aplica, con otros alternativos del entorno scikit.

Por ejemplo: en lugar de usar el método skimage.filters.threshold_li, quisiera usar el método skimage.filters.threshold_multiotsu en la función try_all_threshold. Y idealmente, me gustaría también usar más de 8 métodos de umbral al mismo tiempo para obtener una mejor visión general, pero no sé si eso es posible.

¿Alguien tiene alguna idea de cómo hacer eso?

¡Muchas gracias a todos por su ayuda y que tengan un buen día!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en python y skimage, hay varias formas de modificar la función try_all_threshold para agregar o intercambiar métodos de umbralización.

    Una forma es modificar directamente el código fuente de skimage agregando o eliminando métodos de umbralización de la función try_all_threshold. Sin embargo, esto no se recomienda, ya que puede afectar a otros usuarios que estén utilizando la misma versión de skimage.

    Una mejor manera es crear una función envolvente que llame a la función try_all_threshold y modifique los métodos de umbralización. Por ejemplo, supongamos que queremos intercambiar el método skimage.filters.threshold_li con el método skimage.filters.threshold_multiotsu, podemos crear una nueva función que primero importe la función try_all_threshold y luego modifique la lista de métodos de umbralización:

    from skimage.filters import try_all_threshold, threshold_multiotsu
    
    def my_try_all_threshold(img):
        thresh_methods = [method for method in try_all_threshold._FUNCTIONS.keys()]
        thresh_methods[thresh_methods.index('li')] = 'multiotsu'
        return try_all_threshold(img, thresh_methods=thresh_methods)
    

    Aquí, primero creamos una lista de todos los métodos de umbralización utilizados actualmente por try_all_threshold y luego reemplazamos el método ‘li’ (que corresponde a skimage.filters.threshold_li) por ‘multiotsu’ (que corresponde a skimage.filters.threshold_multiotsu). Luego llamamos a la función try_all_threshold con los métodos de umbralización modificados.

    Para usar esta nueva función, simplemente necesitamos llamar a my_try_all_threshold en lugar de try_all_threshold.

    En cuanto a usar más de 8 métodos de umbralización al mismo tiempo en try_all_threshold, esto no es posible directamente, ya que la función está codificada para mostrar 8 umbrales. Sin embargo, podemos modificar la función para mostrar más umbrales cambiando la configuración de los subplots. Alternativamente, podemos crear nuestra propia función que muestre todos los umbrales deseados por separado.

    En general, con un poco de conocimiento de python, es posible modificar la función try_all_threshold para adaptarla a nuestras necesidades y preferencias.

Comments are closed.