/* * Copyright 2010-2015 Institut Pasteur. * * This file is part of Icy. * * Icy 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 3 of the License, or * (at your option) any later version. * * Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>. */ package icy.itk; /** * ITK library support.<br> * Will be externalized in future as a plugin. * * @author Stephane */ public class ItkUtil { // public static DataType getDataTypeFromPixelID(int value) // { // return getDataTypeFromPixelID(PixelIDValueEnum.swigToEnum(value)); // } // // public static DataType getDataTypeFromPixelID(PixelIDValueEnum value) // { // if (value == PixelIDValueEnum.sitkInt8) // return DataType.BYTE; // if (value == PixelIDValueEnum.sitkUInt8) // return DataType.UBYTE; // if (value == PixelIDValueEnum.sitkInt16) // return DataType.SHORT; // if (value == PixelIDValueEnum.sitkUInt16) // return DataType.USHORT; // if (value == PixelIDValueEnum.sitkInt32) // return DataType.INT; // if (value == PixelIDValueEnum.sitkUInt32) // return DataType.UINT; // if (value == PixelIDValueEnum.sitkFloat32) // return DataType.FLOAT; // if (value == PixelIDValueEnum.sitkFloat64) // return DataType.DOUBLE; // // return DataType.UNDEFINED; // } // // public static boolean isSignedPixelID(int value) // { // return isSignedPixelID(PixelIDValueEnum.swigToEnum(value)); // } // // public static boolean isSignedPixelID(PixelIDValueEnum value) // { // return (value == PixelIDValueEnum.sitkInt8) || (value == PixelIDValueEnum.sitkInt16) // || (value == PixelIDValueEnum.sitkInt32) || (value == PixelIDValueEnum.sitkFloat32) // || (value == PixelIDValueEnum.sitkFloat64); // } // // public static PixelIDValueEnum getPixelIDFromDataType(DataType dataType) // { // switch (dataType) // { // case BYTE: // return PixelIDValueEnum.sitkInt8; // case UBYTE: // return PixelIDValueEnum.sitkUInt8; // case SHORT: // return PixelIDValueEnum.sitkInt16; // case USHORT: // return PixelIDValueEnum.sitkUInt16; // case INT: // return PixelIDValueEnum.sitkInt32; // case UINT: // return PixelIDValueEnum.sitkUInt32; // case FLOAT: // return PixelIDValueEnum.sitkFloat32; // case DOUBLE: // return PixelIDValueEnum.sitkFloat64; // } // // return PixelIDValueEnum.sitkUnknown; // } // // public static int getPixelIDAsIntFromDataType(DataType dataType) // { // return getPixelIDFromDataType(dataType).swigValue(); // } // // /** // * Convert the specified ICY sequence to ITK image.<br> // * ITK images are only 3D [XYZ] so multiple channels images // * or multiple frames are not supported. // */ // public static Image getItkIImage(Sequence sequence) // { // final int sizeX = sequence.getSizeX(); // final int sizeY = sequence.getSizeY(); // final int sizeZ = sequence.getSizeZ(); // final DataType dataType = sequence.getDataType_(); // // final Image result = new Image(sizeX, sizeY, sizeZ, getPixelIDFromDataType(dataType)); // final VectorUInt32 idx = new VectorUInt32(3); // // switch (dataType) // { // case BYTE: // for (int z = 0; z < sizeZ; z++) // { // final byte[] data = sequence.getDataXYAsByte(0, z, 0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // set pixel // result.setPixelAsInt8(idx, data[offset]); // } // } // } // break; // // case UBYTE: // for (int z = 0; z < sizeZ; z++) // { // final byte[] data = sequence.getDataXYAsByte(0, z, 0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // set pixel // result.setPixelAsUInt8(idx, data[offset]); // } // } // } // break; // // case SHORT: // for (int z = 0; z < sizeZ; z++) // { // final short[] data = sequence.getDataXYAsShort(0, z, 0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // set pixel // result.setPixelAsInt16(idx, data[offset]); // } // } // } // break; // // case USHORT: // for (int z = 0; z < sizeZ; z++) // { // final short[] data = sequence.getDataXYAsShort(0, z, 0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // set pixel // result.setPixelAsUInt16(idx, data[offset]); // } // } // } // break; // // case INT: // for (int z = 0; z < sizeZ; z++) // { // final int[] data = sequence.getDataXYAsInt(0, z, 0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // set pixel // result.setPixelAsInt32(idx, data[offset]); // } // } // } // break; // // case UINT: // for (int z = 0; z < sizeZ; z++) // { // final int[] data = sequence.getDataXYAsInt(0, z, 0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // set pixel // result.setPixelAsUInt32(idx, data[offset]); // } // } // } // break; // // case FLOAT: // for (int z = 0; z < sizeZ; z++) // { // final float[] data = sequence.getDataXYAsFloat(0, z, 0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // set pixel // result.setPixelAsFloat(idx, data[offset]); // } // } // } // break; // // case DOUBLE: // for (int z = 0; z < sizeZ; z++) // { // final double[] data = sequence.getDataXYAsDouble(0, z, 0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // set pixel // result.setPixelAsDouble(idx, data[offset]); // } // } // } // break; // } // // return result; // } // // /** // * Convert the specified ITK image to ICY sequence.<br> // * ITK images are only 3D [XYZ] so multiple channels images // * or multiple frames are not supported. // */ // public static Sequence getSequence(Image itkImg) // { // final int sizeX = (int) itkImg.getWidth(); // final int sizeY = (int) itkImg.getHeight(); // final int sizeZ = (int) itkImg.getDepth(); // final DataType dataType = getDataTypeFromPixelID(itkImg.getPixelIDValue()); // // final Sequence result = new Sequence(); // final VectorUInt32 idx = new VectorUInt32(3); // // result.beginUpdate(); // try // { // switch (dataType) // { // case BYTE: // for (int z = 0; z < sizeZ; z++) // { // final IcyBufferedImage img = new IcyBufferedImage(sizeX, sizeY, 1, dataType); // final byte[] data = img.getDataXYAsByte(0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // get pixel // data[offset] = itkImg.getPixelAsInt8(idx); // } // } // // img.dataChanged(); // result.setImage(0, z, img); // } // break; // // case UBYTE: // for (int z = 0; z < sizeZ; z++) // { // final IcyBufferedImage img = new IcyBufferedImage(sizeX, sizeY, 1, dataType); // final byte[] data = img.getDataXYAsByte(0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // get pixel // data[offset] = (byte) itkImg.getPixelAsUInt8(idx); // } // } // // img.dataChanged(); // result.setImage(0, z, img); // } // break; // // case SHORT: // for (int z = 0; z < sizeZ; z++) // { // final IcyBufferedImage img = new IcyBufferedImage(sizeX, sizeY, 1, dataType); // final short[] data = img.getDataXYAsShort(0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // get pixel // data[offset] = itkImg.getPixelAsInt16(idx); // } // } // // img.dataChanged(); // result.setImage(0, z, img); // } // break; // // case USHORT: // for (int z = 0; z < sizeZ; z++) // { // final IcyBufferedImage img = new IcyBufferedImage(sizeX, sizeY, 1, dataType); // final short[] data = img.getDataXYAsShort(0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // get pixel // data[offset] = (short) itkImg.getPixelAsUInt16(idx); // } // } // // img.dataChanged(); // result.setImage(0, z, img); // } // break; // // case INT: // for (int z = 0; z < sizeZ; z++) // { // final IcyBufferedImage img = new IcyBufferedImage(sizeX, sizeY, 1, dataType); // final int[] data = img.getDataXYAsInt(0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // get pixel // data[offset] = itkImg.getPixelAsInt32(idx); // } // } // // img.dataChanged(); // result.setImage(0, z, img); // } // break; // // case UINT: // for (int z = 0; z < sizeZ; z++) // { // final IcyBufferedImage img = new IcyBufferedImage(sizeX, sizeY, 1, dataType); // final int[] data = img.getDataXYAsInt(0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // get pixel // data[offset] = (int) itkImg.getPixelAsUInt32(idx); // } // } // // img.dataChanged(); // result.setImage(0, z, img); // } // break; // // case FLOAT: // for (int z = 0; z < sizeZ; z++) // { // final IcyBufferedImage img = new IcyBufferedImage(sizeX, sizeY, 1, dataType); // final float[] data = img.getDataXYAsFloat(0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // get pixel // data[offset] = itkImg.getPixelAsFloat(idx); // } // } // // img.dataChanged(); // result.setImage(0, z, img); // } // break; // // case DOUBLE: // for (int z = 0; z < sizeZ; z++) // { // final IcyBufferedImage img = new IcyBufferedImage(sizeX, sizeY, 1, dataType); // final double[] data = img.getDataXYAsDouble(0); // int offset = 0; // // set index // idx.set(2, z); // // for (int y = 0; y < sizeY; y++) // { // // set index // idx.set(1, y); // // for (int x = 0; x < sizeX; x++, offset++) // { // // set index // idx.set(0, x); // // get pixel // data[offset] = itkImg.getPixelAsDouble(idx); // } // } // // img.dataChanged(); // result.setImage(0, z, img); // } // break; // } // } // finally // { // result.endUpdate(); // } // // return result; // } }