Intensidade dos Tons de Cinza
Os pixels são uma coleção de pequenos pontos ou quadradinhos que formam uma imagem digital. Cada pixel pode ter um valor que representa sua cor ou intensidade.
Pixel = Picture Element (Elemento de Imagem)
Uma imagem digital é formada por milhares ou milhões de pixels organizados em uma grade.
Um Tensor 0D é simplesmente um número. No contexto de imagens, representa a intensidade de um único pixel em tons de cinza.
Intensidade: 0 a 255
public class Tensor0D {
public static void main(String[] args) {
// Tensor 0D: um único valor de intensidade
int pixel = 128;
System.out.println("Intensidade do pixel: " + pixel);
// Interpretando a intensidade
if (pixel == 0) {
System.out.println("Tom: Preto");
} else if (pixel == 255) {
System.out.println("Tom: Branco");
} else {
System.out.println("Tom: Cinza (intensidade " + pixel + ")");
}
}
}
Intensidade do pixel: 128
Tom: Cinza (intensidade 128)
Um Tensor 1D é uma fileira ou coluna de números. No contexto de imagens, representa uma linha de pixels com suas intensidades.
| Índice | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| Intensidade | 0 | 32 | 64 | 96 | 128 | 160 | 192 | 224 |
public class Tensor1D {
public static void main(String[] args) {
// Tensor 1D: vetor com intensidades de tons de cinza
int[] linha = {0, 32, 64, 96, 128, 160, 192, 224};
System.out.println("=== TENSOR 1D - LINHA DE PIXELS ===");
for (int i = 0; i < linha.length; i++) {
System.out.println("Pixel " + i + ": intensidade " + linha[i]);
}
}
}
=== TENSOR 1D - LINHA DE PIXELS ===
Pixel 0: intensidade 0
Pixel 1: intensidade 32
Pixel 2: intensidade 64
Pixel 3: intensidade 96
Pixel 4: intensidade 128
Pixel 5: intensidade 160
Pixel 6: intensidade 192
Pixel 7: intensidade 224
Um Tensor 2D é uma matriz (conjunto de fileiras e colunas). Representa uma imagem completa em tons de cinza, onde cada elemento é a intensidade de um pixel.
Matriz (Tensor 2D) = Coleção de todas as fileiras (linhas) e colunas contendo números para cada pixel da imagem.
public class Tensor2D {
public static void main(String[] args) {
// Tensor 2D: matriz representando imagem 4x8 em tons de cinza
int[][] imagem = {
{0, 32, 64, 96, 128, 160, 192, 224},
{32, 64, 96, 128, 160, 192, 224, 255},
{64, 96, 128, 160, 192, 224, 255, 192},
{96, 128, 160, 192, 224, 255, 192, 160}
};
System.out.println("=== TENSOR 2D - IMAGEM EM TONS DE CINZA ===");
System.out.println("Dimensões: " + imagem.length + " linhas x " + imagem[0].length + " colunas");
System.out.println();
// Exibindo a matriz
for (int i = 0; i < imagem.length; i++) {
System.out.print("Linha " + i + ": ");
for (int j = 0; j < imagem[i].length; j++) {
System.out.print(imagem[i][j] + "\t");
}
System.out.println();
}
}
}
=== TENSOR 2D - IMAGEM EM TONS DE CINZA ===
Dimensões: 4 linhas x 8 colunas
Linha 0: 0 32 64 96 128 160 192 224
Linha 1: 32 64 96 128 160 192 224 255
Linha 2: 64 96 128 160 192 224 255 192
Linha 3: 96 128 160 192 224 255 192 160
public class CriarTensor1D {
public static void main(String[] args) {
// Criando um vetor de 256 posições (0 a 255)
int[] tonsCinza = new int[256];
// Preenchendo com valores de 0 a 255
for (int i = 0; i < tonsCinza.length; i++) {
tonsCinza[i] = i;
}
// Exibindo alguns valores
System.out.println("Primeiro tom: " + tonsCinza[0]);
System.out.println("Tom médio: " + tonsCinza[128]);
System.out.println("Último tom: " + tonsCinza[255]);
System.out.println("Total de tons: " + tonsCinza.length);
}
}
Primeiro tom: 0
Tom médio: 128
Último tom: 255
Total de tons: 256
public class CriarTensor2D {
public static void main(String[] args) {
// Criando uma imagem 8x8 em tons de cinza
int[][] imagemGradiente = new int[8][8];
// Preenchendo com gradiente horizontal
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
imagemGradiente[i][j] = j * 32; // 0, 32, 64, 96...
}
}
// Exibindo a matriz
System.out.println("=== IMAGEM COM GRADIENTE HORIZONTAL ===");
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
System.out.print(imagemGradiente[i][j] + "\t");
}
System.out.println();
}
}
}
=== IMAGEM COM GRADIENTE HORIZONTAL ===
0 32 64 96 128 160 192 224
0 32 64 96 128 160 192 224
0 32 64 96 128 160 192 224
0 32 64 96 128 160 192 224
0 32 64 96 128 160 192 224
0 32 64 96 128 160 192 224
0 32 64 96 128 160 192 224
0 32 64 96 128 160 192 224
Um Tensor 3D representa uma imagem colorida. Cada pixel tem três valores: um para Red (vermelho), um para Green (verde) e um para Blue (azul).
RGB:
Cada pixel tem um vetor [R, G, B] com 3 valores.
public class Tensor3D {
public static void main(String[] args) {
// Tensor 3D: imagem 2x2 colorida (RGB)
// Cada pixel tem 3 valores: [R, G, B]
int[][][] imagemColorida = {
{
{255, 0, 0}, // Pixel [0][0] = Vermelho puro
{0, 255, 0} // Pixel [0][1] = Verde puro
},
{
{0, 0, 255}, // Pixel [1][0] = Azul puro
{255, 255, 0} // Pixel [1][1] = Amarelo (R+G)
}
};
System.out.println("=== IMAGEM COLORIDA 2x2 (RGB) ===");
for (int i = 0; i < imagemColorida.length; i++) {
for (int j = 0; j < imagemColorida[i].length; j++) {
System.out.print("Pixel [" + i + "][" + j + "]: ");
System.out.println("R=" + imagemColorida[i][j][0] +
" G=" + imagemColorida[i][j][1] +
" B=" + imagemColorida[i][j][2]);
}
}
}
}
=== IMAGEM COLORIDA 2x2 (RGB) ===
Pixel [0][0]: R=255 G=0 B=0
Pixel [0][1]: R=0 G=255 B=0
Pixel [1][0]: R=0 G=0 B=255
Pixel [1][1]: R=255 G=255 B=0
| Característica | Imagem Tons de Cinza | Imagem Colorida |
|---|---|---|
| Tensor | 2D (Matriz) | 3D (Tensor) |
| Valores por pixel | 1 (intensidade) | 3 (R, G, B) |
| Estrutura | int[][] |
int[][][] |
| Exemplo pixel | 128 | [255, 128, 64] |
| Acesso | imagem[i][j] |
imagem[i][j][k] |
public class AnalisarImagem {
public static void main(String[] args) {
// Imagem 4x4 em tons de cinza
int[][] imagem = {
{50, 100, 150, 200},
{60, 110, 160, 210},
{70, 120, 170, 220},
{80, 130, 180, 230}
};
// Calculando a intensidade média
int soma = 0;
int totalPixels = 0;
for (int i = 0; i < imagem.length; i++) {
for (int j = 0; j < imagem[i].length; j++) {
soma += imagem[i][j];
totalPixels++;
}
}
double media = (double) soma / totalPixels;
System.out.println("=== ANÁLISE DA IMAGEM ===");
System.out.println("Dimensões: " + imagem.length + "x" + imagem[0].length);
System.out.println("Total de pixels: " + totalPixels);
System.out.println("Intensidade média: " + media);
// Contando pixels escuros (< 128) e claros (>= 128)
int escuros = 0;
int claros = 0;
for (int i = 0; i < imagem.length; i++) {
for (int j = 0; j < imagem[i].length; j++) {
if (imagem[i][j] < 128) {
escuros++;
} else {
claros++;
}
}
}
System.out.println("Pixels escuros (< 128): " + escuros);
System.out.println("Pixels claros (>= 128): " + claros);
}
}
=== ANÁLISE DA IMAGEM ===
Dimensões: 4x4
Total de pixels: 16
Intensidade média: 140.0
Pixels escuros (< 128): 6
Pixels claros (>= 128): 10
Teste seus conhecimentos sobre Tensores e Imagens:
int[][]int[][][]Reforce o conteúdo desta aula com mais dois exercícios práticos: