Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

William Bruno

[Resolvido] [Desafio] Suavização de Imagem

Recommended Posts

Posta o exercício, se não der em PHP vou tentar fazer em JAVA mesmo :D

o exercicio é um pouco extenso. Vou postar um filtro de cada vez.

 

 

 

Introdução

Quando uma imagem é adquirida por uma câmera ou algum outro sistema de captura, ela normalmente

contém variações em intensidade e contraste, conhecidos como “ruídos”, que podem inviabilizar o seu

uso direto se não forem previamente tratadas. O processo de supressão do “ruído” presente em uma

imagem é chamado de suavização. Neste exercício-programa você terá a oportunidade de:

 

(1) escrever uma classe em Java que implementará três estratégias de suavizaçãao de imagens e

(2) escrever uma classe que permitirá ao usuário carregar, visualizar, suavizar e salvar imagens em arquivos.

 

 

Primeira Parte — Suavização

 

Uma imagem em tons de cinza pode ser definida como uma matriz bidimensional com m linhas e n

colunas onde cada c´elula desta matriz (“pixel”) indica uma intensidade na imagem. Para efeitos deste

EP, cada intensidade ser´a representada por um valor inteiro i, 0 i < 256, onde i = 0 simboliza a

ausˆencia de cor (“cor preta”) e i = 255 simboliza a cor branca. Valores intermedi´arios representam tons

de cinza. No site da disciplina, vocˆe encontrar´a o arquivo Imagem.java, que define a classe Imagem,

que contém como atributo uma matriz bidimensional de tamanho arbitr´ario, um construtor para sua

inicializa¸c˜ao e m´etodos para descobrir a largura (colunas) e altura (linhas) da imagem.

A sua tarefa inicial é adicionar três métodos à classe Imagem.java que permitirão a suavização da

imagem, conforme descritos abaixo:

 

void filtroMedio(int tamanho)

 

O filtro médio suaviza uma imagem I através do cálculo da média de todos os valores dos pixels

em uma vizinhança local determinada por tamanho. Para uma vizinhançaa 3x3 (tamanho=3), o valor

do pixel suavizado H na posição (i, j) será:

 

image.png

 

onde I(i, j) representa a intensidade original na posição (i, j). Vocˆe dever´a calcular os valores suavizados

para todos os pixels contidos na imagem. Dependendo da posi¸c˜ao e tamanho do filtro, não será

possível calcular a média usando toda a vizinhança. Um exemplo disto são os cantos da imagem. Neste

caso, você deverá aproveitar a máxima vizinhança possível, respeitando valor de tamanho, ajustando o

peso apropriadamente na equação acima. Você poderá supor que tamanho sempre será ímpar e maior

que 1.

 

 

Nota: resolvi isso em 2009 com Java para a faculdade.

 

 

 

/*******************************************************************/
/** MAC 110 - Introdução à Computação                             **/
/** IME-USP - Primeiro Semestre de 2009                           **/
/** 42 - Roberto Cesar                                            **/
/**                                                               **/
/** Terceiro Exercício-Programa                                   **/
/** Arquivo: Imagem.java                                          **/
/**                                                               **/
/** William Bruno Rocha de Moraes n°USP 5992768                   **/
/**                                                               **/
/** 27/06/2009                                                    **/
/*******************************************************************/

class Imagem
{
 public int[][] pixels;
 public int altura;
 public int largura;

 // Inicializa matriz de pixels da classe, e as dimensões
 Imagem(int[][] matriz)
 {
   this.pixels = matriz;
   this.altura = altura();
   this.largura = largura();
 }

 // Devolve largura em pixels da imagem
 public int largura()
 {
   if (pixels != null)
     return pixels[0].length;
   else
     return 0;
 }

 // Devolve altura em pixels da imagem
 public int altura()
 {
   if (pixels != null)
     return pixels.length;
   else
     return 0;
 }
 public void filtroMedio(int tamanho)
 {

 }
 public void filtroMediano(int tamanho)
 {

 }
 public void filtroGaussiano(double sigma, int tamanho)
 {

 }
}//fecha class

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.