/** * Check if the name of a StainVector is "dab" or "d" (ignoring case) * * @param stain * @return */ public static boolean isDAB(final StainVector stain) { String name = stain.getName(); if (name == null) return false; name = name.toLowerCase().trim(); for (String s : DAB_SPELLINGS) { if (s.equals(name)) return true; } return false; }
/** * Check if the name of a StainVector is "eosin", "eos" or "e" (ignoring case) * * @param stain * @return */ public static boolean isEosin(final StainVector stain) { String name = stain.getName(); if (name == null) return false; name = name.toLowerCase().trim(); for (String s : EOSIN_SPELLINGS) { if (s.equals(name)) return true; } return false; }
/** * Check if the name of a StainVector is "haematoxylin", "hematoxylin", "haem" or "h" (ignoring case) * * @param stain * @return */ public static boolean isHematoxylin(final StainVector stain) { String name = stain.getName(); if (name == null) return false; name = name.toLowerCase().trim(); for (String s : HEMATOXYLIN_SPELLINGS) { if (s.equals(name)) return true; } return false; }
public String getName(final ColorDeconvolutionStains stains) { switch (this) { case STAIN_1: return stains == null ? "Stain 1" : stains.getStain(1).getName(); case STAIN_2: return stains == null ? "Stain 2" : stains.getStain(2).getName(); case STAIN_3: return stains == null ? "Stain 3" : stains.getStain(3).getName(); case HUE: return "Hue"; case OD: return "OD Sum"; default: return getPrompt(null); } }
public String getPrompt(final ImageData<?> imageData) { ColorDeconvolutionStains stains = imageData == null ? null : imageData.getColorDeconvolutionStains(); if (stains != null) { switch (this) { case STAIN_1: return stains.getStain(1).getName() + " (color deconvolved)"; case STAIN_2: return stains.getStain(2).getName() + " (color deconvolved)"; case STAIN_3: return stains.getStain(3).getName() + " (color deconvolved)"; default: break; } } return prompt; }
public static String getColorDeconvolutionStainsAsString(final ColorDeconvolutionStains stains, final int nDecimalPlaces) { if (stains == null) return ""; StringBuilder sb = new StringBuilder(); sb.append("{"); sb.append("\"Name").append("\" : \"").append(stains.getName()).append("\", "); for (int i = 1; i <= 3; i++) { StainVector stain = stains.getStain(i); // No need to add the residual stain if (i == 3 && stain.isResidual()) continue; sb.append("\"Stain ").append(i).append("\" : \"").append(stain.getName()).append("\", "); sb.append("\"Values ").append(i).append("\" : \"").append(stain.arrayAsString(Locale.US, nDecimalPlaces)).append("\", "); } sb.append("\"Background\" : \""); sb.append(" ").append(GeneralTools.arrayToString(Locale.US, new double[]{stains.getMaxRed(), stains.getMaxGreen(), stains.getMaxBlue()}, nDecimalPlaces)); // sb.append(String.format( "%.Nf %.Nf %.Nf".replace("N", Integer.toString(nDecimalPlaces)), stains.getMaxRed(), stains.getMaxGreen(), stains.getMaxBlue())); // sb.append(stains.getMaxRed()).append(" "); // sb.append(stains.getMaxGreen()).append(" "); // sb.append(stains.getMaxBlue()); sb.append("\"}"); return sb.toString(); }
@Override public String getName() { ensureStainsUpdated(); if (method != null) return method.toString(); if (stains == null) return "Stain " + stainNumber + " (missing)"; return stains.getStain(stainNumber).getName(); }
StainVector s1 = new StainVector(stainsOriginal.getStain(1).getName(), red[ind1], green[ind1], blue[ind1]); StainVector s2 = new StainVector(stainsOriginal.getStain(2).getName(), red[ind2], green[ind2], blue[ind2]); s1 = new StainVector(stainsOriginal.getStain(1).getName(), red[ind2], green[ind2], blue[ind2]); s2 = new StainVector(stainsOriginal.getStain(2).getName(), red[ind1], green[ind1], blue[ind1]); double angle22 = StainVector.computeAngle(s2, stainsOriginal.getStain(2)); if (Math.min(angle12, angle21) < Math.min(angle11, angle22)) { s1 = new StainVector(stainsOriginal.getStain(1).getName(), red[ind2], green[ind2], blue[ind2]); s2 = new StainVector(stainsOriginal.getStain(2).getName(), red[ind1], green[ind1], blue[ind1]);
StainVector stain2Refined = new StainVector(stains.getStain(2).getName(), base1[0]*cos + base2[0]*sin, base1[1]*cos + base2[1]*sin, base1[2]*cos + base2[2]*sin); cos = Math.cos(maxAngle); sin = Math.sin(maxAngle); StainVector stain1Refined = new StainVector(stains.getStain(1).getName(), base1[0]*cos + base2[0]*sin, base1[1]*cos + base2[1]*sin, base1[2]*cos + base2[2]*sin);