/* * #%L * OME Bio-Formats package for reading and converting biological file formats. * %% * Copyright (C) 2005 - 2015 Open Microscopy Environment: * - Board of Regents of the University of Wisconsin-Madison * - Glencoe Software, Inc. * - University of Dundee * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-2.0.html>. * #L% */ import java.awt.image.*; import loci.formats.*; import loci.formats.gui.BufferedImageReader; import loci.formats.gui.BufferedImageWriter; /** * Sums together the image planes from the given file, * and saves the result to a 16-bit TIFF. */ public class SumPlanes { public static void main(String[] args) throws Exception { String id = args[0]; BufferedImageReader r = new BufferedImageReader(); System.out.print("Reading " + id); r.setId(id); int imageCount = r.getImageCount(); BufferedImage[] images = new BufferedImage[imageCount]; for (int i=0; i<imageCount; i++) { System.out.print("."); images[i] = r.openImage(i); } r.close(); System.out.println(" [done]"); String outId = id + ".tif"; BufferedImageWriter w = new BufferedImageWriter(); System.out.print("Writing " + outId); w.setId(outId); w.saveImage(0, sum(images)); w.close(); System.out.println(" [done]"); } public static BufferedImage sum(BufferedImage[] images) { // Assuming that all images have the same dimensions and type int w = images[0].getWidth(); int h = images[0].getHeight(); //int type = images[0].getType(); BufferedImage result = new BufferedImage(w, h, BufferedImage.TYPE_USHORT_GRAY); // type == 0 for some reason... WritableRaster raster = result.getRaster().createCompatibleWritableRaster(); int bands = raster.getNumBands(); for (int y=0; y<h; y++) { for (int x=0; x<w; x++) { for (int b=0; b<bands; b++) { float sum = 0; for (int i=0; i<images.length; i++) { sum = sum + images[i].getRaster().getSample(x, y, b); } raster.setSample(x, y, b, sum); } } } result.setData(raster); return result; } }