public static StainVector makeDefaultStainVector(DEFAULT_STAINS stain) { switch(stain) { case HEMATOXYLIN: return new StainVector(stain.toString(), STAIN_HEMATOXYLIN_DEFAULT); case EOSIN: return new StainVector(stain.toString(), STAIN_EOSIN_DEFAULT); case DAB: return new StainVector(stain.toString(), STAIN_DAB_DEFAULT); } return null; }
public static StainVector parseStainVector(Locale locale, String name, String s) { if (s == null) return null; s = s.trim(); if (s.length() == 0) return null; if (s.length() == 1) { s = s.toLowerCase(); if (s.equals("h")) return StainVector.makeDefaultStainVector(DEFAULT_STAINS.HEMATOXYLIN); else if (s.equals("e")) return StainVector.makeDefaultStainVector(DEFAULT_STAINS.EOSIN); else if (s.equals("d")) return StainVector.makeDefaultStainVector(DEFAULT_STAINS.DAB); } double[] vector = parseStainValues(locale, s); if (vector != null) return new StainVector(name, vector[0], vector[1], vector[2]); // If we got here, we didn't find 3 numbers return null; }
public static StainVector makeOrthogonalStainVector(String name, StainVector s1, StainVector s2, boolean isResidual) { return new StainVector(name, cross3(s1.getArray(), s2.getArray()), isResidual); }
double b = blue[medianInd]; return new StainVector(name, r, g, b);
public static StainVector generateStainVectorFromRGB(String name, int rgb, double redMax, double greenMax, double blueMax) { double rOD = makeOD(ColorTools.red(rgb), redMax); double gOD = makeOD(ColorTools.green(rgb), greenMax); //J double bOD = makeOD(ColorTools.blue(rgb), blueMax); //J return new StainVector(name, rOD, gOD, bOD); }
StainVector stainBase1 = new StainVector("Basis 1", r1Sum/n1, g1Sum/n1, b1Sum/n1); StainVector stainBase2 = new StainVector("Basis 2", r2Sum/n2, g2Sum/n2, b2Sum/n2); stainBase1 = new StainVector("Basis 1", (stainBase1.getRed() + stainBase2.getRed())/2, (stainBase1.getGreen() + stainBase2.getGreen())/2, (stainBase1.getBlue() + stainBase2.getBlue())/2); StainVector stainNorm = StainVector.makeResidualStainVector(stainBase1, stainBase2); stainBase2 = StainVector.makeOrthogonalStainVector("Basis 2", stainBase1, stainNorm, false); 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);
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]);