package edu.mbl.jif.imaging.stats; import java.awt.Dimension; import java.awt.Rectangle; public class ImageAnalyzer { static int numberFrames = 0; static int frame = 0; static float[] data; static long sum = 0; static int imageSize = 0; static int max = 0; static float mean = 0.0f; static int min = 99999; static int maxInROI = 0; static float meanInROI = 0.0f; static int minInROI = 99999; static int nSaturated = 0; ImageStatistics stats; public static ImageStatistics getStats (Object array, Rectangle roi, Dimension frame) { if(array == null) return null; if (array instanceof byte[]) { return getStats((byte[]) array, roi, frame); } else if (array instanceof short[]) { return getStats((short[]) array, roi, frame); } else if (array instanceof int[]) { return getStats((int[]) array, roi, frame); } else { return null; } } // for Byte array public static ImageStatistics getStats (byte[] array, Rectangle roi, Dimension frame) { if(array == null) return null; int x = roi.x; int y = roi.y; int w = roi.width; int h = roi.height; int frameW = frame.width; int frameH = frame.height; int numPixels = w * h; float average = 0; int sum = 0; // if ((w == 0) || (h == 0)) { maxInROI = -1; meanInROI = -1.0f; minInROI = -1; } else { maxInROI = 0; meanInROI = 0.0f; minInROI = 99999; int xFinal = x + w; int yFinal = y + h; for (int nY = y; nY < yFinal; nY++) { for (int nX = x; nX < xFinal; nX++) { int offset = (frameW * nY) + nX; sum = sum + (array[offset] & 0xff); if ((array[offset] & 0xff) > maxInROI) { maxInROI = (int) (array[(frameW * nY) + nX] & 0xff); } if ((array[offset] & 0xff) < minInROI) { minInROI = (int) (array[(frameW * nY) + nX] & 0xff); } } } try { meanInROI = (float) sum / (float) numPixels; } catch (Exception ex) {} } // max = 0; mean = 0.0f; min = 99999; nSaturated = 0; sum = 0; for (int i = 0; i < array.length; i++) { sum = sum + (int) (array[i] & 0xff); if ((array[i] & 0xff) > max) { max = array[i] & 0xff; } if ((array[i] & 0xff) < min) { min = array[i] & 0xff; } if ((array[i] & 0xff) < min) { min = array[i] & 0xff; } } try { mean = (float) sum / (float) array.length; } catch (Exception ex) {} return new ImageStatistics(max, mean, min, maxInROI, meanInROI, minInROI); } // for short array public static ImageStatistics getStats (short[] array, Rectangle roi, Dimension frame) { if(array == null) return null; int x = roi.x; int y = roi.y; int w = roi.width; int h = roi.height; int frameW = frame.width; int frameH = frame.height; int numPixels = w * h; float average = 0; int sum = 0; // if ((w == 0) || (h == 0)) { maxInROI = -1; meanInROI = -1.0f; minInROI = -1; } else { maxInROI = 0; meanInROI = 0.0f; minInROI = 99999; int xFinal = x + w; int yFinal = y + h; for (int nY = y; nY < yFinal; nY++) { for (int nX = x; nX < xFinal; nX++) { int offset = (frameW * nY) + nX; sum = sum + (array[offset] & 0xffff); if ((array[offset] & 0xffff) > maxInROI) { maxInROI = (int) (array[(frameW * nY) + nX] & 0xffff); } if ((array[offset] & 0xffff) < minInROI) { minInROI = (int) (array[(frameW * nY) + nX] & 0xffff); } } } try { meanInROI = (float) sum / (float) numPixels; } catch (Exception ex) {} } // max = 0; mean = 0.0f; min = 99999; nSaturated = 0; sum = 0; for (int i = 0; i < array.length; i++) { sum = sum + (int) (array[i] & 0xffff); if ((array[i] & 0xffff) > max) { max = array[i] & 0xffff; } if ((array[i] & 0xffff) < min) { min = array[i] & 0xffff; } if ((array[i] & 0xffff) < min) { min = array[i] & 0xffff; } } try { mean = (float) sum / (float) array.length; } catch (Exception ex) {} return new ImageStatistics(max, mean, min, maxInROI, meanInROI, minInROI); } // for an Integer array public static ImageStatistics getStats (int[] array, Rectangle roi, Dimension frame) { if(array == null) return null; if(frame == null) return null; int x = roi.x; int y = roi.y; int w = roi.width; int h = roi.height; int frameW = frame.width; int frameH = frame.height; int numPixels = w * h; float average = 0; int sum = 0; // if ((w == 0) || (h == 0)) { maxInROI = -1; meanInROI = -1.0f; minInROI = -1; } else { maxInROI = 0; meanInROI = 0.0f; minInROI = 99999; int xFinal = x + w; int yFinal = y + h; for (int nY = y; nY < yFinal; nY++) { for (int nX = x; nX < xFinal; nX++) { int offset = (frameW * nY) + nX; sum = sum + (array[offset] & 0xff); if ((array[offset] & 0xff) > maxInROI) { maxInROI = (int) (array[(frameW * nY) + nX] & 0xff); } if ((array[offset] & 0xff) < minInROI) { minInROI = (int) (array[(frameW * nY) + nX] & 0xff); } } } try { meanInROI = (float) sum / (float) numPixels; } catch (Exception ex) {} } // max = 0; mean = 0.0f; min = 99999; sum = 0; for (int i = 0; i < array.length; i++) { sum = sum + (int) (array[i] & 0xff); if ((array[i] & 0xff) > max) { max = array[i] & 0xff; } if ((array[i] & 0xff) < min) { min = array[i] & 0xff; } } try { mean = (float) sum / (float) array.length; } catch (Exception ex) {} return new ImageStatistics(max, mean, min, maxInROI, meanInROI, minInROI); } // public static ImageStatistics getStats(int[] array, Rectangle roi, // Dimension frame) { // int x = roi.x; // int y = roi.y; // int w = roi.width; // int h = roi.height; // int xFinal = x + w; // int yFinal = y + h; // int frameW = frame.width; // int frameH = frame.height; // int numPixels = w * h; // float average = 0; // int sum = 0; // // // // maxInROI = 0; // meanInROI = 0.0f; // minInROI = 999999; // for (int nY = y; nY < yFinal; nY++) { // for (int nX = x; nX < xFinal; nX++) { // sum = sum + array[(frameW * nY) + nX]; // if (array[(frameW * nY) + nX] > max) { // maxInROI = array[(frameW * nY) + nX]; // } // if (array[(frameW * nY) + nX] < min) { // minInROI = array[(frameW * nY) + nX]; // } // } // } // try { // meanInROI = (float) sum / (float) numPixels; // } catch (Exception ex) {} // // // // max = 0; // mean = 0.0f; // min = 999999; // sum = 0; // for (int i = 0; i < array.length; i++) { // sum = (sum + array[i]); // if ((array[i]) > max) // max = array[i]; // if ((array[i]) < min) // min = array[i]; // if ((array[i]) > max) // max = array[i]; // } // try { // mean = (float) sum / (float) numPixels; // } catch (Exception ex) {} // // // // return new ImageStatistics(max, mean, min, maxInROI, meanInROI, minInROI); // } public static ImageStatistics getStats (int[] array) { if(array == null) return null; float average = 0; int sum = 0; max = 0; mean = 0.0f; min = 999999; for (int i = 0; i < array.length; i++) { sum = (sum + array[i]); if ((array[i]) > max) { max = array[i]; } if ((array[i]) < min) { min = array[i]; } if ((array[i]) > max) { max = array[i]; } } try { mean = (float) sum / (float) array.length; } catch (Exception ex) {} // return new ImageStatistics(max, mean, min, maxInROI, meanInROI, minInROI); } }