Конференция "Media" » Распознавание цветной точки. [D7, WinXP]
 
  • hatecows © (03.11.10 00:40) [0]
    Пишу программку.
    Суть проста: на рисунке, изображен предмет. На него светит лазер.(Лазерной указкой). Лазера на картинке не видно. Видно только точку , например красную.
    Задача в том чтобы найти координаты этой точки. С этим то я справляюсь, если например я в пейнте нарисую красную точку,то я ее спокойно нахожу. Но как только беру фотку - тут приплыли.

    Во - первых у нее не ровные края.
    Во - вторых цвет точки на фотке не красный(то есть не 255 0 0 по RGB) а какой то оттенок.

    Так вот вопрос.
    Как мне распознать эту долбаную точку, если я нормально не могу цвет определить ? Как мне отфильтровать именно тот участок с точкой?

    Например на таком рисунке: http://www.instructables.com/id/Nintendo-Zapper-Laser/
  • MBo © (03.11.10 08:48) [1]
    >цвет точки на фотке не красный(то есть не 255 0 0 по RGB) а какой то оттенок

    Можно попробовать искать точки с минимальным евклидовым расстоянием в кубе RGB до красного.

    Но лучше перейти из RGB в другую цветовую модель типа HSV и т.п.
  • Pavia © (03.11.10 17:43) [2]
    Вычесть фон останется точка. Да и не точка у вас, а окружность. А это меняет дело.
  • hatecows © (03.11.10 18:21) [3]
    MBo, что даст переход в HVC? То есть что потом с ним делать то ?

    Pavia, как вичесть фон , так чтоб окружность осталась ?
  • hatecows © (03.11.10 19:35) [4]
    Вот кусок кода:

    procedure TForm1.Button1Click(Sender: TObject);
    var
     x, y, i,j : integer;
    begin

    for I := 0 to Image1.Width - 1 do
     for J := 0 to Image1.Height - 1 do
     begin
       if (GetRValue(Image1.Canvas.Pixels[i, j]) > 220) and
          (GetGValue(Image1.Canvas.Pixels[i, j]) < 150) and
          (GetBValue(Image1.Canvas.Pixels[i, j]) < 150) then

        Image1.Canvas.Pixels[i, j] := RGB(GetRValue(Image1.Canvas.Pixels[i, j]), 0, 0)
       else
         Image1.Canvas.Pixels[i, j] := RGB(0, 0, 0);

     end;
    end;


    В принципе самый простой фильтр. И очень даже нормально работает. Но в результате получается размытая красная область. Как мне тогда найти координаты центра этой обрасти (круга)?
  • CrytoGen (03.11.10 20:01) [5]
    заливка + центр масс
  • Pavia © (03.11.10 20:03) [6]
    По поводу вычитания.
    If (New-Fon)> eps then Scr:=New else Scr:=0;

    Координаты найти можно различными способами.
    1) Поиск локального максимума. Наиболее яркую точку.
    2)Поиск окружности при помощи преобразования Хафа и затем искать максимум.
    3) Поиск центра масс, через расчет центрального статистического момента.
    Для последнего можно реализовать выделению связанных компонент и подсчет для каждой группы своего момента.

    Каждый алгоритм имеет свои плюсы и минусы.
  • babanyukv (10.11.13 17:41) [7]
    Понятно.
    _____________
    http://www.art-build.ru/doma_iz_brusa/
 
Конференция "Media" » Распознавание цветной точки. [D7, WinXP]
Есть новые Нет новых   [134427   +38][b:0][p:0.002]