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
| import ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import ij.plugin.filter.*;
import java.util.*;
import ij.measure.ResultsTable;
public class pgm_ implements PlugInFilter {
ImagePlus imp;
public int setup(String arg, ImagePlus imp) {
this.imp = imp;
return DOES_ALL;
}
public double distance(double r,double g,double b, double r1, double g1,double b1){
double res;
res=Math.sqrt((r-r1)*(r-r1)+(g-g1)*(g-g1)+(b-b1)*(b-b1));
return res;
}
/////////////////////////////// Ma
public double Ma(int [] pixels){
int i,j,a;
double Ma=0,var=0;
double sigma=0.2;
double sig=sigma*sigma;
double var1=1/(3.14159265358979*0.08);
double v,noyau;
for(i=0; i<pixels.length; i++){
for(a=0; a<pixels.length; a++){
int c = pixels[a];
double r = (c & 0xff0000)>>16;
double g = (c & 0x00ff00)>>8;
double b = (c & 0x0000ff);
int c1 = pixels[i];
double r1 = (c1 & 0xff0000)>>16;
double g1 = (c1 & 0x00ff00)>>8;
double b1 = (c1 & 0x0000ff);
v=distance(r1/255,g1/255,b1/255,r/255,g/255,b/255);
var=Math.exp((v*v)/(-0.08));
noyau= var1*var;
Ma=Ma+noyau;
}
}
return Ma;
}
/////////////////Ma
public void run(ImageProcessor ip) {
ip.invert();
imp.updateAndDraw();
IJ.wait(500);
ip.invert();
imp.updateAndDraw();
int nbrows=ip.getHeight();
int nbcols=ip.getWidth();
int[] pixels = (int[]) ip.getPixels();
int k=4;
/////////////////Ma
double Ma=Ma(pixels);
IJ.showMessage("Ma= "+Ma);
}
} |
Partager