O código não modifica o elemento da matriz

2 respostas
D

A intenção da classe é fazer com que uma matriz de números inteiros seja binarizada a partir de um limiar, ou seja, se eu tenho uma matriz int[][] matriz{{0,1}{2,0}{1,8}} e, além disso, definir um limiar 2, para que a matriz transforme um número do elemento maior ou igual a 2 em zero. O objetivo, se o limiar for dois, nesse caso, fazer com que a matriz anterior fique assim: {{0,1}{1,0}{1,0}}. Eu tentei escrever o código, porém, a matriz final não é modificada como eu desejaria. Veja o código:

class binarizaImg
{
  int[][] binarizaImagem(int[][] imagem, int limiar)
  {
    int[][]imagemBinarizada;
    imagemBinarizada = imagem;
    for (int i = 0; imagemBinarizada.length > i; i++)
    {
      int a = 0;
      int j = 0;
      
      while (imagemBinarizada[0].length > j)
      {
        if ((imagemBinarizada[i][j] >= limiar)||(imagemBinarizada[i][j] == 0))
        {
          imagemBinarizada[i][j] = 0;
          j++;          
        } // Fim do if
        
        else
        {
          imagemBinarizada[i][j] = 1;
          j++;
        } // Fim do else
        System.out.print(" " + imagemBinarizada[i][j]);
      } // Fim do while
      j = 0;
    }// Fim do for
    return imagemBinarizada;
  } // Fim do método binarizaImagem

  public static void main (String args[])
  {
 int matriz[][] = {{0,0,0,0,0,0},{0,8,0,0,1,0},{0,0,0,0,1,0},{0,0,0,0,1,0},{0,0,0,0,1,0},{0,0,0,0,0,0},{0,0,0,0,0,0}};
 Imagem matrizImagem = new Imagem();
 matrizImagem.binarizaImagem(matriz,3);
 
  } // Fim do main
}// Fim da classe

No prompt de comando:

> java binarizaImg
 0 0 0 0 0 8 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0>
Observe que alguns zeros foram 'comidos' ao longo da execução!

Se alguém puder me ajudar com o código, agredeço desde já! :wink:

2 Respostas

ViniGodoy
Não era isso que você queria?
public class BinarizaImg {
    public static void binarizaImagem(int[][] imagem, int limiar) 
    {                
        for (int i = 0; i < imagem.length; i++)
            for (int j = 0; j < imagem[i].length; j++)
                imagem[i][j] = imagem[i][j] >= limiar ? 0 : 1;
    } // Fim do método binarizaImagem

    public static void main(String args[]) {
        int matriz[][] = { 
                { 0, 0, 0, 0, 0, 0 }, 
                { 0, 8, 0, 0, 1, 0 },
                { 0, 0, 0, 0, 1, 0 }, 
                { 0, 0, 0, 0, 5, 0 },
                { 0, 0, 0, 0, 1, 0 }, 
                { 0, 0, 0, 0, 3, 0 },
                { 0, 0, 0, 0, 0, 3 } };
        
        binarizaImagem(matriz, 3);
        for (int i = 0; i < matriz.length; i++)
        {            
            for (int j = 0; j < matriz[i].length; j++)
                System.out.print(matriz[i][j] + " ");
            System.out.println();
        }
                

    } // Fim do main
}// Fim da classe
D

:smiley: Valeu pelo código!
Nem cheguei a usar, só foi prestar atenção direitinho pra arrumar as ‘cacas’ que eu tinha inventado(hehe)!

Criado 2 de junho de 2009
Ultima resposta 2 de jun. de 2009
Respostas 2
Participantes 2