//Ouverture des fichiers images nécessaires. //Les fichiers doivent avoir les mêmes dimensions. //La première est l'image multispectrale à traiter. //La deuxième est le blanc //La troisième est le noir ImageNom=File.openDialog("Choisir une image"); open(ImageNom); image=File.name; run("8-bit"); BlancNom=File.openDialog("Choisir le blanc"); open(BlancNom); Blanc=File.name; run("8-bit"); NoirNom=File.openDialog("Choisir le noir"); open(NoirNom); Noir=File.name; run("8-bit"); //Normalisation : image - noir imageCalculator("Subtract create 32-bit", image,Noir); Resultat1 = "Result of "+image; //Normalisation : blanc - noir imageCalculator("Subtract create 32-bit", Blanc,Noir); Blanc1 = "Result of "+Blanc; //Normalisation : résultat précédent/blanc1 * 255 run("Calculator Plus", "i1=Resultat1 i2=Blanc1 operation=[Divide: i2 = (i1/i2) x k1 + k2] k1=255 k2=0 create"); run("8-bit"); Resultat = "Result"; //Fermeture des images qui ne sont plus nécessaires. Obligatoire pour pouvoir faire le stack. close(image); close(Blanc); close(Noir); close(Resultat1); close(Blanc1); //Le "BatchMode" permet de faire les calculs sans l'affichage des images intermédiaires. C'est beaucoup plus rapide. //Il ne conserve cependant que l'image sélectionnée avant la mise à "False" setBatchMode(true); //Créations des 16 images 1-bande à partir de l'image 16-bandes. id = getImageID(); makeColorChannel("a", 0, 0); selectImage(id); makeColorChannel("b", -1, 0); selectImage(id); makeColorChannel("c", -2, 0); selectImage(id); makeColorChannel("d", -3, 0); selectImage(id); makeColorChannel("e", 0, -1); selectImage(id); makeColorChannel("f", -1, -1); selectImage(id); makeColorChannel("g", -2, -1); selectImage(id); makeColorChannel("h", -3, -1); selectImage(id); makeColorChannel("i", 0, -2); selectImage(id); makeColorChannel("j", -1, -2); selectImage(id); makeColorChannel("k", -2, -2); selectImage(id); makeColorChannel("l", -3, -2); selectImage(id); makeColorChannel("m", 0, -3); selectImage(id); makeColorChannel("n", -1, -3); selectImage(id); makeColorChannel("o", -2, -3); selectImage(id); makeColorChannel("p", -3, -3); //Définition de la fonction "makeColorChannel" utilisée plus haut //Elle crée une image de nom "name" qui est 1/4 fois moins large et 1/4 moins haute que celle de départ //Elle fonctionne en faisant une translation de l'image de départ de "dx" et "dy" //La partie "Size" permet de diminuer la grandeur de l'image et comme l'interpolation est mise à "none", on sélectionne un pixel sur 4 //en largeur un pixel sur 4 en hauteur function makeColorChannel(name, dx, dy) { slices = nSlices(); newWidth = getWidth()/4; newHeight = getHeight()/4; //Copie de l'image de départ que l'on va traiter run("Duplicate...", "title=&name duplicate range=1-&slices"); //On déplace l'image pour que le sous-pixel désiré soit en (0,0) run("Translate...", "x=&dx y=&dy interpolation=None stack"); //Redimensionne l'image en sélectionnant un pixel sur 4 en largeur et 1 pixel sur 4 en hauteur run("Size...", "width=&newWidth height=&newHeight depth=&slices interpolation=None"); } //Fermeture de l'image "resultat", nécessaire pour faire le stack. close(Resultat); //Faire le stack avec les 16 images run("Images to Stack", "name=Stack title=[] use"); stack = getTitle(); //TailleH est la taille horizontale des images 4 fois plus petites //TailleV est la taille verticale des images 4 fois plus petites TailleH= getWidth(); TailleV= getHeight(); //Stack à 16 images qui va contenir les pixels interpolés de toutes les longueurs d'onde. newImage("Bande1", "8-bit", TailleH*4, TailleV*4, 16); x=0; y=0; i=0; j=0; ValeurPixel =0; print("Interpolation"); //"n" représente la bande qui est calculée. Chaque longueur d'onde est faite une après l'autre. for(n=1;n<=16;n++){ if(n==1){Nx=0;Ny=0;} if(n==2){Nx=1;Ny=0;} if(n==3){Nx=2;Ny=0;} if(n==4){Nx=3;Ny=0;} if(n==5){Nx=0;Ny=1;} if(n==6){Nx=1;Ny=1;} if(n==7){Nx=2;Ny=1;} if(n==8){Nx=3;Ny=1;} if(n==9){Nx=0;Ny=2;} if(n==10){Nx=1;Ny=2;} if(n==11){Nx=2;Ny=2;} if(n==12){Nx=3;Ny=2;} if(n==13){Nx=0;Ny=3;} if(n==14){Nx=1;Ny=3;} if(n==15){Nx=2;Ny=3;} if(n==16){Nx=3;Ny=3;} print("Etape :"+n+" sur 16 interpolations"); for(x=0;x