Embota las imágenes


15

Introducción

Los bordes afilados son, francamente, simplemente peligrosos, por lo tanto, dado un PNG como entrada, desenfoque la imagen usando el método descrito a continuación y rompa esos malditos bordes afilados.

Método

Para obtener el valor RGB de cada píxel, use las siguientes tres ecuaciones:

R=1,5×un=1norteRun2norte
sol=1,5×un=1nortesolun2norte
si=1,5×un=1nortesiun2norte

Donde es la suma de los valores rojos de cada uno de los píxeles adyacentes al cuadrado. El valor de es el número de píxeles adyacentes (por ejemplo, un píxel de esquina tendrá un valor de 3, mientras que un píxel alrededor del centro de la imagen tendrá un valor de 8).un=1norteRun2nortenortenorte

Un píxel adyacente es un píxel que está a 1 píxel de distancia del píxel original en todas las direcciones (izquierda, derecha, arriba, abajo y en todas las diagonales).

Por ejemplo, en la siguiente imagen 3 x 1:

El valor RGB borroso del píxel medio será:

R=1,5(0 02+0 02)2=0 0
sol=1,5(0 02+2552)2=220.836=221
si=1,5(2552+0 02)2=220.836=221

donde cualquier salida decimal se redondea a la unidad más cercana. No deberías simplemente dar el resultado.

Por lo tanto, el píxel del medio será el color (0, 221, 221) o:

Resultando en la imagen:

Debe repetir este proceso para cada píxel en la imagen. (Tenga en cuenta que hace esto con los píxeles originales y no con los píxeles modificados. Básicamente, no debe sobrescribir la imagen original, y debe mantenerla completamente separada de la nueva imagen borrosa ).

Si calcula que cualquier valor es mayor que 255, suponga que su valor es 255 (es decir, un valor de 374 se establecería en 255).

El resultado resultante debe ser una imagen PNG separada (puede nombrarla como desee).

Ejemplos

Super Mario

Original:

Borroso:

Tablero de damas

Original:

Borroso:

Patatas fritas

Original

Borroso

Ya no es tan crujiente

gótico americano

Original:

Borroso:

Para ver el desenfoque en imágenes más grandes, es mejor ejecutar el programa nuevamente en la imagen borrosa:

Desafío

El código más corto para desenfocar una imagen PNG determinada gana.

Puede usar bibliotecas de procesamiento de imágenes (como PIL) pero no debe usar funciones de desenfoque integradas (Mathematica, lo estoy mirando).

Nota

Como @orlp dice a continuación:

Para el registro, (que yo sepa) este no es un método de desenfoque estándar. Este desafío no es un recurso educativo.


No estoy muy contento con esa escala. ndebería aparecer en el denominador.
Karl Napf

Pensé en algo muy diferente cuando vi "Blunt": P.
Adnan

3
Para el registro, (que yo sepa) este no es un método de desenfoque estándar. Este desafío no es un recurso educativo.
orlp

Si tuviera un píxel blanco rodeado de 8 píxeles blancos (todos rgb (255,255,255)), el píxel borroso sería rgb (312,312,312). ¿Se supone que debemos limitar los valores en el rango [0,255]?
kamoroso94

1
@ kamoroso94 1: Sí, suponga que cualquier número mayor que 255 es 255. 2: Se supone que la imagen de ejemplo representa una imagen de 3 x 1.
Beta Decay

Respuestas:


5

Python, 354 313 bytes

No es el mejor, pero bueno ...

Uso de espacio para sangría de primer nivel, Tabulador para segundo nivel, luego Tab + espacio y Tab + Tab

import Image as I
A=I.open(raw_input())
w,h=A.size
B=I.new('RGB',(w,h))
s=[-1,1,0]
r=range
for x in r(w):
 for y in r(h):
    P=[]
    for d in s:
     for e in s:
        try:P+=[A.load()[x+e,y+d]]
        except:0
    P.pop()
    B.load()[x,y]=tuple(min(int(.5+(1.5*sum([v*v for v in t])/len(P))**.5),255)for t in zip(*P))
B.save("b.jpg")
  • Edit1: reemplazando math.sqrt()con ()**.5gracias a la desintegración beta
  • Edit2: usando minpara sujetar (¡ahorrando mucho!) Y 0por passgracias a Loovjo
  • Edit3: +=[]para .append()guardar 5 bytes
  • Edit4: usando la variable spara la plantilla

1
Seguramente n**0.5es más corto que import math;math.sqrt(n)? ¿Hay alguna razón para esto último?
Beta Decay

Sí lo es, no, no hay razón. Solo lo olvidé.
Karl Napf

2
v if v<256 else 255se puede acortar amin(v,255)
Loovjo

También puede reemplazar passcon0
Loovjo

Debe indicar qué biblioteca de imágenes está utilizando. Si está utilizando PIL / Pillow (y parece que lo está haciendo), debería leer la declaración de importación superior from PIL import Image as I.
Mego

0

MATLAB, 130 bytes

Toma una imagen como entrada y guarda la salida como b.png.

i=double(input(''));m=ones(3);m(5)=0;k=@(x)imfilter(x,m);imwrite(uint8(round((1.5*k(double(i.^2))./k(i(:,:,1)*0+1)).^.5)),'b.png')
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.