Le flou d'une image à l'aide de 3x3 noyau Gaussien?
Je veux créer une méthode pour brouiller les 24 bits de l'image à l'aide de 3x3 noyau Gaussien.
M'a donné les choses suivantes.
Le 3x3 noyau Gaussien:
Une est l'image d'origine et de B est l'image qui en résulte.
B(i,j) =
1/16 * A(i-1,j-1) +1/8 * A(i,j-1) +1/16 * A(i+1,j-1) +1/8 * A(i-1,j) +1/4 * A(i,j) +1/8 *A(i+1,j) +1/16 * A(i-1,j+1) +1/8 * A(i,j+1) +1/16 * A(i+1,j+1)
La méthode:
public static BufferedImage gaussianBlur(Image img)
où img est une variable de référence d'une image d'entrée.
La valeur retournée est une adresse d'un objet de l'image résultante.
Dois-je en divisant l'image en 9 parties pour mettre en œuvre cette méthode?
Pourquoi voudriez-vous faire cela?
Ce que vous avez à prendre en compte est d'utiliser les anciennes valeurs de l'image et non pas les nouveaux.
Ce que vous avez à prendre en compte est d'utiliser les anciennes valeurs de l'image et non pas les nouveaux.
OriginalL'auteur Taylor | 2013-12-23
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de diviser pour 9 parties. Au moins, je ne vois pas de bonnes raisons pour ce faire.
Mais vous feriez mieux d'être prudent au cours de ce processus, n'oubliez pas de copier les données d'image à quelque part, et toujours utiliser ces données pour le calcul de la nouvelle image, éviter d'utiliser les nouvelles données de l'image à calculer la nouvelle image.
Aussi, je ne comprends pas pourquoi vous avez besoin d'écrire votre propre fonction pour Gaussien flou d'une image. Cela peut facilement être fait comme suit:
OriginalL'auteur herohuyongtao
Ne pas la diviser en plusieurs parties. que faire si vous avez de grandes images.
ce que vous devez faire est de commencer par écrire une fonction qui vérifie si le filtre est à l'intérieur de l'image de limites. en C, il serait quelque chose comme ceci:
que d'écrire une fonction pour calculer les intensités:
alors il suffit d'écrire applyFilter
m2 est le filtre que vous devez faire pivoter de 180 degrés.
Matrice applyFilter(la Matrice m1, la Matrice m2) {
int x,y;
//pivoter le filtre première
Matrice rotFilter = createMatrix(m2.hauteur de,m2.la largeur);
for (x = 0; x < m2.hauteur; x++)
for (y = 0; y < m2.largeur; y++) {
rotFilter.carte[y][x] = m2.carte[m2.hauteur-y-1][m2.largeur-x-1];
}
c'est une approche générale qui aurait modifié pour s'adapter à java structures de données, mais les algorithmes de calculs sont les mêmes.
OriginalL'auteur A_P