Ich habe mir gerade eine schematische Darstellung über die zur Qualitätssicherung in der Mammografie eingeführten KBV Kriterien erstellt. Vielleicht ist diese ja auch für den ein oder anderen hilfreich. Danke an "Wissensverarbeitung" und Constraints.
Mittwoch, 25. August 2010
KBV Kriterien
Labels:
bundesvereinigung,
facharzt,
kassenärztliche,
kbv,
kv,
mammo,
mammografie,
mammographie,
mammography,
mg,
pgmi,
qm,
qualität,
qualitätssicherung,
radiologie,
radiology,
schema,
wissensverarbeitung
Sonntag, 8. August 2010
MRT Artefakte
Im Rahmen meiner Vorbereitungen auf den Facharzt habe ich eine kleine Keynote Präsentation zu dem Thema erstellt. Diese gibt es hier auch als Download.
Im Rahmen meiner Vorbereitungen auf den Facharzt habe ich eine kleine Keynote Präsentation zu dem Thema erstellt. Diese gibt es hier auch als Download.
MRT Artefakte
Labels:
diagnostische radiologie,
facharzt,
fortbildung,
howto,
keynote,
Medizin,
mri,
mrt,
präsentation,
radiologie,
tutorial,
vortrag
Montag, 5. Juli 2010
Exporting examination codes from Siemens Syngo RIS
View my short perl script to create a list of examinations codes from a Siemens Syngo RIS.
First create an export of the examination tree. Usually this file ends with .tre.
They you can apply this script to that file and you receive a list of all examination codes.
Use at your own risk!
Here you are:
First create an export of the examination tree. Usually this file ends with .tre.
They you can apply this script to that file and you receive a list of all examination codes.
Use at your own risk!
Here you are:
get_exam_code.pl
#!/usr/bin/perl
open IN, "<$ARGV[0]" || die;
while ($data=){
while ($data=~s/[\w \d\xe4\xf6\xfc].\x00([\w \d\xe4\xf6\xfc]{1,})// ){
print "$1\n";
$hits++
}
}
close IN;
print "Hits: $hits\n";
View my short perl script to create a list of examinations codes from a Siemens Syngo RIS.
First create an export of the examination tree. Usually this file ends with .tre.
They you can apply this script to that file and you receive a list of all examination codes.
Use at your own risk!
Here you are:
First create an export of the examination tree. Usually this file ends with .tre.
They you can apply this script to that file and you receive a list of all examination codes.
Use at your own risk!
Here you are:
get_exam_code.pl
#!/usr/bin/perl
open IN, "<$ARGV[0]" || die;
while ($data=){
while ($data=~s/[\w \d\xe4\xf6\xfc].\x00([\w \d\xe4\xf6\xfc]{1,})// ){
print "$1\n";
$hits++
}
}
close IN;
print "Hits: $hits\n";
Exporting examination codes from Siemens Syngo RIS
Exporting examination codes from Siemens Syngo RIS
Exporting examination codes from Siemens Syngo RIS
Samstag, 5. Juni 2010
Weinkrügeproblem
Hier meine Java Lösung für das Weinkrügeproblem aus dem Buch Wissensverarbeitung - Eine Einführung in die Künstliche Intelligenz für Informatiker und Ingenieure - I. Boersch, J. Heinsohn, R. Socher - 2. Auflage.
Die Frage ist, wie man den Wein aus 3 Weinkrügen
so verteilt, dass sich im 9 Liter Krug 6 Liter und im 4 Liter Krug 3 Liter Wein befinden?
Ist mein erster Java Versuch und ich bin möchtig stolz darauf. Bin für konstruktive Kritik offen!
Die Frage ist, wie man den Wein aus 3 Weinkrügen
- 9 Liter (voll)
- 7 Liter (leer)
- 4 Liter (leer)
so verteilt, dass sich im 9 Liter Krug 6 Liter und im 4 Liter Krug 3 Liter Wein befinden?
Ist mein erster Java Versuch und ich bin möchtig stolz darauf. Bin für konstruktive Kritik offen!
WeinkruegeproblemV2.java:
import java.util.*;
public class WeinkruegeproblemV2 {
public static int [] init(){
int [] startstatus = {9,0,0,};
// int [] startstatus = {6,0,3,};
return startstatus;
}
public static boolean zielerreicht(Knoten k){
int [] zielstatus = {6,0,3,};
return Arrays.equals(k.getStatus(), zielstatus);
}
public static int [] umschuetten (int i, int j, Knoten k){
int umfuellmenge = 0;
int [] status = k.getStatus().clone();
int [] maxinhalt = {9,7,4,};
umfuellmenge = Math.min(k.getStatus()[i],maxinhalt[j]-k.getStatus()[j]);
status[i]=k.getStatus()[i] - umfuellmenge;
status[j]=k.getStatus()[j] + umfuellmenge;
return status;
}
public static boolean doublette(Knoten k){
int i;
// System.out.println("Checke Pfad mit "+k.getPfad().size()+ " Knoten auf Doublette.");
for (i=0;iif (Arrays.equals(k.getStatus(),k.getPfad().get(i).getStatus())){
// System.out.println("Doublette: "+i+Arrays.toString(k.getStatus())+" "+Arrays.toString(k.getPfad().get(i).getStatus()));
return true;
}
// System.out.println("Keine Doublette: "+i+Arrays.toString(k.getStatus())+" "+Arrays.toString(k.getPfad().get(i).getStatus()));
}
return false;
}
public static ArrayListexpand(Knoten k){
ArrayListkinder = new ArrayList ();
int i,j;
Knoten kind = new Knoten();
for (i=0;i<=2;i++){
for (j=0;j<=2;j++){
if (j!=i){
kind.setStatus(umschuetten(i,j,k));
kind.setPfad((ArrayList)k.getPfad());
// zeigeKnotenliste(k.getPfad());
// System.out.println(Arrays.toString(kind.getStatus()));
if (!Arrays.equals(kind.getStatus(),k.getStatus())){
if (!doublette(kind)){
// System.out.println("Neues Kind: "+Arrays.toString(kind.getStatus()));
// kind.addPfad(kind);
kinder.add(new Knoten( kind.getStatus(), kind.getPfad() ));
}
}
}
}
}
System.out.println("Kinder:");
zeigeKnotenliste(kinder);
return kinder;
}
public static void zeigeKnotenliste(ArrayListliste){
int i;
for (i=0;iSystem.out.println(i+" "+Arrays.toString(liste.get(i).getStatus()));
// System.out.println("Path:");
// zeigeKnotenliste(liste.get(i).getPfad());
// System.out.println();
}
System.out.println("==> "+ liste.size() + " Elemente");
}
public static void main(String[] args){
int dummy;
ArrayListagenda = new ArrayList ();
Knoten z = new Knoten();
// zeigeKnotenliste(z.getPfad());
z.setStatus(init());
// zeigeKnotenliste(z.getPfad());
agenda.add(z);
while(!zielerreicht(z)){
// for (dummy=0;dummy<2;dummy++){
z.addPfad(z);
System.out.println("\nExpandiere "+Arrays.toString(z.getStatus()));
// System.out.println("Pfad :");
// zeigeKnotenliste(z.getPfad());
agenda.addAll(expand(z)); // Breitensuche
// System.out.println("Agenda nach Zufügung der Kinder:");
// zeigeKnotenliste(agenda);
agenda.remove(0);
System.out.println("Agenda:");
zeigeKnotenliste(agenda);
z = agenda.get(0);
}
// DEBUGGING
// System.out.println(Arrays.toString( z.getStatus() ));
// z.setStatus(init());
// System.out.println(Arrays.toString( z.getStatus() ));
// Knoten z1 = new Knoten();
// z1.setStatus(umschuetten(0,1,z));
// z1.addPfad(z);
// System.out.println(Arrays.toString( z.getStatus() ));
// System.out.println(Arrays.toString( z1.getStatus() ));
// System.out.println(zielerreicht(z));
System.out.println("\nLösung gefunden");
zeigeKnotenliste(z.getPfad());
}
}
Knoten.java:
import java.util.*;
public class Knoten {
private int[] status = {-1,-1,-1, };
private ArrayListpfad = new ArrayList ();
Knoten(){ // Ueberladen
}
Knoten(int [] ueb_status){ // Ueberladen
status = ueb_status.clone();
}
Knoten(int [] ueb_status, ArrayListueb_pfad){ // Ueberladen
status = ueb_status.clone();
pfad = (ArrayList)ueb_pfad.clone();
}
public void setStatus(int[] status){
this.status = status.clone();
}
public void setPfad(ArrayListueb_pfad){
pfad=(ArrayList)ueb_pfad.clone();
}
public void addPfad(Knoten ueb_pfad){
pfad.add(ueb_pfad);
}
public int[] getStatus(){
return this.status;
}
public ArrayListgetPfad(){
return this.pfad;
}
}
Hier meine Java Lösung für das Weinkrügeproblem aus dem Buch Wissensverarbeitung - Eine Einführung in die Künstliche Intelligenz für Informatiker und Ingenieure - I. Boersch, J. Heinsohn, R. Socher - 2. Auflage.
Die Frage ist, wie man den Wein aus 3 Weinkrügen
so verteilt, dass sich im 9 Liter Krug 6 Liter und im 4 Liter Krug 3 Liter Wein befinden?
Ist mein erster Java Versuch und ich bin möchtig stolz darauf. Bin für konstruktive Kritik offen!
Die Frage ist, wie man den Wein aus 3 Weinkrügen
- 9 Liter (voll)
- 7 Liter (leer)
- 4 Liter (leer)
so verteilt, dass sich im 9 Liter Krug 6 Liter und im 4 Liter Krug 3 Liter Wein befinden?
Ist mein erster Java Versuch und ich bin möchtig stolz darauf. Bin für konstruktive Kritik offen!
WeinkruegeproblemV2.java:
import java.util.*;
public class WeinkruegeproblemV2 {
public static int [] init(){
int [] startstatus = {9,0,0,};
// int [] startstatus = {6,0,3,};
return startstatus;
}
public static boolean zielerreicht(Knoten k){
int [] zielstatus = {6,0,3,};
return Arrays.equals(k.getStatus(), zielstatus);
}
public static int [] umschuetten (int i, int j, Knoten k){
int umfuellmenge = 0;
int [] status = k.getStatus().clone();
int [] maxinhalt = {9,7,4,};
umfuellmenge = Math.min(k.getStatus()[i],maxinhalt[j]-k.getStatus()[j]);
status[i]=k.getStatus()[i] - umfuellmenge;
status[j]=k.getStatus()[j] + umfuellmenge;
return status;
}
public static boolean doublette(Knoten k){
int i;
// System.out.println("Checke Pfad mit "+k.getPfad().size()+ " Knoten auf Doublette.");
for (i=0;iif (Arrays.equals(k.getStatus(),k.getPfad().get(i).getStatus())){
// System.out.println("Doublette: "+i+Arrays.toString(k.getStatus())+" "+Arrays.toString(k.getPfad().get(i).getStatus()));
return true;
}
// System.out.println("Keine Doublette: "+i+Arrays.toString(k.getStatus())+" "+Arrays.toString(k.getPfad().get(i).getStatus()));
}
return false;
}
public static ArrayListexpand(Knoten k){
ArrayListkinder = new ArrayList ();
int i,j;
Knoten kind = new Knoten();
for (i=0;i<=2;i++){
for (j=0;j<=2;j++){
if (j!=i){
kind.setStatus(umschuetten(i,j,k));
kind.setPfad((ArrayList)k.getPfad());
// zeigeKnotenliste(k.getPfad());
// System.out.println(Arrays.toString(kind.getStatus()));
if (!Arrays.equals(kind.getStatus(),k.getStatus())){
if (!doublette(kind)){
// System.out.println("Neues Kind: "+Arrays.toString(kind.getStatus()));
// kind.addPfad(kind);
kinder.add(new Knoten( kind.getStatus(), kind.getPfad() ));
}
}
}
}
}
System.out.println("Kinder:");
zeigeKnotenliste(kinder);
return kinder;
}
public static void zeigeKnotenliste(ArrayListliste){
int i;
for (i=0;iSystem.out.println(i+" "+Arrays.toString(liste.get(i).getStatus()));
// System.out.println("Path:");
// zeigeKnotenliste(liste.get(i).getPfad());
// System.out.println();
}
System.out.println("==> "+ liste.size() + " Elemente");
}
public static void main(String[] args){
int dummy;
ArrayListagenda = new ArrayList ();
Knoten z = new Knoten();
// zeigeKnotenliste(z.getPfad());
z.setStatus(init());
// zeigeKnotenliste(z.getPfad());
agenda.add(z);
while(!zielerreicht(z)){
// for (dummy=0;dummy<2;dummy++){
z.addPfad(z);
System.out.println("\nExpandiere "+Arrays.toString(z.getStatus()));
// System.out.println("Pfad :");
// zeigeKnotenliste(z.getPfad());
agenda.addAll(expand(z)); // Breitensuche
// System.out.println("Agenda nach Zufügung der Kinder:");
// zeigeKnotenliste(agenda);
agenda.remove(0);
System.out.println("Agenda:");
zeigeKnotenliste(agenda);
z = agenda.get(0);
}
// DEBUGGING
// System.out.println(Arrays.toString( z.getStatus() ));
// z.setStatus(init());
// System.out.println(Arrays.toString( z.getStatus() ));
// Knoten z1 = new Knoten();
// z1.setStatus(umschuetten(0,1,z));
// z1.addPfad(z);
// System.out.println(Arrays.toString( z.getStatus() ));
// System.out.println(Arrays.toString( z1.getStatus() ));
// System.out.println(zielerreicht(z));
System.out.println("\nLösung gefunden");
zeigeKnotenliste(z.getPfad());
}
}
Knoten.java:
import java.util.*;
public class Knoten {
private int[] status = {-1,-1,-1, };
private ArrayListpfad = new ArrayList ();
Knoten(){ // Ueberladen
}
Knoten(int [] ueb_status){ // Ueberladen
status = ueb_status.clone();
}
Knoten(int [] ueb_status, ArrayListueb_pfad){ // Ueberladen
status = ueb_status.clone();
pfad = (ArrayList)ueb_pfad.clone();
}
public void setStatus(int[] status){
this.status = status.clone();
}
public void setPfad(ArrayListueb_pfad){
pfad=(ArrayList)ueb_pfad.clone();
}
public void addPfad(Knoten ueb_pfad){
pfad.add(ueb_pfad);
}
public int[] getStatus(){
return this.status;
}
public ArrayListgetPfad(){
return this.pfad;
}
}
Weinkrügeproblem
Labels:
boersch,
elsevier,
heinsohn,
java,
lösung,
socher,
spektrum,
weinkrügeproblem,
wissensverwaltung
Sonntag, 16. Mai 2010
Adrenal Gland Calculator ported to Mac
Today I ported my Adrenal Gland Calculator from JavaScript to Mac (Objective-C).
Download. Source code available via github.
Download. Source code available via github.
Today I ported my Adrenal Gland Calculator from JavaScript to Mac (Objective-C).
Download. Source code available via github.
Download. Source code available via github.
Adrenal Gland Calculator ported to Mac
Sonntag, 9. Mai 2010
Adrenal Gland Calculator
Today I release my first JavaScript Project: An Adrenal Gland Calculator. It calculates some CT and MRI related indicators that may help in differentiating benign from malignant adrenal masses
Update (08.04.2013): link fixed
Today I release my first JavaScript Project: An Adrenal Gland Calculator. It calculates some CT and MRI related indicators that may help in differentiating benign from malignant adrenal masses
Update (08.04.2013): link fixed
Adrenal Gland Calculator
Today I release my first JavaScript Project: An Adrenal Gland Calculator. It calculates some CT and MRI related indicators that may help in differentiating benign from malignant adrenal masses.
Today I release my first JavaScript Project: An Adrenal Gland Calculator. It calculates some CT and MRI related indicators that may help in differentiating benign from malignant adrenal masses.
Montag, 15. März 2010
Support
Von mir unterstütze Projekte
- Dante (LaTeX)
- Wikimedia
- Mein Hauptprojekt das Wikibook Radiologie
- Meine Wikipedia Benutzerseite mit den von mir eingebrachten Bildern.
Von mir unterstütze Projekte
- Dante (LaTeX)
- Wikimedia
- Mein Hauptprojekt das Wikibook Radiologie
- Meine Wikipedia Benutzerseite mit den von mir eingebrachten Bildern.
Support
Donnerstag, 18. Februar 2010
Arduino XbeeShield
If you consider problems sending carriage returns with Arduino environment to your XbeeShield:
Try Tiny serial instead.
Try Tiny serial instead.
If you consider problems sending carriage returns with Arduino environment to your XbeeShield:
Try Tiny serial instead.
Try Tiny serial instead.
Arduino XbeeShield
Dienstag, 16. Februar 2010
Powerpoint Videos
Das leidige Thema Videos in Powerpoint hat mich mal wieder beschäftigt.
Hier eine Anleitung, die bei mir zuletzt funktioniert hat. Bildquelle war ein Arthroskopieturm in der Orthopädie. Ich hab auf einem Mac mit macosx 10.6 (snowleopard) gearbeitet.
Anleitung:
Hier eine Anleitung, die bei mir zuletzt funktioniert hat. Bildquelle war ein Arthroskopieturm in der Orthopädie. Ich hab auf einem Mac mit macosx 10.6 (snowleopard) gearbeitet.
Anleitung:
- VLC öffnen
- Ablage => Export Assistent
- Transcodieren auswählen
- Nächstes
- Wählen Sie einen Stream (Datei auswählen)
- Nächstes
- Video transcodieren Haken setzen
- MPEG-4 Video
- Bitrate 1024
- Audio transcodieren Haken nicht setzen
- MPEG 4 / MP4 auswählen
- Nächstes
- Wählen klicken und Dateinamen für den Export wählen. Sollte mit ".mp4" enden
- Nächstes
- Fertig
- Kurz warten bis die Datei Transcodiert ist
- Datei mit Control-Klick (rechte Maustaste) Öffnen mit Quicktime Player auswählen
- In Quicktime Player Datei
- in Quicktime: Ablage => Sichern unter
- Format : iPhone auswählen
- Sichern
- Datei wird dadurch umbenannt in ".m4v" !
- Diese Datei lässt sich dann in Powerpoint öffnen
Das leidige Thema Videos in Powerpoint hat mich mal wieder beschäftigt.
Hier eine Anleitung, die bei mir zuletzt funktioniert hat. Bildquelle war ein Arthroskopieturm in der Orthopädie. Ich hab auf einem Mac mit macosx 10.6 (snowleopard) gearbeitet.
Anleitung:
Hier eine Anleitung, die bei mir zuletzt funktioniert hat. Bildquelle war ein Arthroskopieturm in der Orthopädie. Ich hab auf einem Mac mit macosx 10.6 (snowleopard) gearbeitet.
Anleitung:
- VLC öffnen
- Ablage => Export Assistent
- Transcodieren auswählen
- Nächstes
- Wählen Sie einen Stream (Datei auswählen)
- Nächstes
- Video transcodieren Haken setzen
- MPEG-4 Video
- Bitrate 1024
- Audio transcodieren Haken nicht setzen
- MPEG 4 / MP4 auswählen
- Nächstes
- Wählen klicken und Dateinamen für den Export wählen. Sollte mit ".mp4" enden
- Nächstes
- Fertig
- Kurz warten bis die Datei Transcodiert ist
- Datei mit Control-Klick (rechte Maustaste) Öffnen mit Quicktime Player auswählen
- In Quicktime Player Datei
- in Quicktime: Ablage => Sichern unter
- Format : iPhone auswählen
- Sichern
- Datei wird dadurch umbenannt in ".m4v" !
- Diese Datei lässt sich dann in Powerpoint öffnen
Powerpoint Videos
Freitag, 15. Januar 2010
Recht zum Widerstand
Anlässlich der Debatte über Nacktscanner kommt mir der Artikel 20 GG in den Sinn:
Zieht euch warm an .... (das war jetzt mehr auf die Nacktscanner bezogen)
(4) Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist.
Zieht euch warm an .... (das war jetzt mehr auf die Nacktscanner bezogen)
Anlässlich der Debatte über Nacktscanner kommt mir der Artikel 20 GG in den Sinn:
Zieht euch warm an .... (das war jetzt mehr auf die Nacktscanner bezogen)
(4) Gegen jeden, der es unternimmt, diese Ordnung zu beseitigen, haben alle Deutschen das Recht zum Widerstand, wenn andere Abhilfe nicht möglich ist.
Zieht euch warm an .... (das war jetzt mehr auf die Nacktscanner bezogen)
Recht zum Widerstand
Abonnieren
Posts (Atom)