Amplía ese reflejo y compensa la imagen, quizás podamos ver la

Anuncio
Amplía ese reflejo y compensa la imagen, quizás
podamos ver la cara del asesino. ¿Mitos de CSI?
Tal vez no…
Leticia Aguilar de la Red
Escuela Politécnica Superior, Ingeniero de Telecomunicación
Email: leticia.aguilar87@gmail.com
Resumen
En este trabajo vamos a abordar la principal problemática de cómo obtener imágenes
en alta resolución (HR) a partir de imágenes de baja resolución (LR) empleando
diversas técnicas matemáticas según la fuente de dichas imágenes. En caso de
disponer de video, utilizaremos técnicas de block matching y de interpolación
utilizando la información temporal disponible. En el caso de disponer de imágenes
independientes (still images), utilizaremos una técnica de deep learning conocida
como sparse-coding que utiliza subespacios vectoriales de un elevado número de
dimensiones.
Introducción
Seguro que todos hemos visto en la televisión como el guionista aplica grandes
derroches de imaginación para salvar la trama en un momento determinado. Que si un
“amplía y compensa” para ver el reflejo del asesino en el brillo de la cabeza de un
tornillo, estilo CSI o una ampliación de la región de un video para reconocer una cara,
como hacen en Underworld. Todos sabemos que esto no es posible, pero el uso y
abuso de este recurso ha llegado hasta tal punto que en Futurama han decidido
parodiarlo (ver Figura 1). Pero… ¿tienen razón? ¿Es verdad que no se puede hacer?
Una imagen digital es un muestreo periódico en 2 dimensiones de la luz que se
percibe, y como sabemos, al muestrear una señal, se pierde información. ¿Podemos
recuperar esa información de alguna forma? La comunidad científica dice que sí, y lo
han demostrado. Este proceso conocido como super resolución utiliza distintas
técnicas para conseguirlo. Cuales aplicar depende de la naturaleza de esas imágenes
y si estas provienen de un video o es una única imagen.
Por definición, una imagen contiene únicamente información espacial, pero si
disponemos de un video, podemos combinar la información espacial con la
información temporal para conseguir recuperar la información perdida. La clave está
1
Figura 1: al intentar hacer un upsampling de una señal muestreada es necesario hacer una
estimación de la información que ha sido descartada en el proceso de muestreo. Esto
normalmente se lleva a cabo mediante procesos de interpolación, procesos que no consiguen
recuperar la información perdida y que por lo tanto dan lugar a imágenes ampliadas de poca
calidad.
en el muestreo que hablábamos antes: dado que un pixel es una muestra en una
posición fija, si en el siguiente frame del video hay un ligero desplazamiento a nivel de
sub-pixel, podemos usar la información recuperada por el 2º frame en el 1º, lo que nos
permitirá hacer la ampliación. Conseguir este desplazamiento no es difícil: si hablamos
de una cámara de un móvil, los pequeños temblores producidos por el pulso de la
persona que sujeta la cámara son suficientes. En el caso de una cámara fija, si esta
está en espacios abiertos, puede ser el viento el que proporcione esos movimientos.
¿Se puede aplicar super resolución cuando solo disponemos de una imagen? Es más
difícil y los resultados obtenidos son mucho más limitados que en múltiples imágenes,
pero si se puede y con cierta calidad. ¿De dónde obtenemos la información que nos
falta? ¿Estamos seguros de que esta no se encuentra presente en la propia imagen y
no hemos sido capaces de verlo? ¿Se podría usar información de otras imágenes que
no tuvieran nada que ver (como por ejemplo de flores) para reconstruir imágenes de
tráfico?
Necesidades
Por lo general, la mayoría de las aplicaciones que obtienen imágenes o vídeos de HR
suelen estar basadas en el análisis y procesamiento posterior de las imágenes
adquiridas. La mayor calidad de las imágenes de HR facilita la interpretación humana y
ayuda también a su procesado mediante técnicas de inteligencia artificial. La
resolución de la imagen determina el nivel de detalle con el que la imagen ha sido
captada, a mayor resolución, mayor será el nivel de detalle de la imagen.
2
Una imagen digital está compuesta de pequeños elementos pictóricos llamados
píxeles. Pueden distinguirse distintos tipos de resolución de una imagen: la resolución
de píxeles (la cantidad de píxeles por unidad de superficie en una impresión o en una
imagen en pantalla), resolución espacial (referida al número de píxeles por unidad de
superficie de la escena de una imagen), resolución espectral, resolución temporal y
resolución radiométrica.
La resolución espacial de una imagen digital está limitada por el tipo de sensor
utilizado en la cámara digital. En la actualidad los sensores de las cámaras suelen ser
de tecnología CCD1 (charge-coupled device: dispositivo de cargas eléctricas
interconectadas) o de tecnología CMOS2 (complementary metal-oxide-semiconductor:
estructuras semiconductor-óxido-metal complementarias). Ambos sensores están
organizados en una matriz bidimensional de sensores fotoeléctricos llamados fotositos
que capturan la imagen bidimensional. En principio la resolución de las imágenes
captadas depende del número de fotositos del sensor. Un alto número de fotositos
posibilita una resolución espacial alta de los sistemas de imagen. Los sensores para
capturar la imagen deben muestrear la señal continua que les llega procedente de la
escena real. La frecuencia de muestreo determina las componentes de alta frecuencia
(detalles de la imagen) que pueden ser captadas. Esto es, a menor resolución del
sensor menor será la frecuencia de muestreo y menor será el número de componentes
de alta frecuencia que puedan ser captadas. La elección de un sensor con un número
bajo de fotositos darían lugar a imágenes de LR en las que se apreciarían efectos de
bloque (imágenes pixeladas).
Una forma de aumentar la resolución espacial de las imágenes sería aumentando el
número de píxeles a costa de disminuir el tamaño de los fotositos. Sin embargo, la
disminución del tamaño de los fotositos conlleva la disminución de la cantidad de luz
que incide sobre cada fotosito, causando el conocido ruido de disparo (shot noise).
Esto obliga a establecer un equilibrio entre el tamaño del sensor y la calidad de la
señal captada. En consecuencia, las limitaciones hardware derivadas del tamaño del
sensor restringen la resolución espacial de las imágenes que pueden ser capturadas.
Paralelamente, también los detalles de la imagen (componentes de alta frecuencia)
están limitados, entre otros factores, por la óptica, debido al emborronamiento de las
lentes (asociado con la función de dispersión puntual: point spread funtion (PSF)), el
efecto de las aberraciones de las lentes, la difracción de apertura y el
emborronamiento debido al movimiento.
La construcción de sistemas de imagen de HR con ópticas de calidad resulta
demasiado costosa. Además de las limitaciones por el costo, pueden aparecer
limitaciones adicionales propias de su aplicación, como por ejemplo, en el caso de
cámaras usadas en vídeo-vigilancia, limitaciones por la velocidad de respuesta y la
capacidad de almacenamiento. En el caso de las imágenes de satélite, las
restricciones físicas propias del satélite (como peso, condiciones extremas, etc.)
limitan el uso ópticas de calidad y de sensores de AR.
Otra forma de abordar este problema es procesando las señales de las imágenes tras
su captura sacando partido a su degradación y a costa de invertir en medios
computacionales tanto hardware como software. Estas técnicas son, específicamente,
conocidas como Super Resolución (SR).
3
Campos de aplicación
Las aplicaciones de la SR se extienden prácticamente a todos los campos donde se
capturen imágenes y se quiera o se necesite mejorar su calidad. En algunos casos,
este proceso sólo persigue el aumento de la calidad perceptual, como en las
aplicaciones de fotografía o vídeo domésticos, pero en el resto de casos, el proceso de
SR podría ayudar de forma importante a otros sistemas de procesamiento de
imágenes, como podría ser el caso de los detectores de objetos o los reconocedores
ópticos de caracteres (OCR), donde una mejor calidad de la imagen del texto a
reconocer mejora de forma importante la cantidad de caracteres correctamente
reconocidos. O en seguridad, donde gracias a aplicaciones de SR se puede reconocer
una cara o recuperar la matrícula de un vehículo en películas que han sido grabadas
por una cámara de seguridad de escasa calidad o a mucha distancia. No podemos
olvidarnos de las aplicaciones médicas donde una mejor calidad de imágenes de
radiografías, ecografía o resonancia magnética puede resultar decisiva a la hora de
encontrar una malformación, una fisura, un trombo o un tumor, por citar solo algunos
ejemplos.
En la Figura 2 vemos un ejemplo claro de qué se puede conseguir con la aplicación de
técnicas de SR
Figura 2. Imagen de baja resolución transmitida por el Mars Pathfinder(a) y el resultado
obtenido por la NASA tras un proceso de SR combinando 10 imágenes de LR.
4
Súper Resolución a partir de múltiples
imágenes
Para solucionar el problema de la SR se han sugeridas una variedad de
aproximaciones que se pueden englobar principalmente en tres familias: métodos
espaciales, soluciones que operan en el dominio de la frecuencia y una familia de
técnicas según las cuales la inversión a una imagen HR desconocida es realizada en
presencia de muy pocas imágenes LR y modelos propensos a errores de borrosidad.
En este trabajo nosotros nos centraremos en los métodos espaciales.
Se parte de la hipótesis básica, de que para aumentar la resolución espacial es
necesaria la existencia de varias imágenes de baja resolución de la misma escena con
pequeños desplazamientos entre ellas, típicamente referidos a desplazamientos de
subpixeles. En la figura 3 se muestra una idea intuitiva de lo anterior mediante una
rejilla de pixeles (o), seguido de pixeles (Δ y +) de otras dos imágenes con
desplazamientos de subpixel. De esta manera las imágenes (Δ) y (+) contienen
detalles de la escena no capturados por (o), que luego pueden ser fusionados para
proveer en general una escena de máxima resolución.
Figura 3. Desplazamiento de subpixel
Note que la imagen (Δ) contiene un desplazamiento exacto de un subpixel, mientras
que la imagen (+) contiene un desplazamiento de un pixel más un subpixel, a lo cual
indica que la aportación de la imagen (+) a la reconstrucción será la menor en el borde
izquierdo del marco de referencia (o). Antes de que una imagen de alta resolución I
pueda ser reconstruida, se debe especificar un modelo para el cual cada una de las k
imágenes de baja resolución gk son generadas a partir de una imagen desconocida i.
Luego concibiendo la imagen como pares o vectores (i, gk), se puede formar la
siguiente relación:
5
Donde la matriz W k modela el proceso de generación único para cada imagen de baja
resolución, y nk es un vector generalizado de ruido. Asumiendo que I es discreto, sin
solapamientos de muestreo basta incluir en W k el movimiento relativo al marco de
referencia (típicamente los referidos a traslaciones txk y tyk y rotación Δk), el aspecto
borroso y la tasa de sub-muestreo (horizontalmente por un factor de L1 y verticalmente
por un factor L2). La figura 4 resume este proceso.
Figura 4. Proceso de LR a HR
El proceso para reconstruir la imagen HR a partir de varias en LR consta de dos
etapas: la primera, consistente en la estimación relativa del movimiento entre varios
frames ,la realizaremos mediante una versión jerárquica del método conocido como
block-matching, mientras que la segunda, de reconstrucción, ubicará la información de
las distintas imágenes en una nueva malla de mayor resolución, interpolando aquellos
puntos en los que no se haya podido recuperar ninguna información, como se puede
apreciar en la Figura 5)
Figura 5. Disposición ordenada de la información obtenida de las imágenes LR para formar la
imagen HR.
6
Estimación del movimiento relativo
El algoritmo empleado se basa en generar una pirámide gaussiana (Figura 6) que nos
permita obtener una gran precisión a la hora de estimar el movimiento, hasta llegar a
un desplazamiento de 1/8 de pixel y a la vez evitar el efecto conocido como ojo de
buey o problema de la apertura (ver Figura 7) que se origina como consecuencia de
utilizar una pequeña ventana de observación en la que se puede observar cómo se
desplaza un borde, pero sin llegar a observar una esquina y como consecuencia de
ello no es posible determinar el movimiento de un objeto de forma precisa
A)
B)
Figura 6: una pirámide gaussiana es una herramienta muy utilizada en visión artificial y consiste
en que a partir de la imagen original (la base) I0 se van generando los distintos niveles Ik
realizando un downsampling del nivel anterior Ik-1 obteniendo una imagen de un cuarto del
tamaño de este. El adjetivo gaussiano hace referencia a que cada etapa de downsampling
viene seguida de un desenfoque gaussiano que suaviza la imagen actuando de filtro paso bajo
2D.
Figura7: en esta figura se ilustra el problema de la apertura que da lugar a un error en la
estimación del movimiento al utilizar una ventana de observación demasiado pequeña en
relación con el objeto sujeto de la observación. En la primera fila se puede observar
(erróneamente) un desplazamiento horizontal, pero al verlo fuera de la ventana de observación
podemos apreciar que el movimiento también tiene una componente vertical.
7
Reconstrucción de la imagen HR
Una vez que cada una de las k-1 imágenes LR de no referencia sean registradas
respecto a una imagen LR de referencia (estimación del movimiento relativo), los
efectos de la tasa de sub-muestreo son superados por la unión de los pixeles
registrados de baja resolución en una malla para formar la imagen de alta resolución,
como se ilustra en la Figura 5 (el marco de referencia es denotado con (o)). Como las
k-1 imágenes LR de no referencia probablemente no tengan desplazamientos exactos
de n/L1 y m/L2 horizontal y vertical (con n y m ∈ ℝ), la malla HR terminará con la
mayoría de los pixeles LR cayendo entre las posiciones de los pixeles de HR. Así, la
interpolación de los pixeles HR no asignados será necesaria. Esto es representado en
el tercer marco de la Figura 5 donde el residuo de los pixeles HR está dado por
valores interpolados. Finalmente, como los pixeles LR fueron muestreados a partir de
una imagen HR borrosa, es necesario un proceso de desenborronamiento para
restaurar una estimación clara de la imagen HR original.
Debido a que una vez colocados nos encontraremos con que para para algunos
pixeles no contamos con información en la red de alta resolución, será necesario hacer
una estimación del valor. Para ello, veremos en este trabajo dos soluciones diferentes,
interpolación bilineal y los vecinos más cercanos ponderados (weighted nearest
neighbors).
Interpolación bilineal
La interpolación bilineal es una extensión de interpolación lineal para dos dimensiones.
Para interpolar un punto dado en la red de HR, se usa el píxel más cercano LR, junto
con sus tres vecinos de la misma imagen LR. Los cuatro píxeles LR son los vértices de
un cuadrado, con el punto que se interpola ubicado dentro de la plaza. Esto se refleja
en la Figura 8.
Figura 8. Imagen 1 se corresponde con X; imagen 2 puntos; imagen 3 triángulos, imagen 4
diamantes
8
En la Figura 8, queremos interpolar el punto dirigido por una flecha. Con el fin de
hacerlo, buscamos el píxel más cercano. En el ejemplo, se corresponde con un píxel
de la imagen 4 (de diamantes en la Figura 8). Entonces, vamos a utilizar los próximos
3 píxeles más cercanos de la misma imagen. Con estos valores, se utiliza la ecuación
siguiente (véase Figura 9) y se obtiene el valor del píxel.
Figura 9. Interpolación Bilineal
Interpolación ponderada del vecino más cercano
Un modelo mejor para interpolar los valores sería el uso de la información de los
píxeles cercanos de cualquier imagen. Esto se corresponde con la interpolación del
vecino más cercano ponderado.
Se da diferentes pesos dependiendo de la distancia de los píxeles desde el píxel que
podemos calcular su valor. Con el fin de hacer esto, se utilizará la siguiente ecuación:
El número del vecino puede ser elegido. En la Figura 10 se expone la metodología
utilizada con tres vecinos. El peso del píxel de la Figura 10 será más alto que los
píxeles de las imágenes de dos y tres.
9
Figura 10. La imagen 1 se corresponde con X, la imagen 2 con puntos, la imagen 3 con
triángulos y la imagen 4 con diamantes.
Resultados obtenidos
Resultados cuantitativos
Para medir la calidad de los algoritmos de SR se utiliza el PSNR (Pico de la relación
señal a ruido).
Con
En la tabla siguiente (Tabla 1) se observa como la weighted nearest neighbor da
mejores resultados que la interpolación bilineal, ya que, a mayor PSNR mejor será la
reconstrucción realizada.
10
Tabla 1. PSNR frente al número de imágenes con un factor de up-sampling de 2.
Resultados cualitativos
Para obtener los resultados cualitativos se ha utilizado un teléfono móvil grabando en
modo video, que debido a las pequeñas vibraciones producidas por el pulso del
observador, ha generado los pequeños desplazamientos entre frames necesarios para
generar la imagen HR.
Ejemplo 1: cartel indicador de calle
Figura 11: esta imagen muestra cartel con el nombre de la calle a la que pertenece y el cual es
imposible de leer dadas las condiciones de resolución y calidad de esta imagen.
11
A)
B)
Figura 12: en A) se muestra un recorte de la Figura 11 ampliado mediante técnicas
tradicionales de zoom, como se puede ver, el nombre de la calle sigue siendo imposible de
entender. En el caso de B) se muestra el resultado del algoritmo de super resolución, en este
caso, ya si que se puede leer que el nombre de la calle es la Via S. Simone.
Ejemplo 2: matricula de coche.
Figura 13: en esta imagen se muestra un coche cuya matrícula es imposible de distinguir
debido a la distancia y a la calidad de la imagen.
12
Figura 14: imagen ampliada usando técnicas de zoom tradicionales.
Figura 15: imagen SR utilizando una pirámide gaussiana con 4 vecinos utilizando el método de
interpolación weighted nearest neighbor.
Al igual que en el ejemplo anterior, se observa una mejora considerable al aplicar SR a
la matrícula del coche, ya que pasamos de no apreciar ningún dígito de la misma, a
ver los mismos con una claridad suficiente, ya que una vez aplicado SR, es posible
distinguir el identificador del vehículo.
13
Súper resolución a partir de una única imagen
El problema de aplicar SR a una única imagen consiste en que dada una imagen Y de
baja resolución, debemos recuperar una imagen de alta resolución X de la misma
escena. En este trabajo veremos dos soluciones a este problema:
1.
Que exige que la X recuperada debe ser coherente con la Y de entrada con
respecto al modelo de observación de la imagen.
2.
Sparse coding, asume que los parches de alta resolución pueden ser
representados por un diccionario elegido apropiadamente, y que sus
representaciones dispersas pueden ser recuperadas a partir de la observación
de baja resolución.
1. El problema de la SR puede verse como un problema inverso (Figura 16):
Donde,
Yk - imagen LR
X - imagen HR
D - Matriz de submuestreo
Bk - Matriz de emborronamiento
Mk - Matriz de warping (desplazamiento relativo)
nk - ruido aleatorio
Figura 16. Esquema típico de formación de una imagen de baja resolución a partir de una de
HR.
Así, sabiendo que los datos de que disponemos realmente son los de la imagen en
baja resolución, podemos realizar una estimación de la imagen en alta resolución que,
tras pasar por el sistema descrito, produjo las mismas.
14
Este procedimiento presenta el problema de que hay infinitas imágenes de HR que
satisfacen esta restricción, por lo que se desarrolla el siguiente método que obtiene la
mejor la solución posible.
2.
En este caso los conjuntos de entrenamiento son modelados como dos
diccionarios (uno para los patrones de LR y el otro los patrones de HR) y ambos con el
mismo número de patrones. Este algoritmo busca, para cada patrón obtenido de la
imagen observada, el conjunto de patrones vecinos en el conjunto de patrones
ejemplo de LR, que minimicen la norma L1, más robusta al ruido que la norma L2
(distancia euclídea) que se ha usado en anteriores trabajos.
Descripción detallada del algoritmo que se implementa en [2]
1. Entrada: Diccionarios entrenados Dh y Dl, y la imagen de baja resolución Y.
2. Por cada parche de 3x3 y, perteneciente a Y, tomado a partir de la esquina superior
izquierda con 1 superposición de píxeles en cada dirección,


Calculamos la media de valores de píxel m del parche y.
Resolvemos el problema de optimización siguiente:
Donde:
Siendo en la mayoría de los casos β=1, y F y P se obtiene de resolver el siguiente
problema de optimización:
donde la matriz P extrae la región de superposición entre el parche de destino actual y
la imagen de alta resolución reconstruida previamente, y w contiene los valores de la
imagen previamente reconstruida de alta resolución en la superposición.

Generar el parche de alta resolución x, tal que:
Y ponemos el parche generado x+m en una imagen de alta resolución X0.
3. Fin.
15
4. Usando la técnica del gradiente descendente, encontrar la imagen más cercana a
X0 que satisface la restricción de reconstrucción:
5. Salida: Imagen X* de alta resolución.
Resultados
En las Figuras 17, 18 y 19 podemos apreciar que se consigue gracias al método
explicado. De izq. a dcha., imagen original en baja resolución, interpolación bicubica y
el método indicado en [2].
Figura 17.
Figura 18.
Figura 19.
16
En todas las imágenes apreciamos la mejora visual que obtenemos entre la
interpolación bicubica (interpolación de mejor calidad que se usa por defecto) y el
método implementado en [2], que aplica SR cuando disponemos solo de una única
imagen.
Evaluando los resultados cuantitativos mediante el Error Cuadrático Medio (RMSE)
obtenemos los siguientes resultados:
Figura 17
Figura 18
Figura 19
Interpolación
bicúbica
6.843
4.066
12.724
Método indicado
en [2]
6.525
3.761
11.817
El Error Cuadrático Medio (RMSE o RMSD) es el promedio espacial de las diferencias
al cuadrado entre la predicción y el análisis del modelo o de las observaciones de
verificación, validas para el mismo instante.
Cuanto menor sea el valor del RMSE obtenido mejor será nuestro modelo. Por tanto,
el algoritmo implementado mejora los resultados obtenidos por la interpolación
bicúbica.
Futuras líneas de trabajo
Tradicionalmente se ha venido utilizando el PSNR para cuantificar el rendimiento de la
súper resolución. No obstante, consideramos que no es la mejor forma de cuantificar
este proceso, dado que no tiene en cuenta el factor humano. Se dan casos que
utilizando un algoritmo A, la imagen resultante IA obtiene un PSNRA más alto que
usando un algoritmo B, sin embargo, la imagen IB se aprecia mejor, por algo tan
sencillo como que los bordes estén más acentuados y por lo tanto la imagen parezca
mejor enfocada. ¿Es por lo tanto el PSNR una mala medida? Creemos que no, ya que
mide la fidelidad de la imagen ampliada con la imagen original, sin embargo sería
17
interesante complementarlo con un análisis perceptual, que permita modelar que
algoritmo daría un mejor resultado desde el punto de vista humano. Para ello, y como
se viene comentando en algunos foros de debate, creemos que debería usarse el
método SSIM (Structural SIMilarity), dado que es más consistente con la percepción
del ojo humano.
Donde,
o
la media de ;
o
la media de ;
o
la varianza de ;
o
la varianza de ;
o
o
o
o
la covarianza de
,
denominador
e ;
son dos variables que establecen la división con un tenue
el rango dinámico del valor de los pixeles (típicamente es
y
);
por defecto
Naturalmente, todo esto depende del uso que se vaya a dar a estas imágenes
reconstruidas. En el caso de utilizar las imágenes en el contexto de una investigación
policial, será más interesante aplicar un modelo perceptual para la recuperación con el
objetivo de que se puedan reconocer mejor las caras de los implicados. Sin embargo,
si dichas imágenes van a conformar la entrada de un sistema de visión por
computador, interesará ser lo más fiel posible a la imagen inicial.
Por norma general, y recuperando las aplicaciones citadas anteriormente, auguramos
que el análisis perceptual va a ser el que más beneficie a la expansión de estas
técnica, lo que es consistente con otros avances tecnológicos ocurridos con
anterioridad que han tenido una gran explosión como consecuencia de utilizar este tipo
de análisis y modelos, como es el caso del formato de compresión MPEG LAYER 3
más comúnmente conocido como MP3.
18
Bibliografía
[1] Reconstrucción de imágenes de alta resolución mediante técnicas de super
resolución en el dominio espacial.
Eduardo García Martin
[2] Image Super-Resolution via Sparse Representation
Jianchao Yang,Student Member, IEEE,John Wright,Student Member, IEEEThomas
Huang,Life Fellow, IEEE and Yi Ma, Senior Member, IEEE
[3] Artículo: Superresolución
Ing. Fausto Morales
[4] http://en.wikipedia.org/wiki/Root-mean-square_deviation
[5] Bagon S. Glasner, D. and Irani.M. Super-resolution from a single image.
In Proc. of the 12th IEEE International Conference on Computer Vision, (ICCV), 2009.
[6] Algoritmos para superresolución en imágenes y vídeo
D. Francisco Comeztagle Sepulveda
[7] http://en.wikipedia.org/wiki/Superresolution
[8] http://en.wikipedia.org/wiki/Structural_similarity
19
Descargar