Histogramm-Werte auslesen mit ImageJ
Die @daehaex, die gerade an "organotypischen Co-Kulturen" forscht, fragte heute über Twitter, ob jemand das kann:
ein macro für imagej schreiben, das mir als batch aus einem ordner voller binärer tiffs von allen bildern mit bildnamen die anzahl der pixel mit der value 0 und value 255 auflistet? quasi wie die funktion "histogram" nur ohne die values 1-254.
Da ich von ihren Analysen zwar keine Ahnung habe, ihr aber trotzdem gern helfen wollte, habe ich mir flugs ImageJ aus den Ubuntu-Repositories installiert, die Dokumentation der Makro-Funktionen ergooglet und noch dieses hilfreiche PDF-Tutorial gefunden. Herausgekommen ist am Ende folgendes rudimentäre Skript, dessen Output als CSV in $Tabellenkalkulation importiert werden kann.
list = getFileList(dir);
setBatchMode(true);
for (i=0; i<list.length; i++) {
showProgress(i+1, list.length);
filename = dir + list[i];
open(filename);
getHistogram(0, counts, 256);
print('"' + getInfo("image.filename") + '",' + counts[0] + ',' + counts[255]);
close();
}
Geht bestimmt auch eleganter, aber es funktioniert, der Wissenschaftsbetrieb kann aufrecht erhalten werden, und ich bekomme demnächst ein Bier spendiert
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
Ulli (daheaex) am :
1a!!!
Ich hab da heut ewig dran rumgefricket und es wurd und wurd nix. Aija, ich bin ja auch Forscher und kein Frickler!!
Aber der Matthias, der kann das. Super! Ich werde damit morgen noch ein paar anderen Leuten im Lab, die mit binären Bildern arbeiten eine Freude machen.
Ich hab das ganze insoweit verändert, dass ich am Ende die Kommas zur Leerzeichen ersetzt hab, so macht ImageJ Spalten draus.
print('"' + getInfo("image.filename") + '" ' + counts[0] + ' ' + counts[255]);
Das erste ausgelesene Bild macht er allerdings als Spaltenüberschrift. Naja.... Forscher... Frickler... Ihr wisst schon.
Vielen Dank, Matthias!!
Matthias Gutjahr am :
Ulli, ich habe deinen Kommentar etwas editiert, damit er korrekt angezeigt wird, und das Skript auf die geänderte Zeile beschränkt.