сегментация растущего изображения - PullRequest
0 голосов
/ 02 декабря 2010

я делаю алгоритм роста региона для своего проекта это мой алгоритм

(моя картинка была в оттенках серого) 1. получить значение пикселя (0,0) для начального пикселя 2. сравнить начальный пиксель значения с одним соседним пикселем 3. если значение № 3 меньше порога (T), перейти к следующему пикселю и перейти к № 2 4. если значение на 3 больше порога (T), измените пиксель на белый (также для следующих 10 пикселей) и получите новый пиксель начального значения.

моя цель - моя картинка, сегментированная белой линией

это мой код

private void button4_Click (отправитель объекта, EventArgs e) { // GDI + все еще нам лжет - возвращаемый формат - BGR, а не RGB. BitmapData bmData = RImage.LockBits (новый прямоугольник (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 изображения что я должен делать для "роста региона" ?? ТНХ

1 Ответ

0 голосов
/ 02 декабря 2010

Я оставил несколько вопросов о вашем алгоритме в комментариях, но, когда я писал их, я понял, что то, что вы пытаетесь сделать, может не быть сегментацией изображения вообще.

моя цель - моя картинка, сегментированная белой линией

Вы хотите сказать, что хотите что-то вроде этого:

alt text

Если да,тогда вас интересует не сегментация изображения , а обнаружение границ .Если вы хотите реализовать что-то подобное, прочитайте также свёртка .

...