我做区域生长算法为我的项目 这是我的算法区域生长的图像分割
种子像素(之前我的照片已经灰度) 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
从我所看到的,你的算法是从根本上打破了。您的“种子”像素只是扫描线中的第一个像素。如何比较剩余的像素与第一个像素,并重复每一行去实现图像分割?另外,请重新格式化您的代码。第一对几行没有正确缩进,其余的缩进比所需要的更多。另外,seedG和seedB不会在任何地方使用,因此删除它们对于可读性来说是最好的选择。 – misha 2010-12-02 11:20:42