Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выделить сегмент изображения, Требуется выделить сегмент изображения 
:(
    Опции темы
stalweb
Дата 23.9.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.9.2010

Репутация: нет
Всего: нет



Добрый день, есть монохронное изображение, нужно разбить его на сегменты, как лучше и быстрее это сделать, подскажите пожалуйста!

Это сообщение отредактировал(а) stalweb - 23.9.2010, 14:09
PM MAIL   Вверх
Alexeis
Дата 23.9.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(stalweb @  23.9.2010,  13:09 Найти цитируемый пост)
нужно разбить его на сегменты,

  Выделить связанные между собой пикселы в области? 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
stalweb
Дата 23.9.2010, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.9.2010

Репутация: нет
Всего: нет



Да они связанные между собой, мне нужно их разбить на сегменты...

Добавлено через 10 минут и 4 секунды
user posted image

Вот рисунок к примеру, как разбить его на отдельные фигуры...
PM MAIL   Вверх
x128
Дата 24.9.2010, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 29.9.2009

Репутация: 5
Всего: 7



Цитата(stalweb @  23.9.2010,  20:18 Найти цитируемый пост)
Вот рисунок к примеру, как разбить его на отдельные фигуры...

тебе нужно получить координаты прямоугольной области или получить векторные границы объектов?
PM MAIL WWW   Вверх
stalweb
Дата 24.9.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.9.2010

Репутация: нет
Всего: нет



Есть растровое изоброжение (монохронное (только черный и белый цвет)), на изображение черным изображено несколько фигур, мне нужно выделить каждую фигуру программно и сними уже работать...
Проходим программой, получаем:
* фигура 1;
* фигура 2;
* ....;
* фигура n.

Фигуры можно перенести и на отдельные canvas, чтобы сними потом было легче работать... Просто в графике Я еще новичек, развиваюсь, может кто если не кодом, а может подсказать литературу, с радостью почитаю, потому что пока все что нашел, не подходит для моего случая... Я никак не пойму как можно например хотя бы отыскать все пиксели одной фигуры, если пиксель у нас равен по цвету RGB(0,0,0). Как Я понимаю по логике нужно найти пиксель 1 фигуры, потом найти от него все пиксели которые с ней соединены, например перенести его на новый слой, это и будет 1 фигура, потом искать дальше по оставшимся и так найти все фигуры... Но скорее всего это будет очень долго как мне кажется...
PM MAIL   Вверх
x128
Дата 24.9.2010, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 29.9.2009

Репутация: 5
Всего: 7



Цитата(stalweb @  24.9.2010,  19:08 Найти цитируемый пост)
Но скорее всего это будет очень долго как мне кажется...

Если грамотно реализовать все будет быстро. Я как-то писал похожий пример, если интересно, скину исходник. Если интересно самому, алгоритм довольно прост. Просматриваешь пикселы изображения, как находишь черный запоминаешь координаты в массив и начинаешь просмотр пикселов из ближайшего окружения в цикле или рекурсивно, добавляя координаты в массив, если пикселов в окружении не осталось, значит считаем, что фрагмент найден, далее выбираешь из массива минимальный/максимальный Х и Y и вычисляешь координаты найденного объекта. Таким образом просматриваешь все изображение.
PM MAIL WWW   Вверх
stalweb
Дата 24.9.2010, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.9.2010

Репутация: нет
Всего: нет



Да было бы интересно посмотреть на исходник, так будет проще понять работу алгоритма и уже от этого отталкиваться...
PM MAIL   Вверх
x128
Дата 24.9.2010, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 29.9.2009

Репутация: 5
Всего: 7



Прикрепил. Комментариев в коде нет, если что-то будет не ясно, спрашивай.

Присоединённый файл ( Кол-во скачиваний: 28 )
Присоединённый файл  FindRegion.rar 1,69 Kb
PM MAIL WWW   Вверх
stalweb
Дата 25.9.2010, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.9.2010

Репутация: нет
Всего: нет



Нашел код Зонга-Суня на Pas:
Код

Procedure SkeletizeZS2;
var    i,j,n,m,k, cont, br,ar,p1,p2: integer;
    a:array [0..8] of integer;
begin
pixeldeleted:=false;
{    Sub-iteration 1: }
        for i:=0 to ImgBArrWidth do
          for j:=0 to ImgBArrHeight do
      begin
           { Scan the entire image }
            if (ImgBArr[i,j] = r_false) then
      begin
                ImgBArr2[i,j] := r_false;
                continue;
            end;
            ar := t1a ( i, j, a, br);    { Function A }
            p1 := a[0]*a[2]*a[4];
            p2 := a[2]*a[4]*a[6];
            if ( (ar = 1) and ((br>=2) and (br<=6)) and
                (p1 = 0) and (p2 = 0) ) then
        begin
                    ImgBArr2[i,j] := r_true;
            end
            else ImgBArr2[i,j] := r_false;
        end;
        subtr;

{ Sub iteration 2: }
        for i:=0 to ImgBArrWidth do
          for j:=0 to ImgBArrHeight do
      begin        { Scan the entire image }
            if (ImgBArr[i,j] = r_false) then
      begin
                ImgBArr2[i,j] := r_false;
                continue;
            end;
            ar := t1a ( i, j, a, br);    { Function A }
            p1 := a[0]*a[2]*a[6];
            p2 := a[0]*a[4]*a[6];
            if ( (ar = 1) and ((br>=2) and (br<=6)) and
                (p1 = 0) and (p2 = 0) ) then
        begin
                    ImgBArr2[i,j] := r_true;
            end
            else ImgBArr2[i,j] := r_false;
        end;
        subtr;
end;

function t1a (i, j:integer; var a:array of integer; var b:integer):integer;
var
n,m:integer;
begin
{    Return the number of 01 patterns in the sequence of pixels
    P2 p3 p4 p5 p6 p7 p8 p9.                    }

 //    int n,m;

    for n:=0 to 8-1 do a[n] := 0;

    if (i-1 >= 0) then
  begin
        a[0] := integer(ImgBArr[i-1,j]);
        if (j+1 < ImgBArrHeight) then
      a[1] := integer(ImgBArr[i-1,j+1]);
        if (j-1 >= 0) then
      a[7] := integer(ImgBArr[i-1,j-1]);
    end;

    if (i+1 < ImgBArrWidth) then
  begin
        a[4] := integer(ImgBArr[i+1,j]);
        if (j+1 < ImgBArrHeight) then
       a[3] := integer(ImgBArr[i+1,j+1]);
        if (j-1 >= 0) then
       a[5] := integer(ImgBArr[i+1,j-1]);
    end;

    if (j+1 < ImgBArrHeight) then
    a[2] := integer(ImgBArr[i,j+1]);
    if (j-1 >= 0) then
    a[6] := integer(ImgBArr[i,j-1]);

    m := 0;
  b := 0;
    for n:=0 to 6 do
  begin
        if ((a[n]=0) and (a[n+1]=1)) then  m:=m+1;
        b := b + a[n];
    end;

    if ((a[7] = 0) and (a[0] = 1)) then m:=m+1;
    b := b + a[7];
    result := m;
end;

procedure subtr;
  var
  i,j:integer;

begin

        for i:=0 to ImgBArrWidth do
          for j:=0 to ImgBArrHeight do
if ImgBArr2[i,j]=r_true then
begin
            ImgBArr[i,j] := r_false;
      pixeldeleted:=true;
end;
end;


Только никак не могу понять, что означает вот это - ImgBArr[i,j] = r_false или ImgBArr2[i,j]=r_true

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.