2010-12-02 16 views
0

i Region Growing Algorithmus für mein Projekt machen dies ist mein AlgorithmusRegion Growing Bildsegmentierung

(mein Bild Graustufen- gewesen, bevor es) 1. get Wert Pixel (0,0) für Keimpixel 2. Vergleiche das Startwertpixel mit einem Nachbarpixel 3. Wenn der Wert von Nr.3 kleiner als der Grenzwert (T) ist, gehe zum nächsten Pixel und gehe zu Nr.2 4. wenn der Wert von Nr.3 mehr als die Schwelle (T) ist, ändere Pixel in Weiß (auch für die nächsten 10 Pixel) und erhalte einen neuen Startwertpixel.

mein Ziel mein Bild mit weißen Linie segmentiert

dies mein Code

private void button4_Click (object sender, EventArgs e) { // GDI + liegt nach wie vor uns - die Rückkehr Format BGR, nicht RGB. BitmapData bmData = RImage.LockBits (neues Rechteck (0, 0, RImage.Width, RImage.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

 int stride = bmData.Stride; 
     System.IntPtr Scan0 = bmData.Scan0; 

     unsafe 
     { 
      byte* p = (byte*)(void*)Scan0; 

      int nOffset = stride - RImage.Width * 3; 

      for (int y = 0; y < RImage.Height; ++y) 
      {     
       for (int x = 0; x < RImage.Width; ++x) 
       { 
        //every new line of x must new seed 
        if (x == 0) 
        {        
         //getting new value seed pixel 
         seedR = p[x]; 
         seedG = p[x+1]; 
         seedB = p[x+2]; 
        } 

        //compare value of seed pixel and pixel scan 
        if ((seedR - p[x] >= tred) || (p[x] - seedR >= tred)) 
        { 

         //make white line with change value of pixel 
         for (int i=1; i <= 5; ++i) 
         { 
          p[x] = p[x + 1] = p[x + 2] = 0; 
          x++; 
         } 

         //getting new value of seed pixel 
         seedR = p[x]; 
         seedG = p[x + 1]; 
         seedB = p[x + 2]; 
        } 
        p += 3; 
       } 
       p += nOffset; 
      } 
     } 

     RImage.UnlockBits(bmData); 
    } 

mein Problem ist mein Bild in 1/3 des Bildes weiß geworden was muss ich für "Region Growing" zu tun ?? thx

+0

Von was ich sehen kann, ist Ihr Algorithmus grundlegend gebrochen. Ihre "Seed" -Pixel sind nur die ersten Pixel in den Scanlinien. Wie vergleicht man die restlichen Pixel mit der ersten und wiederholt das für jede Zeile, um eine Bildsegmentierung zu erreichen? Bitte formatieren Sie Ihren Code neu. Die ersten paar Zeilen sind nicht korrekt eingerückt und der Rest ist um mehr als nötig eingerückt. Außerdem werden seedG und seedB nicht verwendet, daher ist ihre Entfernung für die Lesbarkeit am besten. – misha

Antwort

0

Ich habe einige Fragen zu Ihren Algorithmus in den Kommentaren hinterlassen, aber als ich sie schrieb, wurde mir klar, dass das, was Sie versuchen, nicht Bild überhaupt Segmentierung tun kann.

mein Ziel mein Bild mit weißer Linie

segmentiert

Sie mögen, so etwas bedeuten Sie:

alt text

Wenn ja, dann, was Sie in isn interessiert sind 't Bildsegmentierung, es ist edge detection. Wenn Sie so etwas implementieren wollen, dann lesen Sie auch über convolution.