-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKonvolusi.java
77 lines (65 loc) · 2.83 KB
/
Konvolusi.java
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
import java.awt.image.BufferedImage;
import java.util.ArrayList;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Odz
*/
public class Konvolusi extends Proses {
private ArrayList<ArrayList<int[]>> matriksCitraAsli; // matriks dinamis untuk menampung warna2 dari citra
public Konvolusi() {
}
@Override
public void proses(BufferedImage imgAsli) {
this.matriksCitraAsli = super.citraToMatriks(imgAsli);
ArrayList<ArrayList<int[]>> matriksCitraManipulasi = super
.copyMatriks(matriksCitraAsli, imgAsli.getHeight(), imgAsli.getWidth());
for(short i=1; i<imgAsli.getHeight()-1; i++) {
for(short j=1; j<imgAsli.getWidth()-1; j++) {
// mengkonvolusi masing-masing warna dengan matriks mask
int warna[] = {0,0,0};
for(int x=i-1, a=0; x<=i+1; x++, a++) {
for(int y=j-1, b=0; y<=j+1; y++, b++) {
warna[Proses.Red] += GantiKernel.kernel[a][b] * matriksCitraAsli.get(x).get(y)[0]; // red
warna[Proses.Green] += GantiKernel.kernel[a][b] * matriksCitraAsli.get(x).get(y)[1]; // green
warna[Proses.Blue] += GantiKernel.kernel[a][b] * matriksCitraAsli.get(x).get(y)[2]; // blue
}
}
warna[Proses.Red] = (int) (warna[Proses.Red]);
warna[Proses.Green] = (int) (warna[Proses.Green]);
warna[Proses.Blue] = (int) (warna[Proses.Blue]);
netralisirWarna(warna);
matriksCitraManipulasi.get(i).set(j, warna);
}
}
super.citra = super.matriksToCitra(matriksCitraManipulasi, imgAsli.getHeight(), imgAsli.getWidth());
Citra.manipulated = true;
}
/*
short[] warnaDikaliMask(ArrayList<ArrayList<short[]>> matriks, int baris, int kolom, short maskAsli[][]) { //0:red - 1:green - 2:blue
short hasil[] = {0,0,0};
for(int i=baris-1, a=0; i<=baris+1; i++, a++) {
for(int j=kolom-1, b=0; j<=kolom+1; j++, b++) {
hasil[0] += maskAsli[a][b] * matriks.get(i).get(j)[0];
}
}
return hasil;
}
*/
void netralisirWarna(int warna[]) {
for(short i=0; i<3; i++) {
if(warna[i] < 0) warna[i] = 0;
else if(warna[i] > 225) warna[i] = 255;
}
}
@Override
public void bersihkan() {
super.bersihkan();
this.matriksCitraAsli.clear();
System.out.println("matriks dibersihkan, size = " +matriksCitraAsli.size());
}
}