Trabalho Pra tico 2. Redimensionamento de imagens baseado em conteu do



Documentos relacionados
ATENÇÃO: * Arquivos com tamanho superior a 500 KB NÃO SERÃO ACEITOS * SOMENTE serão aceitos documentos do formato: PDF

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

Voltado para novos usuários, este capítulo fornece uma instrução para edição de Leiaute do SILAS e suas funções.

O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2

QUESTÃO 1 ALTERNATIVA B

Lidar com números e estatísticas não é fácil. Reunir esses números numa apresentação pode ser ainda mais complicado.

Aula Au 3 la 9 Windows-Internet

Noções Básicas de Excel página 1 de 19

Trabalho 2 Fundamentos de computação Gráfica

Tutorial de Matlab Francesco Franco

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

Manual Sistema MLBC. Manual do Sistema do Módulo Administrativo

Morfologia Matemática Binária

CorelDRAW UM PROGRAMA DE DESIGN

Sumário. 1. Instalando a Chave de Proteção Novas características da versão Instalando o PhotoFacil Álbum 4

Portal do Projeto Tempo de Ser

Dadas a base e a altura de um triangulo, determinar sua área.

OBI2014 Caderno de Tarefas

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Desenvolvendo Websites com PHP

CURSO DE INFORMÁTICA BÁSICA AULA 2 O AMBIENTE WINDOWS

FÓRMULAS DO EXCEL QUE SALVARAM MEU EMPREGO

PRINCÍPIOS DE INFORMÁTICA PRÁTICA OBJETIVO 2. BASE TEÓRICA 3. SEQÜÊNCIA DA AULA. 3.1 Iniciando o PowerPoint

Como Gerar documento em PDF com várias Imagens

Dicas para usar melhor o Word 2007

Prefeitura de Volta Redonda Secretaria Municipal de Educação Departamento Pedagógico Núcleo de Tecnologia Educacional Volta Redonda NTM

Filtragem. pixel. perfil de linha. Coluna de pixels. Imagem. Linha. Primeiro pixel na linha

5 Equacionando os problemas

CRIANDO TEMPLATES E LEGENDAS

Tutorial Plone 4. Manutenção de Sites. Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados

Importação de Dados no Sphinx

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

Ajuda ao SciEn-Produção O Artigo Científico da Pesquisa Experimental

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

Estrutura de Dados Básica

1. Quem somos nós? A AGI Soluções nasceu em Belo Horizonte (BH), com a simples missão de entregar serviços de TI de forma rápida e com alta qualidade.

Quais as diferenças entre os formatos de imagem PNG, JPG, GIF, SVG e BMP?

Bases Matemáticas. Aula 2 Métodos de Demonstração. Rodrigo Hausen. v /15

Google Drive: Acesse e organize seus arquivos

Vetorização no Spring

Como fazer busca de imagem no Google?

Trabalho Computacional

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

IBM1018 Física Básica II FFCLRP USP Prof. Antônio Roque Aula 6. O trabalho feito pela força para deslocar o corpo de a para b é dado por: = =

INF INTELIGÊNCIA ARTIFICIAL TRABALHO 1 BUSCA HEURÍSTICA

ALBUM DE FOTOGRAFIAS NO POWER POINT

Como enviar fotos de câmeras digitais

Nosso objetivo será mostrar como obter informações qualitativas sobre a refração da luz em um sistema óptico cilíndrico.

AULA: BrOffice Impress terceira parte. Ao final dessa aula, você deverá ser capaz de:

Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)

Manual do Visualizador NF e KEY BEST

Questão Essência do Excel

Tela Principal. 2) Criação do CD para ser entregue ao cliente.

Criar fotos em 3D no Creator

É possível que cada pacote tenha: ( ) 2 ( ) 3 ( ) 4 ( ) 5 ( ) 6 ( ) 7 ( ) 9 ( ) Circule as frações equivalentes: 03- Escreva:

02 - Usando o SiteMaster - Informações importantes

Cálculo do conjunto paralelo

Oficina de Construção de Páginas Web

Mozart de Melo Alves Júnior

Tutorial Gerar arquivo PDF. Gerando um documento pdf com várias imagens 1- Inserir imagem no Word

Exercícios Teóricos Resolvidos

Dificuldades de Modelos de PNL. Onde está a solução ótima? Outro exemplo: Condição ótima Local vs. Global Quinta-feira, 25 de abril

Guia de Início Rápido

2. Representação Numérica

Manual de Conversão para PDF Envio de Arquivos ao Diário Oficial

Sistemas Operacionais

ICC Introdução para JavaScript

TUTORIAL COMO CRIAR E EDITAR UM VÍDEO NO WINDOWS MOVIE MAKER*

Manual de implantação

Banner Flutuante. Dreamweaver

Algoritmos. Objetivo principal: explicar que a mesma ação pode ser realizada de várias maneiras, e que às vezes umas são melhores que outras.

A figura abaixo, à direita, mostra uma apresentação gerada no MS PowerPoint. Uma apresentação desse tipo é útil para:

Trecho retirando do Manual do esocial Versão 1.1

Atividade: matrizes e imagens digitais

Colorindo com Números Representação de Imagens

Guia para Escolha de Fotos no PSG Request

Universidade Federal do Mato Grosso - STI-CAE. Índice

Trabalho 7 Fila de prioridade usando heap para simulação de atendimento

APLICATIVOS GRÁFICOS (AULA 4)

OBI2009 Caderno de Tarefas

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

Guia Site Empresarial

Tabela e Gráficos Dinâmicos Como estruturar dinamicamente dados no Excel

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Usando o Excel ESTATÍSTICA. A Janela do Excel Barra de título. Barra de menus. Barra de ferramentas padrão e de formatação.

VCA Treinamento em Algoritmo

Como incluir artigos:

SUMÁRIO TUTORIAL DO HQ. 2 DICAS PEDAGÓGICAS:. 2 DOWNLOAD DA INSTALAÇÃO. 2 PASSO 1 FORMULÁRIO PARA DOWNLOAD. 2 PASSO 2 ESCOLHENDO A VERSÃO.

Portal Sindical. Manual Operacional Empresas/Escritórios

QUESTÕES SOBRE WINDOWS 7

Guia de qualidade de cores

Janelas e seus elementos

Tutorial para envio de comunicados e SMS

Follow-Up Acompanhamento Eletrônico de Processos (versão 3.0) Manual do Sistema. 1. Como acessar o sistema Requisitos mínimos e compatibilidade

Princípio da Casa dos Pombos I

Programação em papel quadriculado

Como instalar uma impressora?

Transcrição:

UNIVERSIDADE FEDERAL DE MINAS GERAIS INSTITUTO DE CIE NCIAS EXATAS DEPARTAMENTO DE CIE NCIA DA COMPUTAC A O PROJETO E ANA LISE DE ALGORITMOS Professores: Luiz Chaimowicz, Wagner Meira Jr, Gisele L. Pappa e Jussara Almeida Trabalho Pra tico 2 1 Redimensionamento de imagens baseado em conteu do Redimensionar imagens e uma tarefa extremamente comum, e algoritmos de redimensionamento sa o os mais populares algoritmos de processamento digital de imagens disponı veis. Por exemplo, se voce tentar abrir uma imagem grande em uma aba de seu navegador Web, ele provavelmente ira redimensiona -la para que ela caiba na tela. Outra situac a o importante onde redimensionamento ocorre e em dispositivos mo veis. Normalmente, eles possuem telas bem pequenas, de resoluc a o baixa, e nesse caso e inevita vel ter que redimensionar as imagens. Ha va rias formas de redimensionar imagens, e cada uma delas possui vantagens e desvantagens. As te cnicas mais simples tratam a imagem como uma func a o de duas varia veis que mapeia uma coordenada (x, y) para uma cor: assim, para redimensionar, basta interpolar essa func a o. Essa interpolac a o, pore m, pode fazer com que surjam distorc o es na imagem. Veja, por exemplo, a Figura 1. Em (a), temos a imagem original. Em (b), temos a imagem redimensionada usando interpolac a o. Note que ha muita distorc a o: o castelo fica bem mais fino do que ele realmente e, e as proporc o es ficam bem estranhas. Mas a imagem original possui um vasto espac o sem muita coisa importante: o trecho de ce u que esta entre a pessoa e o castelo. E possı vel levar isso em conta e redimensionar a imagem na o por interpolac a o, mas determinando, de alguma forma, quais sa o as regio es menos importantes, e cortando-as. Isso e o que foi feito na Figura (c), que possui as mesmas dimenso es da Figura (b), mas parece bem mais natural. Ainda ha alguma distorc a o, mas ela e bem menor. Sua tarefa, nesse trabalho, e usar seus conhecimentos de grafos (sim, grafos) e programac a o dina mica (sim, PD de novo, mas dessa vez bem mais tranquila e menos confusa do que as seque ncias de DNA do TP1) para implementar um algoritmo de redimensionamento de imagens que leve em conta o conteu do, para obter resultados parecidos com os da Figura 1-(c). (a) Original (b) Interpolada (c) Seam Carved Figura 1: Exemplo de redimensionamento de uma imagem. 2 Definic a o do problema Uma imagem I e uma matriz h w de pixels. Cada pixel e especificado como uma cor em formato RGB, que e uma tripla de valores especificando as intensidades de vermelho, verde e azul. Suponha

que você queira reduzir a imagem em um pixel na horizontal (i.e., você quer remover uma coluna, gerando uma imagem h (w 1). Para tal, você vai encontrar um caminho conectado de menor energia na imagem e removê-lo. Vamos por partes: Um caminho conectado é uma sequência de coordenadas com a restrição de que {(x i, i), i [1..w]} i, x i x i 1 1 Ou seja, um caminho é uma sequência de pixels que começa em uma dada coluna da primeira linha da imagem, e vai descendo, passando por todas as linhas da imagem, com a restrição de que ao passar de uma linha para a próxima você ou continua na mesma coluna ou passa para uma das duas colunas vizinhas, mas não pode saltar colunas. Para cada pixel da imagem, vamos definir uma energia, que é uma função que quantifica, de certa forma, a importância do pixel. A energia de um caminho conectado é a soma das energias dos pixels pelos quais esse caminho passa. O que exatamente faz com que um pixel seja importante, porém? Uma forma intuitiva de entender isso é pensar que um pixel é pouco importante se ele difere pouco dos seus vizinhos. Pense, por exemplo, nos pixels azuis de céu da Figura 1-(a). Quase todos eles estão cercados de pixels que são quase da mesma cor que eles. Remover qualquer um deles não vai distorcer muito a imagem. A forma como você vai calcular matematicamente a importância do pixel será data mais a frente. Assim, o caminho de menor energia é o caminho que contém os pixels menos importantes da imagem. Se você remover esse caminho da imagem, você, em teoria, está minimizando a perda de informação causada por essa remoção. O algoritmo de redução de imagens baseado nesse princípio é conhecido como seam carving. Nós definimos o problema apenas para reduzir a imagem em uma coluna. E se quisermos reduzir em mais de uma coluna? E se quisermos remover linhas também? Bem, isso não é problema. Para reduzir mais de uma coluna, basta aplicar o algoritmo de reduzir em uma coluna várias vezes. Para remover linhas, basta pegar a transposta da imagem, remover uma coluna na transposta, e re-transpor ela: remover uma coluna na transposta equivale a remover uma linha na original. Com isso, conseguimos fazer reduções arbitrárias no tamanho da imagem. Por simplicidade, nós não vamos tratar de ampliações nesse trabalho. Você recebe como entrada uma imagem e uma função f que determina a energia de cada pixel. Sua tarefa é propor dois algoritmos para determinar qual é o caminho conectado de menor energia nessa imagem: 1. Um algoritmo baseado em grafos 1 2. Um algoritmo baseado em programação dinâmica 2 Você deve, então, implementar um programa para redução de tamanho de imagens por seam carving que use os seus algoritmos para encontrar o caminho de menor energia. 1 Dica: tente construir um grafo que seja tal que o menor caminho entre dois vértices nele corresponda de alguma forma ao caminho de menor energia da imagem. 2 Dica: para cada pixel da última linha da imagem, calcule o caminho de menor energia que termina naquele pixel. Se a imagem só possui uma linha, então o menor caminho que termina em um pixel passa apenas por aquele pixel e tem energia igual à energia daquele pixel. Suponha que você sabe calcular o caminho de menor energia terminando em cada pixel de uma dada linha da imagem, e mostre que você pode usar isso para calcular os caminhos de menor energia terminando em cada pixel da próxima linha da imagem.

3 Formato do arquivo de imagem Vamos adotar o formato de arquivo de imagem PPM 3, por ele ser mais simples que formatos tradicionais como JPEG e PNG. Nesse formato, a imagem é descrita como um arquivo de texto, contendo: A primeira linha do arquivo contém uma string mágica e é sempre igual a P3; Linhas que começam com # são comentários e devem ser ignoradas; Dois inteiros separados por espaço: a largura (número de colunas) e a altura (número de linhas) da imagem. O maior valor de intensidade RGB de um pixel, que é um inteiro; Para cada pixel da imagem, 3 inteiros especificando as intensidades R, G e B do pixel. Os pixels são descritos começando do mais à esquerda na primeira linha, percorrendo em ordem toda a linha, e então passando para a próxima e assim por diante. Por exemplo, o seguinte arquivo: P3 # Isso eh um comentario # E isso tambem 3 3 255 255 0 0 255 255 255 0 255 0 # comentarios podem aparecer em qualquer lugar 128 128 128 0 0 255 Corresponde à seguinte imagem 3 3: Note que entre cada inteiro na entrada, existe uma quantidade arbitrária de whitespace: eles podem ser separados por um espaço, por vários espaços, por tabs, por newlines, por uma mistura disso, etc. Por exemplo, esse arquivo representa exatamente a mesma imagem que o arquivo acima: P3 3 3 255 255 0 0 255 255 255 0 255 0 128 128 128 0 0 255 3 http://netpbm.sourceforge.net/doc/ppm.html

Você pode gerar imagens nesse formato (ou converter imagens desse formato para outro de mais fácil visualização) usando o comando convert do software ImageMagick. Por exemplo, para converter uma imagem de formato PNG para o formato PPM, você pode usar o comando convert -compress none imagem.png imagem.ppm Seu programa deve ler imagens no formato PPM, redimensioná-las e escrever a saída também nesse formato. 4 Determinando a energia de um pixel Existem várias funções possíveis para estimar a energia de um pixel. Note que todas elas são heurísticas, e, portanto, falham em alguns casos. Devido a isso, apesar de seam carving produzir resultados muito bons em geral, sempre existem imagens nas quais os resultados produzidos são ruins, e, à medida que a redução se torna mais drástica (i.e., mais pixels são removidos), começam a aparecer distorções que podem ser piores que as do método de redução por interpolação. Há várias possíveis funções de energia. Cada uma dais quais tem vantagens e desvantagens. Vamos usar uma das mais simples, o operador de Sobel. Essa função produz resultados muito bons para vários tipos de imagens, mas exatamente por ser muito simples possui muitas limitações que causam distorções em várias imagens. 4.1 O operador de Sobel Intuitivamente, um pixel é pouco importante se ele está numa região da imagem onde ocorre pouca mudança, isto é, se seus vizinhos são todos parecidos. Se na região do pixel ocorrem mudanças drásticas, então ele é importante. Como determinar se próximo a um pixel ocorre muita ou pouca variação, porém? Cálculo, oras! O gradiente de uma função em n variáveis em um dado ponto é um vetor n-dimensional que dá a direção (e intensidade) de maior variação naquele ponto. Uma imagem pode ser entendida como uma função de duas variáveis que mapeia um par de coordenadas (x, y) em uma cor, e portanto, nós podemos pensar em um gradiente para ele. Assim, podemos definir a energia de um pixel como a norma do gradiente da imagem naquele pixel. O problema, obviamente, é como exatamente nós vamos calcular as derivadas parciais de uma imagem. O operador de Sobel é uma função simples que permite calcular uma aproximação do gradiente da imagem em um pixel, usando apenas dados dos oito vizinhos mais próximos desse pixel (i.e., a matriz 3 3 cujo elemento central é aquele pixel) 4. Ele calcula as derivadas parciais em relação às duas direções (horizontal e vertical) como uma média ponderada dos valores de intensidade luminosa dos vizinhos do pixel, usando as seguintes matrizes de pesos: e G x = G y = 1 0 +1 2 0 +2 1 0 +1 1 2 1 +1 +2 +1 Note que o valor da intensidade luminosa do próprio pixel tem peso zero nos dois casos: o operador ignora o pixel em questão e leva em conta apenas os vizinhos. Note também que como o operador leva em conta os oito vizinhos ao redor de um pixel, ele não está definido para pixels na borda da imagem. Para tratar esse caso, vamos considerar, na hora de calcular o operador, que a imagem foi estendida um pixel (ou mais, dependendo do tamanho da matriz utilizada pelo 4 Há também versões do operador que utilizam uma maior quantidade de vizinhos, por exemplo, matrizes 5 5, 7 7, etc.

operador) em cada direção copiando as linhas e colunas de borda, e as quinas. Isso significa, por exemplo, que a linha vizinha de cima da primeira linha da imagem é uma cópia dela mesma (e que a coluna vizinha da última coluna é uma cópia da última coluna, e assim por diante). Com base nisso, para cada pixel (x, y) nós conseguimos computar um vetor gradiente (g x, g y ). A energia desse pixel é definida como a norma desse vetor: e(x, y) = gx 2 + gy 2 Falta só definir o que exatamente nós queremos dizer por intensidade luminosa de um pixel. Lembre que a cor de um pixel é uma tripla de valores (R, G, B) que representam as intensidades, respectivamente, de vermelho, verde e azul. A intensidade luminosa é uma medida de quão claro ou escuro o pixel é, sendo definida como uma média ponderada das intensidades de cada cor: IL(R, G, B) = 0.30 R + 0.59 G + 0.11 B Se os pesos parecem estranhos, é porque eles levam em conta o funcionamento do olho humano: nossos olhos são muito mais sensíveis ao verde do que ao azul. Com essas definições, para determinar a energia de um pixel basta calcular a intensidade luminosa de todos os seus vizinhos, aplicar o operador de Sobel para obter uma aproximação do gradiente e calcular a norma desse gradiente, o que pode ser feito em O(1) (considerando que o tamanho da matriz do operador será uma constante) para cada pixel. Vamos parar um pouco, porém, para tentar compreender o que o operador Sobel está fazendo, e porque ele é uma boa opção para estimar a importância de um pixel. Primeiramente, o que exatamente é a intensidade luminosa de um pixel? Ela pode ser entendida como a intensidade do tom de cinza que aquele pixel teria se a imagem fosse convertida para preto-e-branco. Como o operador de Sobel é definido em cima das diferenças de intensidade luminosa, ele desconsidera as cores e, essencialmente, trabalha sobre uma versão em preto-e-branco da imagem. Quando a norma do gradiente é alta e quando ela é baixa? Para entender isso, vamos voltar na Figura 1-(a). Considere um pixel (x, y) no meio do céu, em uma imagem. Todos os vizinhos desse pixel terão aproximadamente a mesma intensidade, e portanto tanto g x quanto g y serão pequenos, e portanto a energia desse pixel será pequena. Considere agora um pixel que está bem na borda entre o castelo e o céu. De um lado, você tem pixels azuis. Do outro, os pixels bem mais claros do castelo. Há uma diferença grande de intensidade entre esses dois conjuntos de pixels, e portanto a norma do gradiente será alta. Em essência, o que o operador de Sobel faz é detectar bordas na imagem. A Figura 2 mostra o resultado de aplicar o operador de Sobel a uma imagem como uma outra imagem em preto-e-branco na qual pixels mais escuros possuem norma do gradiente menor e pixels mais claros possuem norma do gradiente maior. Note que todas as regiões de borda da imagem original tem gradiente alto, e portanto serão consideradas importantes pelo algoritmo de seam carving quando você for escolher o caminho a ser eliminado. Isso possui vantagens e desvantagens. Usar essa função de energia vai funcionar bem em imagens com grandes partes muito semelhantes. Por exemplo, imagens de céu ou mar. Mas pode gerar resultados desastrosos em alguns casos. A Figura 3 mostra uma foto da Praça do Papa, em BH, e o resultado de usar seam carving com operador de Sobel para reduzir a largura em 33%. Note que em algum momento, o caminho de menor energia passou por dentro da cruz, que é razoavelmente uniforme e portanto possui gradiente bem perto de zero em seu interior, e isso acabou gerando uma deformação horrenda. 5 O que deve ser feito? 5.1 Código Primeiramente, você deve propor duas soluções para resolver o problema de encontrar o caminho de menor energia numa imagem, usando um operador tal como o de Sobel como função de energia (operadores personalizados poderão ser passados como parâmetro para o programa, ou seja,

(a) Original (b) Operador de Sobel Figura 2: Visualizac a o do operador de Sobel. (a) Original (b) Interpolada (c) Seam Carved Figura 3: Exemplo de distorc a o em seam carving com operador de Sobel: Prac a do Papa, Belo Horizonte. as matrizes Gx e Gy podera o ser diferentes das que foram definidas acima). Uma das soluc o es deve ser baseada em grafos e a outra em programac a o dina mica. Note que voce deve encontrar o caminho o timo, e portanto ambas as soluc o es devem produzir um caminho com exatamente a mesma energia total (note que podem haver mais de um caminho com a mesma energia mı nima, mas exceto por empates as duas soluc o es devem produzir o mesmo caminho). Com base nisso, voce vai construir um programa que executa o processo de seam carving. Seu executa vel deve chamar tp2 e sera chamado da seguinte forma:./tp2 arquivo-de-entrada.ppm <estrategia> -h <linhas> -w <colunas> -m <matrizes> onde: estrategia e -g para a soluc a o baseada em grafos e -d para a soluc a o baseada em programac a o dina mica; linhas e o nu mero de linhas que sera o removidas da imagem; colunas e o nu mero de colunas que sera o removidas da imagem; matrizes e o nome do arquivo que contera as matrizes de pesos Gx e Gy personalizadas. Se esse para metro na o for fornecido ao programa, devera o ser utilizadas as matrizes de Sobel 3 3 tradicionais definidas acima. O arquivo das matrizes devera ter o seguinte formato:

A primeira linha contém dois inteiros m 1 e n 1 representando o número de linhas e de colunas da primeira matriz (G x ). Em seguida, vem o conteúdo da matriz, ou seja, m 1 n 1 números de ponto flutuante separados por whitespaces quaisquer. Em seguida, dois inteiros m 2 e n 2 representando o tamanho da segunda matriz (G y ), seguido do conteúdo dessa matriz. Exemplo: 3 3-1 -1 0-1 0 1 0 1 1 3 5-0.5-1 0 1 0.5-0.5-1 0 1 0.5-0.5-1 0 1 0.5 Você pode supor que as dimensôes n 1, n 2, m 1 e m 2 são todas ímpares. Você pode supor que apenas uma das opções de remoção (linhas ou colunas) será passada de cada vez, isto é, você não precisa tratar remoção nos dois sentidos ao mesmo tempo. Por exemplo:./tp2 arquivo-de-entrada.ppm -g -h 10 é uma linha de comando que indica que seu programa deve usar a estratégia baseada em grafos para reduzir a altura da imagem em 10 pixels, usando o operador de Sobel tradicional 3 3 para calcular a energia em cada pixel../tp2 arquivo-de-entrada.ppm -d -w 42 -m mascara.txt indica que seu programa deve usar a estratégia baseada em programação dinâmica para reduzir a largura da imagem em 42 pixels, e utilizando como pesos para a função de energia as matrizes contidas no arquivo mascara.txt./tp2 arquivo-de-entrada.ppm -d -h 18 -w 18 é uma linha de comando inválida. Note que se você implementar o redimensionamento de imagens em uma direção, é trivial implementar ele na outra (faça a transposta da matriz que representa a imagem). O resultado da execução do seu programa deve ser uma imagem em formato PPM que será escrita na saída padrão. É crucial que você siga o formato especificado para a invocação do seu programa, porque ele será corrigido por um sistema automático. Em http://www.vod.dcc.ufmg.br/~fmuniz/seam-carving/ há uma coleção de imagens de exemplo, com os arquivos em formato PPM correspondentes, que você pode (e deve!) usar para os testes iniciais de seu programa. Gere um Makefile para compilar o seu código. Quanto à linguagem de programação, serão aceitos apenas Java, C e C++. 5.2 Documentação Comece sua documentação com uma descrição breve do problema. Em seguida, apresente as suas duas soluções para o problema proposto. Entre outros detalhes, é importante mencionar: Para a solução baseada em grafos: qual é o grafo usado, como ele é construído, qual problema é resolvido nesse grafo e como transformar a solução desse problema no grafo em uma solução para o problema original.

Para a solução baseada em programação dinâmica: primeiramente, mostre que o problema possui sub-estrutura ótima: apresente uma solução indutiva para ele, mostrando qual é o caso base e qual é o passo indutivo; por fim, mostre a ordem na qual as soluções dos subproblemas devem ser calculadas para obter a solução para o problema original. As análises de complexidade de tempo e espaço de cada uma das soluções. Análise de resultados: As duas soluções devem sempre produzir o mesmo resultado, a não ser que haja mais de um caminho com o mesmo valor mínimo de energia. Os resultados de uma batem com os da outra? Como é o comportamento das suas soluções em relação ao tempo de execução? Ele é consistente com sua análise de complexidade? Analise o tempo de execução em função dos principais fatores que podem impactá-lo. Análise qualitativa dos resultados de redimensionamento. Apresente pelo menos três exemplos de imagens nas quais o algoritmo produz bons resultados, e três exemplos de imagens nas quais o algoritmo produz resultados ruins. Que características dessas imagens fazem com que os resultados sejam ruins? Que outras funções de energia poderiam produzir resultados melhores para essas imagens? Para um dos exemplos no qual o algoritmo produziu bons resultados, analise como a qualidade varia a medida que a redução no tamanho da imagem se torna mais drástica. A documentação não deve exceder 10 páginas Não será necessário imprimir a documentação. Entregue apenas o pdf dentro do pacote que você irá submeter no minha.ufmg. Data de entrega: 31/05