Como binarizar matriz

11 respostas
R

ola pessoal !! será que alguem pode me ajudar a criar um método que recebera como parametro uma matriz e um limiar ,e tera que binarizar esta matriz recebida , onde se transformará os pixels em zero
se (o valor atual for menor ou igual ao limiar) ou 1 (se o valor atual for maior que o limiar).
o método tem essa assinatura binarizaImagem(imagem, limiar):

se alguem puder dar um help eu agradeço !!! obrigado pelo espaço!!

11 Respostas

T

http://www.guj.com.br/posts/list/129140.java

T

Fiquei curioso. Qual é a sua real dificuldade?

O que você já conseguiu fazer?

R

então cara esse é um exercicio progrma que preciso fazer!!
ele recebera informações da placa através de matrizes, mas eu começei a progrmar agora , então estou meio perdido , consegui fazer dois metodos , anteriores a este, que irão dar forma as matrizes recebidas, para ai poder binarizar!!! o que eu fiz foi esta classe , mas não esta completa!! e de ante-mão desculpe a ignorância!!

import java.util.Scanner;
public class Imagem 
{
  int nb = 0;
  int a [][];
  
  
  int converteVetorMatriz(int [] vetorImg, int nLinhas,  int nColunas){
    
  
    
    
    vetorImg = new int [nColunas*nLinhas];
    
    for (int i = 0; i < nColunas; i++) {
      for (int j = 0; j < nLinhas; j++) {
        System.out.println("Entre A["+i+"]["+j+"]");
      }
    }
    System.out.println();
    
    for (int i = 0; i < nColunas;i++) {
      for (int j = 0; j < nLinhas; j++) {
        vetorImg[nb] = a[i][j];
        nb++;
      }
    }
    
    for (int i = 0; i < nColunas*nLinhas; i++) {
      System.out.println(vetorImg[i] + "  ");
    }
    return vetorImg[nColunas*nLinhas];
  }
  

    
  int comparaImagem( int imagemUm[][], int imagemDois[][]){
    
    int m = 0;
    int n = 0;
    
    
    
    int i,j;
    
    for (i = 0; i < m; i++)
      for (j = 0; j < n;j++)
    {
      System.out.printf("ImagemUm[%d][%d]\n",i+1,j+1);
      
    }
    
    for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
    {
      System.out.printf("ImagemDois[%d][%d]\n",i+1,j+1);
    }
    
    for (i = 0; i < m; i++)
      for (j = 0; j < n; j++)
      if (imagemUm[i][j] != imagemDois[i][j])
    {
      
      return 1;
    }
    else
    {
      
      return 0;
    }
    return -1;
  } 
   
  int binarizaImagem(int [] imagem, int limiar){
    
    
    // aqui é que esta o problema!
  
}
T

Bom, já que você tem um vetor unidimensional, basta um for apenas. Tem certeza que é unidimensional?

int binarizaImagem(int [] imagem, int limiar){  
       
     for (int i = 0; i &lt; imagem.length; ++i)   {
     .... complete aqui com o que acha que deve ser
     }
 }
R

então cara , no método converteVetorMatriz, esse recebera um vetor uni e transformará em bi , nem sei se esta certo o que eu fiz, ai o metodo compara ,vericará os tamanhos, e o binariza recebe uma matriz ,que a principio não esta binarizada e a binariza como te falei no exemplo ,com o fundo em zeros e o numero formado em um!!

T

Uma coisa que eu percebi é que você foi programando direto, sem saber para que serve cada coisa, e simplesmente foi tirando os erros de compilação. Por exemplo, o método “comparaImagem” usa os valores de m e de n iguais a zero, ou seja, ele sempre supõe que a matriz seja completamente vazia. Que tal passar esses tamanhos como parâmetros do método, hein?

T

De fato,

vetorImg[nb] = a[i][j];

O que ocorre no código acima? Responda a alternativa correta. Sua chance de acertar é 50%.

a) Você pega o valor de vetorImg[nb] e o copia sobre a[i][j].
b) Você pega o valor de a[i][j] (que está indefinido) e joga sobre vetorImg[nb].

O que o operador de atribuição “=” faz? Copia as coisas da esquerda para a direita ou da direita para a esquerda?

R

cara acho que a b) e copia da esquerda para direirta ! certo?

T

É a b), mas você confundiu o sentido. É da direita para a esquerda. Por isso, você já viu que deveria ser

a[i][j] = vetorImg[nb];

já que você queria criar uma matriz bidimensional a partir de um vetor unidimensional.

R

blz valeu ,mas para binariza-la agora como posso fazer?, cara desculpa as perguntas frequentes ,é que estava atolado de coisas e sem tempo para faze-lo, mas quero realmente aprender ,para que fique claro !! mas ja esta ajudando valeu!

T

A primeira coisa é refazer a definição da classe Imagem. Do jeito que ela está, há muita confusão sobre o que é entrada e o que é saída.

Criado 8 de junho de 2009
Ultima resposta 9 de jun. de 2009
Respostas 11
Participantes 2