2010-12-02 104 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