¿Cómo puedo aplicar automáticamente el recorte inteligente a cientos de fotos de monedas?

ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí

Estoy teniendo una dificultad terrible. Rutinariamente tengo que fotografiar y luego editar cientos de imágenes de monedas. Luego recorto a mano el exceso de fondo dejando un pequeño borde alrededor de la moneda. Sé que esto es posible ser automatizado. Parece que no puedo hacerlo funcionar. Necesito recortar automáticamente el color de fondo con una tolerancia y con un borde desde el centro de la imagen.

¿Por qué no recortar en la cámara con un zoom para los márgenes deseados en la parte superior e inferior (es decir, hacer que las monedas tengan el mismo tamaño y posición en el marco). Si se asegura de que las monedas estén centradas en el marco, entonces un script o acción de recorte debería solucionar el problema.
Usted dice que no puede "hacer que funcione", pero no nos ha dicho nada sobre lo que ha intentado hacer. Explicar lo que ya ha intentado y cómo falla nos impedirá sugerir algo que sabe que no funciona.

Respuestas (3)

Esto probablemente requerirá un poco de secuencias de comandos o programación. Infórmese sobre la transformada circular de Hough . Básicamente, detecta círculos en una imagen. Si bien las matemáticas son bastante complicadas, probablemente puedas encontrar una biblioteca decente en un lenguaje que abstraiga gran parte de la complejidad.

Por ejemplo, consulte la biblioteca OpenCV (Open Computer Vision) , que tiene interfaces C, C++, Python y Java. Como ejemplo de uso, aquí hay un tutorial para detectar círculos usando OpenCV en Python . En ese ejemplo, el circlesvector es una lista de 3 tuplas, cada tupla contiene la (coordenada x, coordenada y, radio) del círculo encontrado. Para encontrar el círculo con el radio más grande, algo como:

largest_circle = max(circles, key=lambda c: c[2])

encontrará el círculo más grande en la imagen (que presumiblemente es su moneda), como la misma tupla (x, y, r). Después de eso, puede aumentar runa pequeña cantidad (para crear un borde), de modo que pueda recortar la imagen en: (x min = x − r, x max = x + r), por (y min = y − r, y máx = y + r).

En lugar de usar OpenCV, este ejemplo usa la biblioteca de procesamiento de imágenes scikit-image con Python. La imagen de este ejemplo es una imagen de varias monedas alineadas, mostrando los círculos encontrados en la imagen.

En retrospectiva, tal vez esta pregunta debería referirse a stackoverflow.
Creo que está buscando más una solución de software ya existente que pueda configurarse, no desarrollarse/programarse, como se podría hacer con Photoshop Actions.
@dragos Probablemente tengas razón. Esperaba que el OP respondiera con un ejemplo de fotos de antes/después como usted solicitó. Si hay una amplia variación en la ampliación, la ubicación de las monedas, etc., en la imagen original, es probable que los mejores resultados provengan de una solución programática o algorítmica.

En Photoshop puede crear un script de automatización que haga lo mismo una y otra vez.

Ahora, dicho esto, sus imágenes deben ser casi idénticas para que el script funcione bien. Grabe una vez lo que normalmente hace y luego guarde la acción. Después de eso, la parte fácil es ejecutar la acción por lotes.

Aquí está cómo grabarlo.

Vaya al menú Ventana y elija Acciones. Aparecerá una pequeña paleta con acciones de Photoshop ya predefinidas. Para usar cualquier acción predefinida, simplemente selecciónela y presione el botón de reproducción en la parte inferior. Si desea crear el suyo propio, haga clic en el botón de menú en la esquina superior derecha y elija Nueva acción. Asigne un nombre a su acción, haga clic en Aceptar y luego estará automáticamente en modo de grabación. Todo lo que haga en Photoshop ahora se grabará, así que realice cualquier acción que desee automatizar y luego haga clic en el botón de detener en la parte inferior de la paleta de acciones.

¿Cómo será esto de utilidad? Seguramente, una acción que implique recortar recortaría todas las imágenes exactamente igual o se detendría mientras recorta manualmente. No veo cómo podría funcionar esto.
Parece que esto solo funcionará si la moneda está en la misma parte del marco para cada foto. ¿Está bien?
Primero, es una suposición incorrecta querer recortar. La acción debería ser "Seleccionar gama de colores (el negro)" ---> "Pluma (tal vez 2 px dependiendo de la resolución)"---> Seleccionar inversa ---> Crear nueva capa negra ---> Copiar selección en la capa negra ---> Guardar. Por supuesto, tal vez ajustes de color, contraste y nitidez si es necesario. Entonces, por otro lado, todo esto es una especie de exageración. Dijo que necesita hacerlo rutinariamente, así que en el mejor de los casos debería tener algún tipo de configuración donde la cámara esté montada, un flash de anillo, exposición manual, enfoque y simplemente haga clic en cambiar el clic de la moneda. No hay necesidad de PS

Si tiene Photoshop o equivalente, puede realizar una acción para abrir cada jpeg a su vez,

*agregue una nueva capa de fondo en un color neutro, vaya a la capa de la moneda, *seleccione el color del fondo en el que estaba la moneda cuando se fotografió, *edite la selección para hacerla más pequeña (usando 'refinar borde'),
* eliminar la selección.

[Eso dejará la imagen de la moneda con un pequeño borde del color de fondo original]

Luego puede guardar como un gif con transparencia y establecer el nuevo color de fondo. Si tiene PS y quiere hacer esto, puedo hacer un conjunto de imágenes para capturar el tren de ediciones.

Sí, tengo ps6. No puedo encontrar borde refinado en ninguna parte.
Publiqué dos fotos, son fotos posteriores al recorte.
el recorte previo es solo más de ese color de fondo.
Bueno, esto es difícil.
Bueno, esto es difícil. Si la solución de programación de scottbb no es factible, le sugiero que busque una forma rutinaria de disparar las monedas. Si están todos en los mismos soportes, haz un pequeño soporte para disparar y estandariza la posición y la distancia de la cámara (quizás usando un soporte para disparar) para que la imagen de la moneda esté siempre centrada en el mismo lugar. Luego realice una acción PS que importe cada archivo y cambie el tamaño del lienzo a un cuadrado que encierra la moneda.