Extraer una zona predefinida dentro de una imagenQueridos todos,
Quiero saber si es posible extraer con un script los píxeles dentro del círculo predefinido de mi imagen (ver adjunto).
Gracias de antemano por tu ayuda.
Krs,
Samir
Re: Extraer una zona predefinida dentro de una imagenTal vez. Es posible que pueda crear un modelo utilizando estadísticas sobre los valores de píxeles en la imagen para crear los dos valores de umbral que necesita el filtro. Es posible que desee suavizar la imagen antes del filtro canny (no dentro del filtro canny) para poder construir el modelo con los píxeles suavizados. (Editar: el desenfoque interno del filtro canny es mejor porque realiza un seguimiento de los datos de punto flotante. Un desenfoque externo reducirá los datos de punto flotante a valores de píxeles enteros 0..255 en la imagen borrosa, y la mayoría de sus píxeles en la imagen oscura son 0..10 o menos.)
https://en.wikipedia.org/wiki/Canny_edge_detector describe cómo funciona el filtro astuto; el valor de umbral grande (muy pequeño para sus imágenes) es donde comienza una línea. Dos píxeles adyacentes deben ser diferentes por mucho. La línea se "sigue" hasta que cae por debajo del valor de umbral pequeño (muy, muy pequeño para sus imágenes). "Los dos valores de umbral se determinan empíricamente y su definición dependerá del contenido de una imagen de entrada determinada." - Wikipedia
¿Son los colores importantes en estas imágenes? Si no es así, es posible que desee reducir la imagen a escala de grises. Se convertirá en un problema más simple, creo. Podrías hacer una distribución de los valores de escala de grises ...
¿Qué harás con la línea después de obtenerla en una imagen? ¿Es solo una visualización, o harás más cálculos en esa imagen? El enfoque de agrupación aún podría funcionar bien si necesita un centro de masa y radio.
Re: Extraer una zona predefinida dentro de una imagenQuerido Craige,
implementamos la solución de manera automatizada, pero aún necesitamos adaptar manualmente los parámetros de umbral porque las fotos son heterogéneas. ¿Crees que es posible automatizar este paso?
Muchas gracias,
Samir
Re: Extraer una zona predefinida dentro de una imagenQuerido Craige,
El filtro canny es realmente útil.
Intentaré automatizar el proceso.
El agrupamiento también es muy interesante, pero el resultado es menos claro para algunas otras fotos.
Muchas gracias por tu ayuda,
Samir
Re: Extraer una zona predefinida dentro de una imagenEche un vistazo al ejemplo de filtro canny en el índice de scripting. Los parámetros están en los controles deslizantes y pueden ser demasiado delicados si sus datos varían en intensidad, pero para la imagen de ejemplo que usé
Ejemplo de configuración del control deslizante en el índice de secuencias de comandos
Para conseguir esto
El filtro Canny detecta los bordes
El ruido en la imagen fue suavizado, mucho, por los dos controles deslizantes superiores. Los dos controles deslizantes inferiores se ajustaron a los valores adecuados para estas intensidades de píxeles. El guión está en el ejemplo; es posible que pueda automatizar su proceso si las imágenes son lo suficientemente similares. La salida es una imagen en blanco y negro o unos y ceros. Puede capturar esos píxeles en una matriz para su posterior procesamiento.
También es posible que desee hacer un análisis de los colores de píxeles. Tal vez el agrupamiento le daría una oscuro azul y mas oscuro par de racimos azules. Tal vez podría usar las coordenadas xy de los píxeles agrupados de color azul oscuro. por ejemplo:
// load the test image
img = open("$desktop/large.png","png");
// grab the rgb data from the image
{r,g,b} = img<<GETPIXELS></GETPIXELS>
Resultados agrupados convertidos en una imagen.
Podría tener más sentido trabajar con las coordenadas XY de los píxeles agrupados para encontrar los parámetros que desea.
Re: Extraer una zona predefinida dentro de una imagenQuerido Craige,
Gracias por la sugerencia.
Desafortunadamente, la ubicación del círculo dentro de la imagen puede moverse de una foto a otra (aún no está estandarizado).
Mi pregunta es si es posible detectar los contornos del círculo de forma automática.
Krs,
Samir
Re: Extraer una zona predefinida dentro de una imagenSí. Obtener una matriz de los valores de píxeles para toda la imagen, algo así como
imagen << getpixels (verifique el índice de scripting, ahora estoy fuera de mi escritorio).
Puede obtener los píxeles como canales r, g, b separados o como un color JMP combinado.
A continuación, necesitará una matriz de máscara de las mismas dimensiones, con unas para mantener los píxeles y ceros para rechazar los píxeles. Puede utilizar un programa de pintura con blanco para uno y negro para cero. Cargue esa imagen y obtenga solo un canal, tal vez rojo (r, g, b deberían ser todos iguales para la imagen en blanco y negro), que tendrá los valores de cero y uno.
Ahora decide cuál quieres que sea el resultado: ¿solo una lista desordenada de solo los píxeles interesantes? ¿O una matriz del mismo tamaño que antes con los valores no interesantes establecidos en cero?
imageMatrix [Loc (máscara)] te dará los píxeles desordenados donde la máscara tenía valores distintos de cero.
imageMatrix: * mask te dará cero donde la máscara es cero, valores originales donde la máscara es uno. (: * es el elemento de la multiplicación. * es matriz-álgebra multiplicada ... no es lo que quieres.)
Esta enviar podría ayudar.