{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "5oek3G8iYgpD"
},
"source": [
"# Aula2.Ex2. Imagens Matriciais $\\times$ Imagens Vetoriais\n",
"Na Aula 2, sobre conceitos envolvidos na Computação Gráfica, vemos que podemos explorar imagens no \"mundo\" vetorial e matricial. \n",
"\n",
"*Imagens Vetoriais* são representadas por vértices e funções geométricas para \"construir\" a imagem. Na prática, isso significa que podemos aplicar transformações geométricas como escala, rotação e translação nesses objetos.\n",
"\n",
"*Imagens Matriciais*, formadas por um conjunto de pixeis, são uma amostra da imagem real. Neste exercício, veremos o efeito em mudar a escala (alterar o tamanho) em uma imagem matricial $\\times$ imagem vetorial."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Eb2xptosYgpd"
},
"source": [
"## Carregar as bibliotecas necessárias para o exercício"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"executionInfo": {
"elapsed": 999,
"status": "ok",
"timestamp": 1618504472745,
"user": {
"displayName": "Ricardo Marcondes Marcacini",
"photoUrl": "",
"userId": "13689272637408260080"
},
"user_tz": 180
},
"id": "Voe1Qe7HYgpe"
},
"outputs": [],
"source": [
"from PIL import Image\n",
"import requests\n",
"from io import BytesIO\n",
"from IPython.display import display # to display images"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c_3jP9XCYgpg"
},
"source": [
"## Fazer o download de uma imagem da internet\n",
"Tente trocar a URL por uma imagem de sua preferência."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 199
},
"executionInfo": {
"elapsed": 3277,
"status": "ok",
"timestamp": 1618504475037,
"user": {
"displayName": "Ricardo Marcondes Marcacini",
"photoUrl": "",
"userId": "13689272637408260080"
},
"user_tz": 180
},
"id": "M9q6K77uYgpg",
"outputId": "c16c4f1d-fbcc-4a01-dcd6-2e2da7e97ead"
},
"outputs": [],
"source": [
"url_imagem = 'https://www5.usp.br/wp-content/uploads/usp-2018preto.png'\n",
"\n",
"# lendo a imagem\n",
"response = requests.get(url_imagem)\n",
"img = Image.open(BytesIO(response.content))\n",
"\n",
"# exibindo a imagem\n",
"display(img)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Kl4UVUxGYgpj"
},
"source": [
"## Aumentando a imagem em $10\\times$ o tamanho original"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "siM_92q6Ygpk"
},
"outputs": [],
"source": [
"# informacoes da imagem\n",
"largura = img.size[0]\n",
"altura = img.size[1]\n",
"\n",
"img = img.resize((largura*10,altura*10)) # aumentando 10x\n",
"\n",
"# exibindo a imagem\n",
"display(img)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "siM_92q6Ygpk"
},
"source": [
"## Resultado\n",
"Observe que a imagem perdeu a qualidade, apresentando serrilhados. Lembre que pixeis são apenas amostras da imagem original. Para aumentá-la, foi necessário estimar pixeis a partir da amostra.\n",
"## Imagens vetoriais\n",
"Repetimos o processo para uma imagem em formato vetorial. Nesse caso, precisamos \"renderizar\" a imagem para o formato matricial antes de sua exibição.\n",
"\n",
"Primeiro, instalemos algumas bibliotecas."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"executionInfo": {
"elapsed": 11238,
"status": "ok",
"timestamp": 1618504483016,
"user": {
"displayName": "Ricardo Marcondes Marcacini",
"photoUrl": "",
"userId": "13689272637408260080"
},
"user_tz": 180
},
"id": "ZI7p2gX4Ygpm",
"outputId": "8464fa37-0646-4536-a5c7-79300bd3334e"
},
"outputs": [],
"source": [
"#!pip install svglib\n",
"from svglib.svglib import svg2rlg\n",
"from reportlab.graphics import renderPDF\n",
"from IPython.core.display import HTML"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_fLe5uxyYgpn"
},
"source": [
"Agora salvamos uma imagem a partir de uma URL da internet. Neste exemplo, usamos o logo do ICMC/USP em formato vetorial. Pesquise sobre o formato SVG."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"executionInfo": {
"elapsed": 11237,
"status": "ok",
"timestamp": 1618504483018,
"user": {
"displayName": "Ricardo Marcondes Marcacini",
"photoUrl": "",
"userId": "13689272637408260080"
},
"user_tz": 180
},
"id": "sDfuTgvuYgpn"
},
"outputs": [],
"source": [
"url_imagem = 'https://upload.wikimedia.org/wikipedia/commons/c/c9/Webysther_20170627_-_Logo_ICMC-USP.svg'\n",
"\n",
"# lendo a imagem\n",
"\n",
"#with open('imagem.svg', \"wb\") as file:\n",
"# response = requests.get(url_imagem)\n",
"# file.write(response.content)\n",
" \n",
"\n",
"img_svg = svg2rlg('imagem.svg')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fiA2WWP3Ygpo"
},
"source": [
"Exibindo a imagem com largura de $200$ pixeis."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"executionInfo": {
"elapsed": 11229,
"status": "ok",
"timestamp": 1618504483020,
"user": {
"displayName": "Ricardo Marcondes Marcacini",
"photoUrl": "",
"userId": "13689272637408260080"
},
"user_tz": 180
},
"id": "RKz9eA_DYgpo",
"outputId": "c19d3b93-d070-4562-c8ef-f52d8cf6d627"
},
"outputs": [],
"source": [
"# exibindo a imagem\n",
"HTML('
')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EcB7cqWUYgpp"
},
"source": [
"Exibindo a imagem com largura de $400$ pixeis."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"executionInfo": {
"elapsed": 11224,
"status": "ok",
"timestamp": 1618504483022,
"user": {
"displayName": "Ricardo Marcondes Marcacini",
"photoUrl": "",
"userId": "13689272637408260080"
},
"user_tz": 180
},
"id": "eo8yOhSNYgpq",
"outputId": "114ef329-e894-4c5d-a6bf-d609894b868e"
},
"outputs": [],
"source": [
"HTML('
')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iKI5ELuRYgpq"
},
"source": [
"Exibindo a imagem com largura de $800$ pixeis."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"executionInfo": {
"elapsed": 11212,
"status": "ok",
"timestamp": 1618504483023,
"user": {
"displayName": "Ricardo Marcondes Marcacini",
"photoUrl": "",
"userId": "13689272637408260080"
},
"user_tz": 180
},
"id": "rOBiNMvlYgpr",
"outputId": "796c0050-5dc0-4adf-a913-ffc5c5452e96"
},
"outputs": [],
"source": [
"HTML('
')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "chUd8B01Ygpr"
},
"source": [
"Exibindo a imagem com largura de $2000$ pixeis.\n",
"\n",
"Observe que a imagem não \"perde\" qualidade e virtualmente podemos usar qualquer dimensão para sua exibição."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 54
},
"executionInfo": {
"elapsed": 11204,
"status": "ok",
"timestamp": 1618504483025,
"user": {
"displayName": "Ricardo Marcondes Marcacini",
"photoUrl": "",
"userId": "13689272637408260080"
},
"user_tz": 180
},
"id": "pKMS3xZ2Ygps",
"outputId": "aa11da2a-66dd-4e99-b5c0-f82d09f9ddf1"
},
"outputs": [],
"source": [
"HTML('
')"
]
}
],
"metadata": {
"colab": {
"name": "Aula01.Ex02. Imagens Matriciais vs Imagens Vetoriais.ipynb",
"provenance": []
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.7"
}
},
"nbformat": 4,
"nbformat_minor": 1
}