-
Пишу программку.
Суть проста: на рисунке, изображен предмет. На него светит лазер.(Лазерной указкой). Лазера на картинке не видно. Видно только точку , например красную.
Задача в том чтобы найти координаты этой точки. С этим то я справляюсь, если например я в пейнте нарисую красную точку,то я ее спокойно нахожу. Но как только беру фотку - тут приплыли.
Во - первых у нее не ровные края.
Во - вторых цвет точки на фотке не красный(то есть не 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]Вычесть фон останется точка. Да и не точка у вас, а окружность. А это меняет дело.
-
MBo, что даст переход в HVC? То есть что потом с ним делать то ?
Pavia, как вичесть фон , так чтоб окружность осталась ? -
Вот кусок кода: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]