Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Pilolin
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 27
1

Сегментация наращиванием областей

08.06.2016, 07:43. Просмотров 1259. Ответов 1
Метки нет (Все метки)

Привет всем. Помогите разобраться с алгоритмом сегментации изображений наращивания областей. Допустим известна начальная точка (центр сегмента), проверяем его на восьмисоседство. Проверили всех соседей на схожий цвет, удовлетворил условию - добавили в сегмент, нет - не добавили. Так вопрос вот в чем, каким образом запоминать ячейки которые прошел, какие нет чтоб вернуться к ним и проверить их? И каким образом скакать от одной ячейки к другой? можно кодом, можно словами алгоритмически описать. хоть что нибудь)

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2016, 07:43
Ответы с готовыми решениями:

Сегментация изображений
Ребята, очень нужны Ваши советы. Заставили делать проект по теме сегментация изображений. Времени...

Сегментация изображения
Народ помогите! Есть изображение. Нужно распознать объект на этом изображении и заставить его...

Сегментация изображений
Доброго времени суток , подскажите пожалуйста алгоритм метода с использованием гистограммы....

Сегментация изображений
Нужно сегментировать изображения для определение границ обьекта на нем. Может кто писал чет...

Сегментация изображений (граф)
Привет. Задали задание сложное в универе, буду благодарен за подсказки или код. Нужно сделать...

1
Storm23
Эксперт .NETАвтор FAQ
9103 / 4423 / 1605
Регистрация: 11.01.2015
Сообщений: 5,653
Записей в блоге: 34
08.06.2016, 09:21 2
Лучший ответ Сообщение было отмечено Pilolin как решение

Решение

Цитата Сообщение от Pilolin Посмотреть сообщение
каким образом запоминать ячейки которые прошел
Заносите их в HashSet<Point>.
Цитата Сообщение от Pilolin Посмотреть сообщение
какие нет чтоб вернуться к ним и проверить их
Кандидатов на проверку заносите в стек Stack<Point>.
Цитата Сообщение от Pilolin Посмотреть сообщение
алгоритмом сегментации изображений наращивания областей
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Net;
using System.Windows.Forms;
 
namespace WindowsFormsApplication347
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //загружаем изображение
            var img = Image.FromStream(new WebClient() { Proxy = null }.OpenRead("http://i.bigmir.net/img/dnevnik/uploads/cmu_1153/29306/2.jpg"));
            //делаем сегментацию
            var segment = FillSegment(img, new Point(200, 250), true);
            //отображаем
            var pb1 = new PictureBox {Parent = this, Image = img, Width = 300, Height = 300, SizeMode = PictureBoxSizeMode.Zoom};
            var pb2 = new PictureBox { Parent = this, Image = segment, Width = 300, Height = 300, SizeMode = PictureBoxSizeMode.Zoom , Left = pb1.Width + 10};
        }
 
        //порог
        private int threshold = 80;
 
        //сегментация
        private Image FillSegment(Image img, Point startPoint, bool copySource)
        {
            //создаем копию изображения
            var res = new Bitmap(img.Width, img.Height);
            using (var gr = Graphics.FromImage(res))
                gr.DrawImage(img, Point.Empty);
            //создаем враппер для доступа к пикселам
            using (var wr = new ImageWrapper(res, copySource))
            {
                //стек для точек, которые нужно исследовать
                var stack = new Stack<Point>();
                //хеш таблица точек, которые уже были исследованы
                var was = new HashSet<Point>();
                //заносим стартовую точку
                stack.Push(startPoint);
                //пока есть кандидаты....
                while(stack.Count > 0)
                {
                    //берем точку из стека, закрашиваем ее, добавляем в хеш пройденных точек
                    var p = stack.Pop();
                    wr[p] = Color.Lime;
                    was.Add(p);
                    //перебираем 8-связную окрестность
                    for(int i=-1;i<=1;i++)
                    for(int j=-1;j<=1;j++)
                    {
                        var pp = new Point(p.X + i, p.Y + j);
                        if (!was.Contains(pp))//если еще не были в этой точке
                        if (pp.X >= 0 && pp.Y >= 0 && pp.X < wr.Width && pp.Y < wr.Height)//если точка не выходит за пределы изображения
                        if (IsClose(wr[p], wr[pp]))//если цвет близок к текущей точке
                            stack.Push(pp);//добавляем точку в стек
                    }
                }
            }
            //возвращаем результат
            return res;
        }
 
        //точки близки?
        private bool IsClose(Color c1, Color c2)
        {
            //вычисляем декартово расстояние в пространстве RGB
            var dR = c1.R - c2.R;
            var dG = c1.G - c2.G;
            var dB = c1.B - c2.B;
            var d = dR * dR + dG * dG + dB * dB;
            return d <= threshold;
        }
    }
}
Класс ImageWrapper здесь.

Сегментация наращиванием областей
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2016, 09:21

Сегментация слипшихся элементов
Здравствуйте, помогите с задачей: Мне главное понять теорию как это сделать, напишите кто чем...

Рисование сплошных областей
Здравствуйте! Пытаюсь нарисовать прямоугольник линиями.. Написал функцию, но она не рисует -...

Выделение областей на изображении
Добрый день форумчане. Нужно на изображении выделить сам объект и отдельно необходимый мне фон. У...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru