Sei sulla pagina 1di 23

2019

INFORMEMATEMATICAS ESPECIALES:
LEER UN RASTER DE SUPERFICIE
CONTINUA

INTEGRANTES:
Jhon Alexander Amaya
Adrián Alejandro Marín
Nicolás Soto León
María Camila Bolaños

ASIGNATURA: Matemáticas
Especiales
PROFESOR: Robín Olaya
18-7-2019
INTRODUCCIÓN

Leer un raster de superficie continua (altura, temperatura, radiación solar, etc.) que
permita visualizar la imagen, muestre las estadísticas de la misma (resolución,
tamaño, celda número de filas y columnas, valor máximo y valor mínimo, etc.) que
permita ingresar una coordenada X, Y que devuelva el valor de pixel en ese punto,
aplicando los conocimientos adquiridos en el curso de matemáticas especiales.
Contenido
OBJETIVOS. ......................................................................................................................................... 3
Objetivo General. ............................................................................................................................ 3
Objetivos Específicos. ...................................................................................................................... 3
RASTER ................................................................................................................................................ 4
Rásteres en forma de mapas base .................................................................................................. 4
Rásteres en forma de mapas de superficie ..................................................................................... 5
Rásteres en forma de mapas temáticos .......................................................................................... 5
Rásteres en forma de atributos de una entidad ............................................................................. 6
¿Por qué se han de almacenar datos en forma de ráster? ......................................................... 7
3.CARACTERISTICAS DEL RASTER ....................................................................................................... 7
Resolución Raster: ........................................................................................................................... 7
Tipos de resolución ......................................................................................................................... 8
La resolución espectral:................................................................................................................... 8
La resolución temporal: .................................................................................................................. 9
La resolución radiométrica:............................................................................................................. 9
Resolución espacial y escala ............................................................................................................ 9
Celda:............................................................................................................................................. 10
METODOLOGIA ................................................................................................................................. 11
BIBLIOGRAFIA ................................................................................................................................... 21
OBJETIVOS.

Objetivo General.
Implementar las herramientas que nos brinda Python para crear un Raster
de superficie continua que nos permita visualizar sus características.

Objetivos Específicos.

 Leer un raster de superficie continua (altura, temperatura,


radiación solar, etc.)
 Mostrar las estadísticas del Raster tanto en resolución, tamaño,
celda, número de filas y columnas, valor máximo y valor mínimo.
 Permitir ingresar una coordenada X, Y.
 Devuelva el valor de pixel en ese punto por medio de una interfaz
gráfica
RASTER
El raster es un tipo de imagen que usa una cuadrícula rectangular de colores para
representar las imágenes. Cada punto de la cuadrícula es un píxel. Las imágenes
rasterizadas son bitmaps o mapas de bits que pueden tener distintos formatos de
archivo.
A cada píxel se le asigna una ubicación y un valor de color específicos. Al trabajar
con imágenes de mapa de bits, se editan los píxeles en lugar de los objetos o las
formas.

un ráster consta de una matriz de celdas (o píxeles) organizadas en filas y columnas


(o una cuadrícula) en la que cada celda contiene un valor que representa
información, como la temperatura. Los rásteres son fotografías aéreas digitales,
imágenes de satélite, imágenes digitales o incluso mapas escaneados.

Los datos almacenados en formato ráster representan fenómenos del mundo real:

 Los datos temáticos (también conocidos como discretos) representan


entidades como datos de la tierra o de uso de la tierra.
 Los datos continuos representan fenómenos como la temperatura, la
elevación o datos espectrales, entre ellos imágenes satelitales y fotografías
aéreas.
 Las imágenes incluyen mapas escaneados o dibujos y fotografías de
edificios.

Los rásteres temáticos y continuos se pueden visualizar en el mapa en forma de


capas de datos junto con otros datos geográficos, pero a menudo se utilizan como
datos de origen para el análisis espacial con la extensión de ArcGIS Spatial Analyst
extensión. Los rásteres de imágenes suelen utilizarse como atributos en tablas:
pueden visualizarse con datos geográficos y se utilizan para transmitir información
adicional acerca de las entidades geográficas de mapas.

Si bien la estructura de datos ráster es simple, es excepcionalmente útil para una


amplia variedad de aplicaciones. En un SIG, los usos de los datos ráster se pueden
dividir en cuatro categorías principales:

Rásteres en forma de mapas base

Un uso común de los datos ráster en un SIG es en forma de visualización de fondo


para otras capas de entidades. Por ejemplo, las orto fotografías que se visualizan
debajo de otras capas ofrecen al usuario de mapas la garantía de que las capas de
mapa se alinean espacialmente y representan tanto objetos reales como
información adicional. Las tres fuentes principales de mapas base ráster son las orto
fotografías de fotografías aéreas, imágenes de satélite y mapas escaneados. A
continuación, se muestra un ráster que se utiliza como

Rásteres en forma de mapas de superficie

Los rásteres son apropiados para representar datos que cambian continuamente en
un entorno (superficie). Ofrecen un método efectivo para almacenar la continuidad
en forma de superficie. También proporcionan una representación de superficies
con espacios regulares. Los valores de elevación que se miden desde la superficie
de la Tierra son la aplicación más común de los mapas de superficie, pero otros
valores, como las precipitaciones, la temperatura, la concentración y la densidad de
población, también pueden definir superficies que se pueden analizar
espacialmente. En el siguiente ráster se visualiza la elevación: se utiliza el color
verde para mostrar una elevación menor y celdas de color rojo, rosa y blanco para
mostrar elevaciones mayores.

Rásteres en forma de mapas temáticos

Los rásteres que representan datos temáticos se pueden derivar al analizar otros
datos. Una aplicación de análisis común consiste en clasificar una imagen de
satélite por categorías de cobertura de suelo. Básicamente, esta actividad agrupa
los valores de datos multiespectrales en clases (como tipo de vegetación) y asigna
un valor categórico. También es posible obtener mapas temáticos a partir de
operaciones de geoprocesamiento que combinen datos de varias fuentes como, por
ejemplo, datos vectoriales, ráster y de terreno. Por ejemplo, puede procesar datos
por medio de un modelo de geoprocesamiento para crear un dataset ráster
apropiado para una actividad específica. A continuación, encontrará un ejemplo de
dataset ráster clasificado en el que se muestra el uso del suelo.

Rásteres en forma de atributos de una entidad

Los rásteres utilizados como atributos de una entidad pueden ser fotografías
digitales, documentos escaneados o dibujos escaneados relacionados con un
objeto o ubicación geográfica. Una capa de parcela podría tener documentos
legales escaneados que identifiquen la transacción más reciente de dicha parcela,
o una capa que represente las entradas a una cueva que podría incluir imágenes
de las entradas reales a las cuevas asociadas a las entidades de puntos. A
continuación, encontrará una imagen digital de un viejo árbol de gran tamaño, que
podría utilizarse como atributo de una capa de paisaje que puede mantener una
ciudad.
¿Por qué se han de almacenar datos en forma de ráster?
En ocasiones no contará con la opción de almacenar los datos en forma de ráster,
ya que, por ejemplo, las imágenes solo se encuentran disponibles en forma de
ráster. No obstante, existen otras muchas entidades (como de puntos) y mediciones
(como de precipitaciones) que se podrían almacenar ya sea en forma de ráster o de
tipo de datos de entidad (vector).

Las ventajas de almacenar los datos en forma de ráster son las siguientes:

 Estructura de datos simple: matriz de celdas con valores que representan


una coordenada y que, en ocasiones, se encuentra vinculada a una tabla de
atributos.
 Formato potente para análisis espacial y estadístico avanzado.
 Capacidad de representar superficies continuas y llevar a cabo análisis de
superficie.
 Capacidad de almacenar puntos, líneas, polígonos y superficies de manera
uniforme.
 Capacidad de llevar a cabo superposiciones rápidas con datasets complejos.

Existen otras consideraciones para almacenar los datos en forma de ráster que
podrían convencerle para que utilice una opción de almacenamiento basada en
vectores. Por ejemplo:

 Podrían producirse imprecisiones espaciales debido a los límites impuestos


por las dimensiones de celda del dataset ráster.
 Los datasets ráster son potencialmente de gran tamaño. La resolución
aumenta a medida que disminuye el tamaño de la celda. Sin embargo, el
coste también aumenta en el espacio en disco y en las velocidades de
procesamiento. Para un área determinada, el cambio de celdas a la mitad del
tamaño actual requerirá cuatro veces más espacio de almacenamiento,
dependiendo del tipo de datos y las técnicas de almacenamiento utilizadas.

Además, se producirá una pérdida de precisión que ocasionará una restructuración


de datos a un límite de celda ráster con espacios regulares.

3.CARACTERISTICAS DEL RASTER

Resolución Raster: La resolución espacial de un ráster hace referencia al tamaño de


las celdas de un dataset ráster y a la relación entre los píxeles de la pantalla y los
píxeles de la imagen en la actual escala de mapa. Por ejemplo, un píxel de pantalla
puede ser el resultado de nueve píxeles de imagen que se han vuelto a muestrear
en uno (una resolución ráster de 1:9). En este caso, cada píxel de pantalla tiene que
mostrar nueve celdas ráster, lo que significa que la imagen perderá nitidez y grado
de detalle.
Una resolución de 1:1, sin embargo, significa que cada píxel de pantalla muestra
sólo una celda ráster. Si utiliza el zoom para acercarse a una resolución ráster mayor
que 1:1, no verá más detalle en esa imagen.

Tipos de resolución
Cuando se trabaja con datos ráster con imágenes, se deben tener en cuenta cuatro
tipos de resolución: resolución espacial, resolución espectral, resolución temporal y
resolución radiométrica.

En un SIG, se suele mostrar más preocupación por la resolución espacial de un


dataset ráster, en especial cuando se visualizan o se comparan datos de ráster con
otros tipos de datos, como los de un vector. En este caso, la resolución se refiere al
tamaño de celda (el área cubierta en el terreno y representada por una única celda).
Una mayor resolución espacial implica que hay más celdas por área de unidad, por
lo tanto, el gráfico de la izquierda representa una mayor resolución espacial que el
gráfico de la derecha.

Comparación de resoluciones espaciales.

La resolución espectral: describe la capacidad de un sensor de distinguir entre


intervalos de longitud de onda en el espectro electromagnético. Cuanto mayor es la
resolución espectral, más se restringe el rango de longitud de onda para una banda
en particular. Por ejemplo, una fotografía (imagen) aérea, de escala de grises y de
banda única registra los datos de longitud de onda que se extienden sobre gran
parte de la parte visible del espectro electromagnético, por lo tanto, tiene una
resolución espectral baja. Una imagen a color (con tres bandas) básicamente
captura datos de longitud de onda desde tres partes más pequeñas de la parte
visible del espectro electromagnético, las partes rojas, verde y azul. Por lo tanto,
cada banda en la imagen a color tiene una mayor resolución espectral que la banda
única en la imagen de escala de grises. Los sensores multiespectral e hiperespectral
avanzados capturan datos de cientos de bandas espectrales muy restringidas a lo
largo de las partes del espectro electromagnético, lo que hace que los datos tengan
una resolución espectral muy alta.
La resolución temporal: se refiere a la frecuencia a la cual se capturan las imágenes
en el mismo lugar de la superficie de la tierra, también se denomina período de
revisita, que es el término que se usa generalmente para los sensores satelitales.
Así, un sensor que captura datos una vez por semana tiene una mayor resolución
temporal que uno que captura datos una vez por mes.

La resolución radiométrica: describe la capacidad de un sensor de distinguir objetos


visualizados en la misma parte del espectro electromagnético; esto es sinónimo de
la cantidad de valores de datos posibles en cada banda. Por ejemplo, una banda
Landsat comprende, típicamente, datos de 8 bits, y una banda IKONOS comprende,
típicamente, datos de 11 bits, por lo tanto, los datos IKONOS tienen mayor
resolución radiométrica.

Resolución espacial y escala


La resolución espacial se refiere a la dimensión del tamaño de celda que representa
el área cubierta en el terreno. Por lo tanto, si el área cubierta por una celda es de 5
x 5 metros, la resolución será de 5 metros. Cuanto mayor sea la resolución de un
ráster, más pequeño será el tamaño de celda, y por lo tanto, mayor será el detalle.
Esto es lo opuesto de lo que ocurre con la escala. Cuanto más pequeña sea la
escala, menor será el detalle. Por ejemplo, una ortofotografía que se visualiza a una
escala de 1:2.000 muestra más detalles (aparece cerca) que una que se visualiza a
una escala de 1:24.000 (aparece lejos). Sin embargo, si esta misma ortofoto tiene
un tamaño de celda de 5 metros, la resolución permanecerá igual sin importar la
escala a la que se visualiza, ya que el tamaño de la celda física (el área cubierta en
el terreno y representada por una única celda) no cambia.

Debajo, la escala de la imagen de la izquierda (1:50.000) es más pequeña que la


escala de la imagen de la derecha (1:2.500); sin embargo, la resolución espacial
(tamaño de celda) de los datos es la misma.

Efecto de aumentar la escala con una resolución espacial constante.


Debajo, la resolución espacial de los datos que se utilizaron en la imagen de la
izquierda es inferior que la resolución espacial de los datos que se utilizaron en la
imagen de la derecha. Esto significa que el tamaño de celda de los datos en la
imagen de la izquierda es mayor que la de los datos en la imagen de la derecha; sin
embargo, la escala a la que se muestra cada una es la misma.

Efecto de la resolución de datos aumentada con la constante de escala.


Celda:

El nivel de detalle (de entidades/fenómenos) que representa un ráster depende, en


general, del tamaño de la celda (píxel), o la resolución espacial, del ráster. La celda
debe ser lo suficientemente pequeña para capturar el detalle necesario y lo
suficientemente grande para realizar el análisis y el almacenamiento del equipo de
manera eficiente. Con un ráster de tamaño de celda más pequeño se pueden
representar más entidades, entidades más pequeñas o más detalle en la extensión
de entidades. Sin embargo, con frecuencia, más no suele ser mejor. Los tamaños
de celda más pequeños en datasets ráster más grandes representan una superficie
completa, por lo tanto, se necesita un espacio de almacenamiento mayor, que
implica más tiempo de procesamiento.

Comparar tamaños de celda pequeños frente a grandes


No siempre es sencillo seleccionar el tamaño de celda correcto. Debe equilibrar la
necesidad de la aplicación de una resolución espacial con los requisitos prácticos
para la visualización rápida, el tiempo de procesamiento y el almacenamiento.
Esencialmente, en un SIG, los resultados serán igual de exactos que el dataset
menos exacto. Si utiliza un dataset clasificado derivado de imágenes Landsat de
resolución de 30 metros, entonces puede no ser necesario crear un modelo digital
de elevación (DEM) u otros datos secundarios con una resolución mayor, como 10
metros. Cuanto más homogénea sea un área para las variables críticas, como
topografía y uso del suelo, mayor será el tamaño de celda sin que afecte a la
exactitud.

Comparación de la resolución espacial con el contenido de la información.

La determinación de un tamaño de celda adecuado es tan importante en las etapas


de planificación de la aplicación SIG como la determinación de los datasets a
obtener. Un dataset ráster siempre se puede remuestrear para tener un tamaño de
celda más grande, sin embargo, no obtendrá más detalle si remuestrea el ráster
para tener un tamaño de celda más pequeño. Según los planes que tenga para los
datos, puede ser útil guardar una copia de los datos en el tamaño de celda más
pequeño y exacto, mientras los remuestrea para que coincidan con el más grande
y menos exacto. Esto puede aumentar la velocidad del procesamiento de análisis.

METODOLOGIA

Usando el módulo de Python Osgeon y uno de sus sub módulos operativos GDAL,
mediante el uso de una Scanline la cual funciona como un escáner que analiza y
procesa cada pixel del raster según el número de filas y columnas de este, el método
Scanline / Struct depende de Fmttypes y sus valores se pueden proporcionar en un
diccionario, este módulo funciona con análisis espaciales de tipo raster y permite
emplear múltiples funciones y características funcionales para el desarrollo del
proyecto.
Para la metodología a emplear es necesario la instalación del módulo Osgeon el
cual nos permitirá importar, ejecutar y manipular el formato tipo raster desde
comando de Python, para importar un raster, la cual es una librería que contiene el
módulo Gdal.
La estructura del programa constara de una interfaz gráfica que pida al usuario en
primera instancia importar al archivo ejecutable desde la carpeta en que este se
encuentre, desarrollando un código que permita esta función. Seleccionando el
archivo directamente desde su ubicación y pueda cargarse al programa, luego de
cargarse, pueda mostrarse el raster como tal y mostrar datos estadísticos básicos
sobre el raster, como número de filas y columnas, valor máximo y mínimo de pixel
y su resolución, además de pedirle al usuario datos coordenados X Y para saber y
determinar valores específicos del cierto pixel, como su altura o radiación
dependiendo de la temática del raster.
La interface básicamente constará de un botón el cual permitirá abrir el archivo
raster desde su ubicación y dos cajones de texto para ingresar las coordenadas X.
Y, textos emergentes donde se evidenciará l información del raster.
A continuación, describiremos el proceso que realizamos para poder ejecutar el
raster:

 Primero instalamos en nuestros equipos ANACONDA que es una distribución


libre y abierta de los lenguajes Python y R, utilizada en ciencia de datos, y
aprendizaje automático. Esto incluye procesamiento de grandes volúmenes
de información, análisis predictivo y cómputos científicos.

 Una vez instalado el programa procedemos a instalar la librería GDAL que


es una biblioteca de traductores para formatos de datos geoespaciales raster
y vectoriales que se lanza bajo una licencia de Código Abierto de estilo X /
MIT de la Open Source Geospatial Foundation.
 Una vez instalado las librerías necesarias procedemos a generar el código,
a continuación, describiremos la realización del código y su ejecución.

Importamos las librerías que necesitamos, np corresponde a una abreviación de


numpy.

from es de un llamado global de la información, que tenga adentro e indica un


todo.
Pyplot es la Liberia graficadora y se resume en plt.
A continuación, definimos las variables que vamos a necesitar para nuestro
proyecto, que se encuentran relacionadas con la imagen, cada variable es una caja
vacía que toma un nombre en particular.

raster = None, es la imagen que se introduce el el fromato TIFF


band = None son las capas de las diferentes frecuencias que maneja la imagen
rasterArray = None es la interpretación numérica de la imagen en Filas y columnas
de números
Información general del raster
resolucion = None
tCelda = None
filas = None
columnas = None
Valores maximos y minimos del raster
maxValue = None
minValue = None
Coordenadas a buscar en el raster
x = None
y = None
value = None
def readRaster():
global raster
global rasterArray

El Open es el método el cual realiza una búsqueda del archivo con el nombre
especificado con extinción.
raster = gdal.Open(nombreTXT.get())
El método raster.GetRasterBand retorna la cantidad de bandas en la cual la posición
1 es la suma de todas
band = raster.GetRasterBand(1)
En este metodo band.ReadAsArray combierte la la imagen en una matriz numerica
o arreglo
rasterArray = band.ReadAsArray()
el + es una concatenación de términos de los cuales el x esta en medio de los dos.
shape es una propiedad ósea una información que me determina la resolución de
la imagen por medio de un arreglo
se debe tener cuenta que al momento de recorrer el arreglo la posición de las
coordenadas es inverso al de la imagen
lo que se dice es que x,y en la imagen queda como y,x en el arreglo
el 1 y 0 es la posicion del valor de la resolucion en el arreglo
rasterArray es la descricion de la matriz numerica
El STR combierte cualquier informacion a texto
resolucion = str(rasterArray.shape[1]) + " x " + str(rasterArray.shape[0])

resoLBL.configure(text = resolucion) es el cambio de la información que se


visualiza en el programa

el + es una concatenacion de terminos de los cuales el x esta en medio de los dos


GetGeoTransform es el metodo que me determina la resolucion de la imagen por
medio de un arreglo es por eso que se coloca () para llamarlo
De los datos de raster se toman los datos requeridos en donde el 1 y 5 son las
dimensiones del pixel
El STR combierte cualquier informacion a texto

tCelda = str(raster.GetGeoTransform()[1]) + "," +


str(raster.GetGeoTransform()[5])

Es el cambio de la informacion que se visualiza en el programa


tCeldaLBL.configure(text = tCelda)

band.YSize propiedad busca el numero de filas

filas = band.YSize

filasLBL.configure(text = str(filas))

band.XSize propiedad busca el numero de columnas

columnas = band.XSize

columnasLBL.configure(text = str(columnas))
minValue = minValueInRaster(rasterArray)
minLBL.configure(text = str(minValue))

maxValue = maxValueInRaster(rasterArray)
maxLBL.configure(text = str(maxValue))

def minValueInRaster(ra):

como hay zonas en el tif que no poseen información tomamos el valor de esos
pixeles que no poseen información y le asignamos una descripción con el fin de
evirtar tomar estos valores como mínimos
noData = ra.min()
value = ra.max()

for x in range(ra.shape[1]):
for y in range(ra.shape[0]):

!= corresponde a decir que es diferente a ese valor


# ra[y,x] es el valor sobre cada pixel durante su recorrido en el raster
if ra[y,x] != noData:
en este caso se hace una comparación del valor máximo encontrado durante el
recorrido haciendo comparaciones de los valores presentes dentro del arreglo hasta
encontrar un valor mínimo
if value > ra[y,x]:
value = ra[y,x]

return value

def maxValueInRaster(ra):
value = ra.min()
for x in range(ra.shape[1]):
for y in range(ra.shape[0]):
if value < ra[y,x]:
value = ra[y,x]

return value

def findValue():
x = int(xTXT.get())
y = int(yTXT.get())

value = rasterArray[y, x]

valorLBL.configure(text = str(value))

def showRaster():

plt.imshow(rasterArray, cmap="gray")
plt.show()

window = Tk()
window.title('Lector Raster')

nombreTXT = Entry(window, width=10, font=("Arial Bold", 20))


nombreTXT.grid(column=0, row=0)
leerBTN = Button(window, text="Leer Raster", font=("Arial Bold", 20),
command=readRaster)
leerBTN.grid(column=1, row=0)
textresoLBL = Label(window, text="Resolucion: ", font=("Arial Bold", 20))
textresoLBL.grid(column=0, row=1)
resoLBL = Label(window, text="-", font=("Arial Bold", 20))
resoLBL.grid(column=1, row=1)

texttCeldaLBL = Label(window, text="Tamaño del Celda: ", font=("Arial Bold", 20))


texttCeldaLBL.grid(column=0, row=2)
tCeldaLBL = Label(window, text="-", font=("Arial Bold", 20))
tCeldaLBL.grid(column=1, row=2)

textfilasLBL = Label(window, text="Numero de Filas: ", font=("Arial Bold", 20))


textfilasLBL.grid(column=0, row=3)
filasLBL = Label(window, text="-", font=("Arial Bold", 20))
filasLBL.grid(column=1, row=3)

textcolumnasLBL = Label(window, text="Numero de Columnas: ", font=("Arial Bold",


20))
textcolumnasLBL.grid(column=0, row=4)
columnasLBL = Label(window, text="-", font=("Arial Bold", 20))
columnasLBL.grid(column=1, row=4)

textminLBL = Label(window, text="Valor Minimo: ", font=("Arial Bold", 20))


textminLBL.grid(column=0, row=5)
minLBL = Label(window, text="-", font=("Arial Bold", 20))
minLBL.grid(column=1, row=5)

textmaxLBL = Label(window, text="Valor Maximo: ", font=("Arial Bold", 20))


textmaxLBL.grid(column=0, row=6)
maxLBL = Label(window, text="-", font=("Arial Bold", 20))
maxLBL.grid(column=1, row=6)

xLBL = Label(window, text="X: ", font=("Arial Bold", 20))


xLBL.grid(column=0, row=7)
xTXT = Entry(window, width=10, font=("Arial Bold", 20))
xTXT.grid(column=1, row=7)

yLBL = Label(window, text="Y: ", font=("Arial Bold", 20))


yLBL.grid(column=0, row=8)
yTXT = Entry(window, width=10, font=("Arial Bold", 20))
yTXT.grid(column=1, row=8)

textvalorLBL = Label(window, text="Valor: ", font=("Arial Bold", 20))


textvalorLBL.grid(column=0, row=9)
valorLBL = Label(window, text="-", font=("Arial Bold", 20))
valorLBL.grid(column=1, row=9)

findBTN = Button(window, text="Buscar Valor", font=("Arial Bold", 20),


command=findValue)
findBTN.grid(column=0, row=10)

visualizarBTN = Button(window, text="Visualizar Raster", font=("Arial Bold", 20),


command=showRaster)
visualizarBTN.grid(column=0, row=11)

window.mainloop()
BIBLIOGRAFIA
http://desktop.arcgis.com/es/arcmap/10.3/manage-data/raster-and-
images/what-is-raster-data.htm
https://www.anaconda.com/distribution/
https://anaconda.org/conda-forge/gdal

Potrebbero piacerti anche