2010-12-02 48 views
0

我做區域生長算法爲我的項目 這是我的算法區域生長的圖像分割

種子像素

(之前我的照片已經灰度) 1.使用值像素(0,0)。比較值種子像素與一個相鄰像素 3.如果3號小於treshold(T)的值,進入下一個像素,然後轉到二號 4.如果3號超過treshold(T)的值,將像素更改爲白色(也適用於下一個10像素),並獲取新的種子值像素。

我的目標是我的照片分割與白線

這是我的代碼

私人無效button4_Click(對象發件人,EventArgs的) { // GDI +還是在於我們 - 返回格式BGR,而不是RGB。 的BitmapData bmData = RImage.LockBits(新的Rectangle(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); 
    } 

我的問題是,在圖像 1/3什麼是必須做我的「區域生長」我的形象,變成白色的? THX

+0

從我所看到的,你的算法是從根本上打破了。您的「種子」像素只是掃描線中的第一個像素。如何比較剩餘的像素與第一個像素,並重復每一行去實現圖像分割?另外,請重新格式化您的代碼。第一對幾行沒有正確縮進,其餘的縮進比所需要的更多。另外,seedG和seedB不會在任何地方使用,因此刪除它們對於可讀性來說是最好的選擇。 – misha 2010-12-02 11:20:42

回答

0

我已經離開大約在評論你的算法的一些問題,但我在寫他們,我意識到你正在試圖做的可能不是圖像分割可言。

我的目標是我的照片分段與白線

你的意思是你想是這樣的:

alt text

如果是,那麼你感興趣的ISN 't 圖像分割,它是edge detection。如果你想實現這樣的事情,那麼你也可以閱讀convolution