/* VESSELJ V 1.0 POWERED BY ALESSANDRO RABIOLO MD UNIVERSITA' VITA-SALUTE SAN RAFFAELE, MILAN, ITALY EYE REPAIR LAB, SAN RAFFAELE SCIENTIFIC INSTITUTE, MILAN, ITALY */ //menu di scelta iniziale Dialog.create("Radio Buttons"); items = newArray("CD31-red", "CD31-green", "Lyve1-green", "Lyve1-red"); Dialog.addRadioButtonGroup("Options", items, 4, 1, "CD31-red"); Dialog.show; scelta = Dialog.getRadioButton(); if (scelta == "CD31-red") // VASI { waitForUser("Advice", "keep open only the images you want to analyze, then click ok"); setBackgroundColor (16777215); waitForUser("Selection required", "put a small rectangular ROI around the most fluorescent background area free from vessels"); // CORREGGO PER IL BACKGROUND Img = newArray(); Total_pixels = newArray(); Not_NV = newArray (); NV = newArray (); CNV = newArray (); Threshold = newArray (); for (i=1; i<=nImages; i++) { selectImage (i); run("ROI Manager..."); // Gestisco il ROI manager e correggo per il box conta = roiManager("count"); if (conta != 0) { roiManager("Delete"); // svuoto il ROI manager se è pieno } if (selectionType() != 0) { titolone = getTitle (); print ("The image"+titolone+"has not been analyzed becaused no ROI was selected"); } else { titolo = getTitle (); Img = Array.concat(Img, titolo); roiManager("Add"); roiManager("Select", 0); //seleziono la nuova roi getSelectionBounds(x, y, width, height); redtot = 0; redpixel = 0; larghezza = x + width; lunghezza = y + height; for (y = y; y <= lunghezza ; y++) { for (x = x; x <= larghezza; x++) { v = getPixel(x,y); r = (v>>16)&0xff; // estraggo red byte (bits 23-17) redtot = redtot + r; redpixel++; } } redmean = redtot / redpixel; if (redmean < 18) { redtarget = 20; } if ((redmean >=18) & (redmean <=30)) { redtarget = 35; } if ((redmean >30) & (redmean <=45)) { redtarget = 50; } if ((redmean >45) & (redmean <=60)) { redtarget = 75; } if ((redmean >60) & (redmean <=75)) { redtarget = 90; } if ((redmean >75) & (redmean <=90)) { redtarget = 105; } if ((redmean >90) & (redmean <=105)) { redtarget = 120; } if ((redmean >105) & (redmean <=120)) { redtarget = 135; } if ((redmean >120) & (redmean <=135)) { redtarget = 150; } if (redmean >135) { redtarget = redmean + 10; } vaso = 0; // Imposto la variabile vasi sfondo = 0; // Imposto la variabile dello sfondo nero clear = 0; title = getTitle (); for (y = 0; y < getHeight; y++) { for (x = 0; x < getWidth; x++) { v = getPixel(x,y); r = (v>>16)&0xff; // estraggo red byte (bits 23-17) g = (v>>8)&0xff; // estraggo green byte (bits 15-8) b = v&0xff; // estraggo blue byte (bits 7-0) if ((r == 255) & (g == 255) & (b == 255)) { clear++; // escludo il bianco } else { if ((r > redtarget)) { vaso++; } else { sfondo++; // ogni pixel non bianco non rosso è calcolato come sfondo } } } } totale = vaso + sfondo; indice = vaso / totale; Total_pixels = Array.concat(Total_pixels, totale); Not_NV = Array.concat(Not_NV, sfondo); NV = Array.concat(NV, vaso); CNV = Array.concat (CNV, indice); Threshold = Array.concat (Threshold, redtarget); } } Array.show("title", Img, Threshold, Total_pixels, Not_NV, NV, CNV); } if (scelta == "Lyve1-green") // VASI linfatici { waitForUser("Advice", "keep open only the images you want to analyze, then click ok"); setBackgroundColor (16777215); waitForUser("Selection required", "put a small rectangular ROI around the most fluorescent background area free from vessels"); // CORREGGO PER IL BACKGROUND Img = newArray(); Total_pixels = newArray(); Not_NV = newArray (); NV = newArray (); CNV = newArray (); Threshold = newArray (); for (i=1; i<=nImages; i++) { selectImage (i); run("ROI Manager..."); // Gestisco il ROI manager e correggo per il box conta = roiManager("count"); if (conta != 0) { roiManager("Delete"); // svuoto il ROI manager se è pieno } if (selectionType() != 0) { titolone = getTitle (); print ("The image"+titolone+"has not been analyzed becaused no ROI was selected"); } else { roiManager("Add"); roiManager("Select", 0); //seleziono la nuova roi getSelectionBounds(x, y, width, height); x2 = x; y2 = y; greentot = 0; greenpixel = 0; larghezza = x + width; lunghezza = y + height; larghezza2 = x2 + width; lunghezza2 = y2 + height; for (y = y; y <= lunghezza ; y++) { for (x = x; x <= larghezza; x++) { v = getPixel(x,y); g = (v>>8)&0xff; // estraggo green byte (bits 15-8) greentot = greentot + g; greenpixel++; } greenpixel++; } greenmean = greentot / greenpixel; totale2 = 0; differenziale =0; sommatoria = 0; if (greenmean <=2.5 ) { greentarget = 15; } if ((greenmean > 2.5) & (greenmean <= 10)) { greentarget = 25; } if ((greenmean > 10) & (greenmean <=25)) { greentarget = 35; } if ((greenmean > 25) & (greenmean <=35)) { greentarget = 45; } if ((greenmean > 35) & (greenmean <=50)) { greentarget = 54; } if ((greenmean > 50) & (greenmean <=65)) { greentarget = 75; } if ((greenmean > 65) & (greenmean <=80)) { greentarget = 90; } if ((greenmean > 80) & (greenmean <=95)) { greentarget = 105; } if ((greenmean > 95) & (greenmean <=110)) { greentarget = 120; } if ((greenmean > 110) & (greenmean <=125)) { greentarget = 140; } if ((greenmean > 125) & (greenmean <=140)) { greentarget = 150; } if ((greenmean > 140) & (greenmean <=155)) { greentarget = 165; } if (greenmean > 155) { greentarget = greenmean + 15; } vaso = 0; // Imposto la variabile vasi sfondo = 0; // Imposto la variabile dello sfondo nero clear = 0; title = getTitle (); for (y = 0; y < getHeight; y++) { for (x = 0; x < getWidth; x++) { v = getPixel(x,y); r = (v>>16)&0xff; // estraggo red byte (bits 23-17) g = (v>>8)&0xff; // estraggo green byte (bits 15-8) b = v&0xff; // estraggo blue byte (bits 7-0) if ((r == 255) & (g == 255) & (b == 255)) { clear++; // escludo il bianco } else { if ((g > greentarget)) { vaso++; // da decidere il verde } else { sfondo++; // ogni pixel non bianco non rosso è calcolato come sfondo } } } } totale = vaso + sfondo; indice = vaso / totale; Img = Array.concat (Img, title); Total_pixels = Array.concat(Total_pixels, totale); Not_NV = Array.concat(Not_NV, sfondo); NV = Array.concat(NV, vaso); CNV = Array.concat (CNV, indice); Threshold = Array.concat (Threshold, greentarget); } } Array.show("title", Img, Threshold, Total_pixels, Not_NV, NV, CNV); } if (scelta == "CD31-green") // VASI { waitForUser("Advice", "keep open only the images you want to analyze, then click ok"); setBackgroundColor (16777215); waitForUser("Selection required", "put a small rectangular ROI around the most fluorescent background area free from vessels"); // CORREGGO PER IL BACKGROUND Img = newArray(); Total_pixels = newArray(); Not_NV = newArray (); NV = newArray (); CNV = newArray (); Threshold = newArray (); for (i=1; i<=nImages; i++) { selectImage (i); run("ROI Manager..."); // Gestisco il ROI manager e correggo per il box conta = roiManager("count"); if (conta != 0) { roiManager("Delete"); // svuoto il ROI manager se è pieno } if (selectionType() != 0) { titolone = getTitle (); print ("The image"+titolone+"has not been analyzed becaused no ROI was selected"); } else { titolo = getTitle (); Img = Array.concat(Img, titolo); roiManager("Add"); roiManager("Select", 0); //seleziono la nuova roi getSelectionBounds(x, y, width, height); redtot = 0; redpixel = 0; larghezza = x + width; lunghezza = y + height; for (y = y; y <= lunghezza ; y++) { for (x = x; x <= larghezza; x++) { v = getPixel(x,y); r = (v>>8)&0xff; // estraggo green byte (bits 15-8) redtot = redtot + r; redpixel++; } } redmean = redtot / redpixel; if (redmean < 18) { redtarget = 20; } if ((redmean >=18) & (redmean <=30)) { redtarget = 35; } if ((redmean >30) & (redmean <=45)) { redtarget = 50; } if ((redmean >45) & (redmean <=60)) { redtarget = 75; } if ((redmean >60) & (redmean <=75)) { redtarget = 90; } if ((redmean >75) & (redmean <=90)) { redtarget = 105; } if ((redmean >90) & (redmean <=105)) { redtarget = 120; } if ((redmean >105) & (redmean <=120)) { redtarget = 135; } if ((redmean >120) & (redmean <=135)) { redtarget = 150; } if (redmean >135) { redtarget = redmean + 10; } vaso = 0; // Imposto la variabile vasi sfondo = 0; // Imposto la variabile dello sfondo nero clear = 0; title = getTitle (); for (y = 0; y < getHeight; y++) { for (x = 0; x < getWidth; x++) { v = getPixel(x,y); r = (v>>8)&0xff; // estraggo green byte (bits 15-8) g = (v>>16)&0xff; // estraggo red byte (bits 23-17) b = v&0xff; // estraggo blue byte (bits 7-0) if ((r == 255) & (g == 255) & (b == 255)) { clear++; // escludo il bianco } else { if ((r > redtarget)) { vaso++; } else { sfondo++; // ogni pixel non bianco non rosso è calcolato come sfondo } } } } totale = vaso + sfondo; indice = vaso / totale; Total_pixels = Array.concat(Total_pixels, totale); Not_NV = Array.concat(Not_NV, sfondo); NV = Array.concat(NV, vaso); CNV = Array.concat (CNV, indice); Threshold = Array.concat (Threshold, greentarget); } } Array.show("title", Img, Threshold, Total_pixels, Not_NV, NV, CNV); } if (scelta == "Lyve1-red") // VASI linfatici { waitForUser("Advice", "keep open only the images you want to analyze, then click ok"); setBackgroundColor (16777215); waitForUser("Selection required", "put a small rectangular ROI around the most fluorescent background area free from vessels"); // CORREGGO PER IL BACKGROUND Img = newArray(); Total_pixels = newArray(); Not_NV = newArray (); NV = newArray (); CNV = newArray (); Threshold = newArray (); for (i=1; i<=nImages; i++) { selectImage (i); run("ROI Manager..."); // Gestisco il ROI manager e correggo per il box conta = roiManager("count"); if (conta != 0) { roiManager("Delete"); // svuoto il ROI manager se è pieno } if (selectionType() != 0) { titolone = getTitle (); print ("The image"+titolone+"has not been analyzed becaused no ROI was selected"); } else { roiManager("Add"); roiManager("Select", 0); //seleziono la nuova roi getSelectionBounds(x, y, width, height); x2 = x; y2 = y; greentot = 0; greenpixel = 0; larghezza = x + width; lunghezza = y + height; larghezza2 = x2 + width; lunghezza2 = y2 + height; for (y = y; y <= lunghezza ; y++) { for (x = x; x <= larghezza; x++) { v = getPixel(x,y); g = (v>>16)&0xff; // estraggo red byte (bits 23-17) greentot = greentot + g; greenpixel++; } greenpixel++; } greenmean = greentot / greenpixel; totale2 = 0; differenziale =0; sommatoria = 0; if (greenmean <=2.5 ) { greentarget = 15; } if ((greenmean > 2.5) & (greenmean <= 10)) { greentarget = 25; } if ((greenmean > 10) & (greenmean <=25)) { greentarget = 35; } if ((greenmean > 25) & (greenmean <=35)) { greentarget = 45; } if ((greenmean > 35) & (greenmean <=50)) { greentarget = 54; } if ((greenmean > 50) & (greenmean <=65)) { greentarget = 75; } if ((greenmean > 65) & (greenmean <=80)) { greentarget = 90; } if ((greenmean > 80) & (greenmean <=95)) { greentarget = 105; } if ((greenmean > 95) & (greenmean <=110)) { greentarget = 120; } if ((greenmean > 110) & (greenmean <=125)) { greentarget = 140; } if ((greenmean > 125) & (greenmean <=140)) { greentarget = 150; } if ((greenmean > 140) & (greenmean <=155)) { greentarget = 165; } if (greenmean > 155) { greentarget = greenmean + 15; } vaso = 0; // Imposto la variabile vasi sfondo = 0; // Imposto la variabile dello sfondo nero clear = 0; title = getTitle (); for (y = 0; y < getHeight; y++) { for (x = 0; x < getWidth; x++) { v = getPixel(x,y); r = (v>>8)&0xff; // estraggo green byte (bits 15-8) g = (v>>16)&0xff; // estraggo red byte (bits 23-17) b = v&0xff; // estraggo blue byte (bits 7-0) if ((r == 255) & (g == 255) & (b == 255)) { clear++; // escludo il bianco } else { if ((g > greentarget)) { vaso++; // da decidere il verde } else { sfondo++; // ogni pixel non bianco non rosso è calcolato come sfondo } } } } totale = vaso + sfondo; indice = vaso / totale; Img = Array.concat (Img, title); Total_pixels = Array.concat(Total_pixels, totale); Not_NV = Array.concat(Not_NV, sfondo); NV = Array.concat(NV, vaso); CNV = Array.concat (CNV, indice); Threshold = Array.concat (Threshold, redtarget); } } Array.show("title", Img, Threshold, Total_pixels, Not_NV, NV, CNV); } width=512; height=512; // MESSAGGIO DI ESECUZIONE DEL COMPITO Dialog.create("Report"); Dialog.addMessage("Task is completed"); Dialog.show();