import java.applet.*; import java.awt.*; import java.awt.image.*; import java.net.*; import java.util.*; import java.io.*; import java.lang.Math; import java.awt.Color.*; /** * Crimmins is an operator that applies the Crimmins Speckle Reduction * Algorithm. * * @author Simon Horne. */ public class Crimmins{ /** * Default no-arg constructor. */ public Crimmins() { } /** * Converts a 1D array of pixels to a 2D array of grey level values. * * @param input The 1D array. * @param width The width of the 2D array. * @param height The height of the 2D array. * @return The 2D array. */ public static int [][] pixelsToGreys(int [] input, int width, int height){ int [][] arrays = new int [width][height]; for(int i=0;i=0 && image[i-1][j]>image[i][j]+1){ image2[i][j] = image[i][j] +1; } else image2[i][j] = image[i][j]; } } for(int j=0;j=0 && i+1image2[i][j] && image2[i+1][j]>=image2[i][j]){ image[i][j] = image2[i][j] +1; } else image[i][j] = image2[i][j]; } } for(int j=0;j=0 && image[i-1][j]>=image[i][j] && image[i+1][j]>image[i][j]){ image2[i][j] = image[i][j] +1; } else image2[i][j] = image[i][j]; } } for(int j=0;jimage2[i][j]+1){ image[i][j] = image2[i][j] +1; } else image[i][j] = image2[i][j]; } } for(int j=0;j=0 && image[i-1][j]=0 && i+1=0 && image[i-1][j]<=image[i][j] && image[i+1][j]=0 && image[i][j-1]>image[i][j]+1){ image2[i][j] = image[i][j] +1; } else image2[i][j] = image[i][j]; } } for(int j=0;j=0 && j+1image2[i][j] && image2[i][j+1]>=image2[i][j]){ image[i][j] = image2[i][j] +1; } else image[i][j] = image2[i][j]; } } for(int j=0;j=0 && image[i][j-1]>=image[i][j] && image[i][j+1]>image[i][j]){ image2[i][j] = image[i][j] +1; } else image2[i][j] = image[i][j]; } } for(int j=0;jimage2[i][j]+1){ image[i][j] = image2[i][j] +1; } else image[i][j] = image2[i][j]; } } for(int j=0;j=0 && image[i][j-1]=0 && j+1=0 && image[i][j-1]<=image[i][j] && image[i][j+1]=0 && image[i+1][j-1]>image[i][j]+1){ image2[i][j] = image[i][j] +1; } else image2[i][j] = image[i][j]; } } for(int j=0;j=0 && i+1=0 && j+1image2[i][j] && image2[i-1][j+1]>=image2[i][j]){ image[i][j] = image2[i][j] +1; } else image[i][j] = image2[i][j]; } } for(int j=0;j=0 && i+1=0 && j+1=image[i][j] && image[i-1][j+1]>image[i][j]){ image2[i][j] = image[i][j] +1; } else image2[i][j] = image[i][j]; } } for(int j=0;j=0 && j+1image2[i][j]+1){ image[i][j] = image2[i][j] +1; } else image[i][j] = image2[i][j]; } } for(int j=0;j=0 && image[i+1][j-1]=0 && i+1=0 && j+1=0 && i+1=0 && j+1=0 && j+1image[i][j]+1){ image2[i][j] = image[i][j] +1; } else image2[i][j] = image[i][j]; } } for(int j=0;j=0 && i+1=0 && j+1image2[i][j] && image2[i-1][j-1]>=image2[i][j]){ image[i][j] = image2[i][j] +1; } else image[i][j] = image2[i][j]; } } for(int j=0;j=0 && i+1=0 && j+1=image[i][j] && image[i-1][j-1]>image[i][j]){ image2[i][j] = image[i][j] +1; } else image2[i][j] = image[i][j]; } } for(int j=0;j=0 && j-1>=0 && image2[i-1][j-1]>image2[i][j]+1){ image[i][j] = image2[i][j] +1; } else image[i][j] = image2[i][j]; } } for(int j=0;j=0 && i+1=0 && j+1=0 && i+1=0 && j+1=0 && j-1>=0 && image2[i-1][j-1]