ij.util.DicomTools Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ij Show documentation
Show all versions of ij Show documentation
ImageJ is an open source Java image processing program inspired by NIH Image for the Macintosh.
package ij.util;
import ij.*;
import ij.process.*;
import ij.plugin.DICOM;
/** DICOM utilities */
public class DicomTools {
private static final int MAX_DIGITS = 5;
private static String[] sliceLabels;
/** Sorts a DICOM stack by image number. */
public static ImageStack sort(ImageStack stack) {
if (IJ.debugMode) IJ.log("Sorting by DICOM image number");
if (stack.size()==1) return stack;
String[] strings = getSortStrings(stack, "0020,0013");
if (strings==null) return stack;
StringSorter.sort(strings);
ImageStack stack2 = null;
if (stack.isVirtual())
stack2 = ((VirtualStack)stack).sortDicom(strings, sliceLabels, MAX_DIGITS);
else
stack2 = sortStack(stack, strings);
return stack2!=null?stack2:stack;
}
private static ImageStack sortStack(ImageStack stack, String[] strings) {
ImageProcessor ip = stack.getProcessor(1);
ImageStack stack2 = new ImageStack(ip.getWidth(), ip.getHeight(), ip.getColorModel());
for (int i=0; i1) {
ImageStack stack = imp.getStack();
String label = stack.getSliceLabel(imp.getCurrentSlice());
if (label!=null && label.indexOf('\n')>0) metadata = label;
}
if (metadata==null)
metadata = (String)imp.getProperty("Info");
return getTag(metadata, id);
}
/** Returns the name of the specified DICOM tag id. */
public static String getTagName(String id) {
return DICOM.getTagName(id);
}
private static double getSeriesNumber(String tags) {
double series = getNumericTag(tags, "0020,0011");
if (Double.isNaN(series)) series = 0;
return series;
}
private static double getNumericTag(String hdr, String tag) {
String value = getTag(hdr, tag);
if (value==null) return Double.NaN;
int index3 = value.indexOf("\\");
if (index3>0)
value = value.substring(0, index3);
return Tools.parseDouble(value);
}
private static String getTag(String hdr, String tag) {
if (hdr==null) return null;
int index1 = hdr.indexOf(tag);
if (index1==-1) return null;
//IJ.log(hdr.charAt(index1+11)+" "+hdr.substring(index1,index1+20));
if (hdr.charAt(index1+11)=='>') {
// ignore tags in sequences
index1 = hdr.indexOf(tag, index1+10);
if (index1==-1) return null;
}
index1 = hdr.indexOf(":", index1);
if (index1==-1) return null;
int index2 = hdr.indexOf("\n", index1);
String value = hdr.substring(index1+1, index2);
return value;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy