usar usan todos que programa plugin para online metadatos imagenes grupo fotos enviadas eliminar como borrar image-processing imagemagick python-imaging-library

image-processing - todos - plugin para eliminar imagenes que no se usan en wordpress



¿Qué pasos de procesamiento debo usar para limpiar fotos de dibujos lineales? (3)

Mi método habitual de 100% de contraste y algunos ajustes de brillo para ajustar el punto de corte generalmente funciona bastante bien para limpiar fotos de pequeños subcircuitos o ecuaciones para publicar en E & R.SE, sin embargo, a veces no es tan bueno, como con esta imagen :

¿Qué otros métodos además del contraste (o en lugar de) puedo usar para darme un resultado más consistente?

Estoy esperando una respuesta bastante general, pero probablemente la implementaré en un script (en el que puedo simplemente volcar archivos) usando ImageMagick y / o PIL (Python), así que si tienes algo específico para ellos, sería bienvenido.

Idealmente, una mejor imagen fuente sería agradable, pero ocasionalmente uso esto en las imágenes de otras personas para agregar algo de brillo.


¿Qué hay de detectar los bordes ? Eso debería recoger los dibujos de línea.

Este es el resultado de la detección de bordes de Sobel en su imagen:

Si luego se establece el umbral de la imagen (utilizando un umbral determinado empíricamente o el método de Ohtsu ), puede limpiar la imagen mediante operaciones morfológicas (por ejemplo, dilatación y erosión). Eso te ayudará a deshacerte de las líneas rotas / dobles.

Como señaló Lambert, puede preprocesar la imagen usando el canal azul para deshacerse de las líneas de la cuadrícula si no las quiere en su resultado.

También obtendrá mejores resultados si enciende la página de manera uniforme antes de crear una imagen (o simplemente usa un escáner) porque entonces no tiene que preocuparse tanto por los umbrales globales como los locales.


Una forma común de eliminar la iluminación de fondo diferente es calcular una "imagen blanca" de la imagen, abriendo la imagen.

En este código de octava de muestra, he usado el canal azul de la imagen, porque las líneas en el fondo son menos prominentes en este canal ( EDITADO : usar un elemento de estructura circular produce menos artefactos visuales que un simple recuadro):

src = imread(''lines.png''); blue = src(:,:,3); mask = fspecial("disk",10); opened = imerode(imdilate(blue,mask),mask);

Resultado:

Luego reste esto de la imagen fuente:

background_subtracted = opened-blue;

(versión mejorada de contraste)

Finalmente, simplemente binarize la imagen con un umbral fijo:

binary = background_subtracted < 35;


El primer paso es igualar las diferencias de iluminación en la imagen teniendo en cuenta los problemas de balance de blancos. La teoría aquí es que la parte más brillante de la imagen dentro de un área limitada representa el blanco. Al difuminar la imagen de antemano eliminamos la influencia del ruido en la imagen.

from PIL import Image from PIL import ImageFilter im = Image.open(r''c:/temp/temp.png'') white = im.filter(ImageFilter.BLUR).filter(ImageFilter.MaxFilter(15))

El siguiente paso es crear una imagen en escala de grises a partir de la entrada RGB. Al escalar al punto blanco, corregimos los problemas del balance de blancos. Al tomar el máximo de R, G, B, desacentuamos cualquier color que no sea gris puro, como las líneas azules de la cuadrícula. La primera línea de código que se presenta aquí es una maniquí, para crear una imagen del tamaño y formato correctos.

grey = im.convert(''L'') width,height = im.size impix = im.load() whitepix = white.load() greypix = grey.load() for y in range(height): for x in range(width): greypix[x,y] = min(255, max(255 * impix[x,y][0] / whitepix[x,y][0], 255 * impix[x,y][2] / whitepix[x,y][3], 255 * impix[x,y][4] / whitepix[x,y][5]))

El resultado de estas operaciones es una imagen que tiene valores casi consistentes y se puede convertir a blanco y negro a través de un umbral simple.

Editar: Es agradable ver una pequeña competencia. nikie ha propuesto un enfoque muy similar, utilizando la resta en lugar de la escala para eliminar las variaciones en el nivel blanco. Mi método aumenta el contraste en las regiones con poca iluminación, y el método de Nikki no: el método que prefiera dependerá de si hay información en las áreas poco iluminadas que desea conservar.

Mi intento de recrear este enfoque resultó en esto:

for y in range(height): for x in range(width): greypix[x,y] = min(255, max(255 + impix[x,y][0] - whitepix[x,y][0], 255 + impix[x,y][7] - whitepix[x,y][8], 255 + impix[x,y][9] - whitepix[x,y][10]))

Estoy trabajando en una combinación de técnicas para ofrecer un resultado aún mejor, pero aún no está listo.