Autor Beitrag
OlliverB
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Di 02.09.08 17:42 
Hallo zusammen,

ich bin sowohl neu im Forum, als auch noch Anfänger in C#.
Ich habe eine Reihe Schnittbilder (Bitmap) eines Gehirns, wobei jedes Hirnareal eine bestimmte RGB-Farbe zugewiesen bekommen hat. Bis jetzt ist es so, dass das ganze Gehirn eines jeden Schnittbildes als ein Objekt betrachtet wird.
Die Arbeit besteht darin, das bmp-Bild so zu verändern, so dass jedes Hirnareal als ein eigenständiges Objekt angesehen wird. Somit wäre es möglich mit einem anderen Programm (vtk) aus jedem Hirnareal ein Volumen-Modell zu erstellen.
Ich habe mir überlegt jedes Pixel des bmp-Bildes auf die Farbe zu prüfen und entsprechend der Farbe jedem Pixel einen Schwellenwert zu vergeben. So würden beispielsweise alle Pixel eines bestimmten Rottons den gleichen Schwellenwert bekommen. Durch den Schwellenwert wären die jeweiligen Areale ansprechbar.

Oder ist mein Gedankengang falsch und ich kann auf eine andere Weise den Pixeln eines gleichen Farbtons Integer-Werte geben, so dass ich die einzelnen Areale ansprechen und dann als Volumen generieren kann?

Mein bisheriger Code sieht wie folgt aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
Bitmap original1 = new Bitmap("C:\\images\\hirn_012.bmp");

ImageAttributes attribute1 = new ImageAttributes();
            
//Anzahl der Spalten
for (int i = 0; i < original1.Width; i++)
{
    //Anzahl der Zeilen
    for (int j = 0; j < original1.Height; j++)
    {
        //Farbe jedes einzelnen Pixels
        Color originalColor = original1.GetPixel(i, j);
        //Abfrage nach bestimmter Farbe
        //if(originalColor.R == 129 && originalColor.G == 129 && originalColor.B == 129)
        if (originalColor.R == 254 && originalColor.G == 28 && originalColor.B == 0)
        {
            attribute1.SetThreshold(1);
        }
    }
}
original1.Save("C:\\Bild\\thresh_12.bmp");


Verfolge ich meinen Gedankengang jedem Pixel einen Schwelenwert ensprechend seiner Farbe zu vergeben, so weiß ich nicht wie dies zu programmieren ist. Denn den Schwellenwert den ich in meinem Programm setze gilt nicht dem entsprechenden Pixel, sondern ich denke dem ganzen Bild.

Kann mir jemand Denkanstöße oder Code-Beispiele geben?

Es wäre nett, wenn mir jemand helfen würde.

Viele Grüße
Olli
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 03.09.08 12:42 
So ganz verstehe ich dein Problem noch nicht. Daher noch ein paar Rückfragen:
- Kennst du schon die RGB-Werte der einzelnen Areale oder mußt du diese erst aus dem Bild extrahieren?
- Haben verschiedene Areale auch verschiedene RGB-Werte?
- Sind die RGB-Werte je Areal für alle Schnittbilder gleich oder unterscheiden sich diese dann auch noch?

In welchem Format müssen die Daten denn vorliegen, damit sie mit dem externen Programm weiterverarbeitet werden können (auch wieder als Bitmap, oder als eine spzeielle Textdatei mit Koordinatenangaben etc.)?

P.S: Ich habe vor Jahren mal selber ein Betrachtungs- und Bearbeitungsprogramm für medizinische Bilder (DICOM-Viewer) geschrieben (aber mit dem Borland C++ Builder)...
Dort hatte ich u.a. eine Funktion drin, bei der man Serienbilder von der Seite betrachten konnte (Darstellung dann mittels Interpolation der Pixel). Aber selbständig Areale rausfinden war noch nicht enthalten...