我为我的项目制作区域增长算法 这是我的算法
(我的照片之前已经是灰度) 1.获得种子像素的值像素(0,0) 2.将值种子像素与一个相邻像素进行比较 3.如果no.3的值小于treshold(T),则转到下一个像素并转到no.2 4.如果no.3的值大于阈值(T),则将像素更改为白色(也用于下一个10像素),并获取新的种子值像素。
我的目标是用白线分割我的照片
这是我的代码
private void button4_Click(object sender,EventArgs e) { // GDI +仍然在于我们 - 返回格式是BGR,而不是RGB。 BitmapData bmData = RImage.LockBits(new 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 :(得分:0)
我在评论中留下了一些关于你的算法的问题,但是当我写这些问题时,我意识到你要做的事情可能根本就不是图像分割。
我的目标是用白线分割我的照片
你的意思是你想要这样的东西:
如果是,那么您感兴趣的不是图像分割,它是edge detection。如果你想实现类似的东西,那么也要阅读convolution。