Algorithme Unsharp Mask (HELP)

Algorithme Unsharp Mask (HELP) - Java - Programmation

Marsh Posté le 11-12-2014 à 09:35:34    

Bonjour je suis actuellement étudiant du DUT Métier du Multimédia et de l'Internet et je dois faire un exposé sur le filtre d'imageJ Unsharp Mask (renforcement sur Photoshop). Je ne comprends pas comment il fonctionne. J’ai trouvé cet algorithme qui ne m'aide pas forcement :
 
public void sharpenFloat(FloatProcessor fp, double sigma, float weight) {
if (gb == null) gb = new GaussianBlur();
gb.blurGaussian(fp, sigma, sigma, 0.01);
if (Thread.currentThread().isInterrupted()) return;
float[] pixels = (float[])fp.getPixels();
float[] snapshotPixels = (float[])fp.getSnapshotPixels();
int width = fp.getWidth();
Rectangle roi = fp.getRoi();
for (int y=roi.y; y<roi.y+roi.height; y++)
for (int x=roi.x, p=width*y+x; x<roi.x+roi.width; x++,p++)
pixels[p] = (snapshotPixels[p] - weight*pixels[p])/(1f - weight);
}
 
 
Quelqu'un peut m'expliquer ?
 
Merci d'avance !

Reply

Marsh Posté le 11-12-2014 à 09:35:34   

Reply

Marsh Posté le 11-12-2014 à 12:28:08    

Bonjour,

 

Peux tu éditer ton message pour mettre le code entre balises appropriées, en le formatant un peu, et citer la source initiale de l'algo ?
D'autant que s'il se trouve dans un tuto sur le traitement d'images, celui-ci décrit très probablement la logique retenue...

 

Et si ça n'est pas le cas, c'est un algo plutôt commun, donc je pense que plutôt qu'essayer d'en lire une implémentation existante, tu devrais essayer d'en trouver la théorie.
Parce que "il ne m'aide pas forcément" ça fait un peu léger pour savoir ce que tu as déjà assimilé.

 

PS : je viens de lire l'algo et il ne me parait pas spécialement dur à comprendre, pourtant je ne suis pas dans le traitement d'images et je ne connais pas imageJ. L'essentiel est dans la dernière ligne, j'ai juste un peu de mal à cerner le flou gaussien au début.


Message édité par TotalRecall le 11-12-2014 à 12:32:55

---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 11-12-2014 à 21:31:07    

Bonjour,
Le lien de l'extrait du code :  

Code :
  1. /** Unsharp Mask filtering of a float image. 'fp' must have a valid snapshot. */
  2.     public void sharpenFloat(FloatProcessor fp, double sigma, float weight) {
  3.         if (gb == null) gb = new GaussianBlur();
  4.         gb.blurGaussian(fp, sigma, sigma, 0.01);
  5.         if (Thread.currentThread().isInterrupted()) return;
  6.         float[] pixels = (float[])fp.getPixels();
  7.         float[] snapshotPixels = (float[])fp.getSnapshotPixels();
  8.         int width = fp.getWidth();
  9.         Rectangle roi = fp.getRoi();
  10.         for (int y=roi.y; y<roi.y+roi.height; y++)
  11.             for (int x=roi.x, p=width*y+x; x<roi.x+roi.width; x++,p++)
  12.                 pixels[p] = (snapshotPixels[p] - weight*pixels[p])/(1f - weight);
  13.     }


 
se trouve ici : http://rsb.info.nih.gov/ij/develop [...] .java.html
et avec notamment ce commentaire en en-tête :

Citation :

Code :
  1. /** This plugin-filter implements ImageJ's Unsharp Mask command.
  2. * Unsharp masking subtracts a blurred copy of the image and rescales the image
  3. * to obtain the same contrast of large (low-frequency) structures as in the
  4. * input image. This is equivalent to adding a high-pass filtered image and
  5. * thus sharpens the image.
  6. * "Radius (Sigma)" is the standard deviation (blur radius) of the Gaussian blur that
  7. * is subtracted. "Mask Weight" determines the strength of filtering, where "Mask Weight"=1
  8. * would be an infinite weight of the high-pass filtered image that is added.
  9. */


Reply

Marsh Posté le 12-12-2014 à 14:42:56    

Bonjour,
 
J'ai compris que le principe de cet algorithme est d'accentuer les contraste entre les pixels clairs et sombre (en utilisant un flou gaussien ?).
Cependant, je n'arrive pas a bien saisir la significations des phrases, en particulier celui de la boucle for. En fait je n'arrive pas à comprendre le calcul qui permet le renforcement sur l'image.  
 
Par avance merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed