Java - Filtro de imagenes

 
Vista:
sin imagen de perfil
Val: 65
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

Filtro de imagenes

Publicado por Marcos (24 intervenciones) el 28/04/2020 15:08:24
Buenas, en mi proyecto estoy tratando de aplicar lo que es matriz de convolución, lo que quisiera hacer es tener una matriz 3x3 a la cual pueda cambiar los valores a gusto para crear diferentes filtros, recién estoy empezando en este tema de procesamiento de imagenes en java y no sé como podría hacer eso, les dejo algo de mi código por si se les facilita un poco mejor la comprensión de lo que trato de hacer, la clase ComandoDetectarBordes es donde iría lo de poder manipular el filtro que se desea aplicar a la imagen.
Gracias de antemano.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
 
public class Imagen {
 
    private int ancho;
    private int alto;
 
    private int[][] pixeles;
 
    private PropertyChangeSupport imagenChangeSupport;
 
    public Imagen(int ancho, int alto) {
        this.ancho = ancho;
        this.alto = alto;
 
        pixeles = new int[ancho][alto];
 
        imagenChangeSupport = new PropertyChangeSupport(this);
 
        todoGris();
    }
 
    public void addObserver(PropertyChangeListener listener) {
        imagenChangeSupport.addPropertyChangeListener(listener);
    }
 
    public void todoGris() {
        for (int i = 0; i < ancho; i++) {
            for (int j = 200; j < alto; j++) {
                pixeles[i][j] = 0x00aaaaaa;
            }
        }
    }
 
    public int getColor(int x, int y) {
        return pixeles[x][y];
    }
 
    public int getAncho() {
        return ancho;
    }
 
    public int getAlto() {
        return alto;
    }
 
    public void dibujar(Graphics g) {
        BufferedImage rsm = new BufferedImage(ancho, alto, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = rsm.createGraphics();
        for (int i = 0; i < ancho; i++) {
            for (int j = 0; j < alto; j++) {
 
                g2d.setColor(new Color(pixeles[i][j]));
                g2d.drawLine(i, j, i, j);
            }
        }
 
        g.drawImage(rsm, 0, 0, null);
    }
 
    public void hacerTransformacion(IComando cmd) {
 
        cmd.setImagen(this);
        cmd.ejecutar();
        imagenChangeSupport.firePropertyChange("imagen", 10, 20);
    }
 
    public int[][] getPixeles() {
        return pixeles;
    }
    public int[][] setPixeles(int pixels[][]) {
        pixels = pixeles;
        return pixels;
    }
 
    public void setImagen(BufferedImage img) {
        ancho = img.getWidth();
        alto = img.getHeight();
 
        pixeles = new int[ancho][alto];
 
        for (int i = 0; i < ancho; i++) {
            for (int j = 0; j < alto; j++) {
 
                pixeles[i][j] = img.getRGB(i, j);
            }
        }
        imagenChangeSupport.firePropertyChange("imagen", 10, 20);
    }
 
 
}


1
2
3
4
5
6
public interface IComando {
 
	public void setImagen(Imagen img);
 
	public void ejecutar();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import photoshop.IComando;
import photoshop.Imagen;
 
public class ComandoDetectarBordes implements IComando {
 
 
    private Imagen imagen;
    private int kernel[][] = {
        {0, 1, 0},
        {1, -4, 1},
        {0, 1, 0}
    };
 
    public ComandoDetectarBordes() {
 
    }
 
    @Override
    public void setImagen(Imagen img) {
        this.imagen = img;
    }
 
    @Override
    public void ejecutar() {
        int[][] pixeles = imagen.getPixeles();
        for (int i = 0; i < imagen.getAncho(); i++) {
 
        }
 
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder