Серия проектов "Дополнение к реальности "

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Серия проектов "Дополнение к реальности "

Сообщение Alex2013 » 21.07.2015 01:15:39

Вы совершенно правы !

Вчера выложил не проверенный вариант скрипта ... :roll:
Сегодня вроде поправил ...
Ошибка была в процедуре распознавания (Буквально нолик вместо единички поставил но "спецэффектов" нахлебался по самое не надо ... )
Nv_BETA003M.zip
В этой версии есть хитрость
Recog0 -" встроенная версия функции распознавания "
Recog - Тоже в скрипте для экспериментов ...
Поправил описания функций в ReadMe
Добавил простой "встроенный пример"..
ЗЫ
Насчет SOBJ спасибо ... Я то думал что стек в 64к остался в варварском прошлом MSDOS...
Но поскольку весь проект задуман под анализ изображения от вебкамеры с низким разрешением
то перенос функции в основную программу пока решил проблему

Вот бы еще придумать как можно получать чистое изображение контура без паразитных кусков других контуров! :idea:
( и при этом не слишком потерять в скорости обработки...)

А что до первых скриптов "порога" и гм ... "упрощения" (сглаживанием там пока и не пахнет ) то они задуманы как временные а потому я к ним особо не приглядывался .. Хотя вы снова правы даже это мелкое "не хорошо" нужно поправить ...
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Серия проектов "Дополнение к реальности "

Сообщение Pavia » 21.07.2015 10:34:06

Термин контуры вы не правильно используете. То что у вас это просто геометрические фигуры. У фигуры есть ребра, но понятие ребра размыто. А вот контур это уже ребро толщиной в 1 пиксель.
Рёбра чем хороши? Тем что они устойчивы к шумам и перепадам яркости и их легко выделить. Оператор Собеля или DoG. Так как из-за размытия в этих операторах рёбра тоже размывается его неудобно использовать. А вот контур это уже утоншонный ребра. Первым утоньшение предложил Кэнни. И далее уже их можно представить цепным кодом.

Свои недостатки у рёбер конечно есть. Из-за шумов, наложения объектов, темени они дают плохие результаты.

Alex2013 писал(а):Вот бы еще придумать как можно получать чистое изображение контура без паразитных кусков других контуров! ( и при этом не слишком потерять в скорости обработки...)

Очищать можно долго и безрезультативно. Что-бы разделить фигуры есть матморфология (ММ). В ней есть к примеру такая операция как "разъединение" фигур, в терминах ММ называется открытие Open(Opening).
На картинке видно как исчезает перешеек:
http://mipav.cit.nih.gov/pubwiki/index. ... ology#Open

А вообще с этим боятся по другому. Паразитные куски просто не замечаются в виду хитрого сравнения. Об этом пожалуй стоит поговорить отдельно. Но одна из частей это:

Перебирают все возможные положения по x,y и ищут лучшее совпадение.
http://yann.lecun.com/exdb/lenet/index.html
Поэтому и код вылизывают по скорости по максимом. Для оптимизации есть 3 методики.
1) Выделения особенностей(углы, границы) и поиск только вблизи них.
2) Каскады. При смещение по х,y проверка идёт не по всем слоям НС. А используются результаты с соседнего положения.
3) Мозаика(BagOfWord) Промежуточная технология. Шаблон разбивается на составные части и ищутся они на картинке.

А по поводу хитрого сравнения. Это принципы компонентного анализа без подготовки слайдов не расскажешь.

Мне пока трудно это рассказать всё. Так как судя по всему тут имеет место синергетический эффект. Когда два алгоритма суммарно дают более лучший результат чем по отдельности.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Серия проектов "Дополнение к реальности "

Сообщение Alex2013 » 21.07.2015 12:43:57

О я совершенно не сомневаюсь, что есть множество методик "верхнего уровня" но до них мне нужно добраться последовательно ...
(Очень не хочется попадать в ситуацию когда умные методики или точнее их "умные названия" затмят смысл )

Кроме того вполне возможно что для решения поставленной задачи (Уверенного распознавание двух или трех граничных маркеров и рабочего поля ограниченного ими )хватит и решения "в лоб" ... Тут важна не красота математики и алгоритмов а их быстродействие ...
(Совершенно понятно что любые математические изыски скорее всего резко усложнят и снизят производительность алгоритма )
Если "модель" в форме медленных скриптов заработает то дальше идет оптимизация кода и минимизация отрабатываемых данных ... попытки "распараллелить" обработку по нескольким ядрам CPU и тд ...

Зы
Вообще понятно что-то " Виртуальная лаборатория" задумывается с заделом на большее чем применение в конкретной задачи ...
Но опять же не хочется (как у меня уже не раз случалось) забросить по проект в попытке "обаять не обнятое" создавая все более "навороченные" инструментальные средства и субпроекты .
Поэтому пожалуй чуть доработав остановлю разработку " Виртуальной лаборатории" до завершения текущей задачи то есть
решения задачи создания "Бумажной клавиатуры"...
Для разработки динамической части видимо придется писать отдельный, более быстродействующий инструмент ...
Но в принципе, в отличии от задачи распознания маркеров и их положения в пространстве особых "подводных камней" не предвидится ...
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Серия проектов "Дополнение к реальности "

Сообщение Pavia » 21.07.2015 15:10:28

Вы меня не поняли. Да это и понятно.
Так я и вижу, что вы ещё не готовы к высоким материям. Поэтому их и не рассказываю, а даю только упоминания.
А по поводу математической морфологии. Вы её не бойтесь. Там только название страшное. А методы не сложнее сглаживания. Только вместо умножения and, а вместо сложения or/and.

Alex2013 писал(а):(Совершенно понятно что любые математические изыски скорее всего резко усложнят и снизят производительность алгоритма )

Напротив. Суть математики в выводе теорем. А теорема это сокращённое последовательность действий. Просто не все любят математику. Так что её лучше оставить на потом когда будете оптимизировать. А вот для вывода вернее придумывания алгоритма она совершенна не нужна. Тут нужны совершенно другие подходы.

Alex2013 писал(а):Кроме того вполне возможно что для решения поставленной задачи (Уверенного распознавание двух или трех граничных маркеров и рабочего поля ограниченного ими )хватит и решения "в лоб" ... Тут важна не красота математики и алгоритмов а их быстродействие ...

Я уже потыкался в этой области. И на передний край ставлю качество работы алгоритма, а не его скорость. Если будет нужна скорость, то ваши изыски легко оптимизировать, так что скорость возрастёт 40 раз. Просто про скорость было сказано относительно известных, но медленных алгоритмов которые показывают отличные результаты.

Вопрос в другом. Всё что вы сейчас делаете в реальных условиях плохо работает. Пока у вас лаборатория и картинка тестовая всё хорошо(то что вылетает не в счёт). А как только вы получите реальные снимки с камеры. Где у вас шумы камеры 10-16%. Когда освещение плохое и контуры сливаются. Когда камера дрожит и у вас картинка смазана. Да и линза вносит нелинейные искажения в форму. Нелинейные это те которые не описываются поворотом растяжением и смещениям. Когда цвета изображения с одной камеры варьируется от синего к красному. Неравномерность освещения и глобальный порог не работает. Низкое разрешение камеры и мозаика Байера вносят отрицательный вклад в распознавание . Когда скорость движения пальцев привыкает скорость съемки и картинка смазана или вовсе след не заметен на снимки.

Вот тогда вы и задумаетесь о том что надо менять алгоритмы. Вот из-за этого кстати очень смешно наблюдать соревнования DARPA. На последнем состязании все роботы падали.

Пока эта лаборатория и вы изучаете. Это всё нормально, вот только стоит ли тратить время на изучения тех методик которые вам в последствии не пригодятся?
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Серия проектов "Дополнение к реальности "

Сообщение Alex2013 » 23.07.2015 00:28:24

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

Что до целей и задач я как уже наверное заметно двигаюсь спирали .
Нарабатывается опыт появляются вопросы которые в первой итерации даже в голову не приходили ...
Кроме того как я уже писал я изрядно дисквалифицировался (что не очень страшно потому что то в чем я разбирался раньше сейчас мало кому нужно ) и отстал (а вот это гораздо хуже !).
Так что проект кроме прочего имеет и цели самообучения ...

На счет SOBJ Ух извините я было подумал что вы запускали старую бетку ...
К сожалению глюк возникает и в новой причем там где предыдущие воплощения проекта вполне справляются....
Сегодня сделал интересную процедуру URect обедняющею близкие фигуры-контуры в один "силуэт" .
Вот кстати пример когда примитивная логика успешно заменяет умную математику .

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

Пока эта лаборатория и вы изучаете. Это всё нормально, вот только стоит ли тратить время на изучения тех методик которые вам в последствии не пригодятся?


Дело в том ,что я скорее изучаю не сами методики( которых и сам нарыл немало и вы еще подсказали ) а практику их реализации вырабатывая "свой стиль" и нарабатывая опыт ... Потому и двигаюсь "окольным путем" не пытаясь использовать готовые библиотеки .
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Серия проектов "Дополнение к реальности "

Сообщение Pavia » 23.07.2015 16:28:59

Alex2013 писал(а):Вот кстати пример когда примитивная логика успешно заменяет умную математику .

Не тут математика выигрывает. Лучше не объединять, а использовать принципы компонентного анализа, в частности преобразование KLT для выделение наиболее значимых компонент.

Пусть есть класс овалов в который входят круг, овал, овал повернутый на 45 градусов. Все эти овалы залиты сплошным чёрным цветом.
Так вот если мы будем проверять изображения на совпадение. К примеру с квадратом. То попиксельное сравнение покажет совпадение в 80%. Но квадрат не относится к кругу! Это ошибки второго рода.
Суть в том что внутренние пиксели дают инертность. И их надо выбросить.

Рассмотрим случай теперь с четырёх угольников. К этому классу относятся квадраты, трапеции, параллелограммы, ромбы.

Будем сравнивать по углам. Но из за ошибок к примеру мы не найдем один угол или он будет сдвинут. Мы получим что удачных совпадений будет 1%. Тут ошибки первого рода.

Можно выбрать средний вариант оставив только контур. Но встаёт вопрос в толщине контура. Больше толщина больше инертность сравнения. Меньше толщина велика вероятность нарваться на ошибку. Как её выбрать наиболее оптимально?

Есть универсальное решение для любого класса. Для этого предлагается ортогональное разложение. Как ортогональные вектора при произведение друг на друга дают 0. Так и тут выбрать такие пиксели из разных классов при сравнение по которым картинки будут относится к разным классам независимо. Т.е такие пиксели которые зачернены только в данном классе и не зачернены в других классах. Для отсыскания таких пикселей применяют преобразование KLT в котором ищутся собственные вектора и собственные значения.

Объединять тоже надо хитро. Понятно что если внутри класса объединить овал и круг то ничего хорошего не выйдет. Поэтому для этого и применяют мозаику. Разбивают шаблоны на составляющие. Для класса овалов такими составляющими будут дуги.
Для четырёх угольников это углы и прямые рёбра.
Для класса лицо такими составляющими будут глаза, нос , рот уши. Которые упрощаются до примитивов Хаара.

Тут применяется двойное распознавание. Сначала ищутся особенности. А после уже объединяются в одно целое через НС.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Серия проектов "Дополнение к реальности "

Сообщение Alex2013 » 29.07.2015 00:56:17

Скрипт "Гистерезисный порог"
И где же я ошибся ? (Или может быть нужно Tmin,TMax подобрать ?)
(Вот что бывает если использовать код написанный не понятно по какой формуле и методике ) :idea:
Код: Выделить всё
// Гистерезисный порог
procedure HTBase( Tmin,TMax:Integer);
var
i,j:Integer;
LL,CY:Integer;
h,w,C,C1,c2:Integer;
// Реализация в 4 прохода с частичной потерью точности.
begin
w:=GetWidth(1);
H:=GetHeight(1);
CY:=0;
  for i:=1 to W-1 do
   begin
      if BWColor(GetPixel(1,i,Cy))> Tmin then SetPixel(0,i,cy,RGB($80,0,0));
   if ( BWColor(GetPixel(1,i,Cy))> Tmax) or ( BWColor(GetPixel(1,i-1,Cy))=255) then SetPixel(1,i,cy,RGB(255,0,0));
    RunTime (W,i );
   end;
for j:=1  to H-1 do
  for i:=1 to W-1 do
   begin
    C:= GetPixel(1,i,J);
    C1:= GetPixel(1,i-1,J);
    c2:= GetPixel(1,i,J-1);
    SetPixel(1,i,j,RGB(0,Green(C),Blue(C)));
    RunTime (W,i );
// Уже тут четко видно что картинка просто обнулятся...
    if ( BWColor(C)> Tmin) then
      begin
      SetPixel(1,i,j,RGB($80,Green(C),Blue(C) ));
      if (BWColor(C1)=255) or (red(c2)=255) then        SetPixel(1,i,j,RGB(255,Green(C),Blue(C)));
     end;
if (BWColor(C)> Tmax) then  SetPixel(1,i,j,RGB(255,Green(C),Blue(C)));
  end;
// Обратный проход
  for i:=W-2 downto 0 do
   begin
       C:= GetPixel(1,i,H-1);
       C2:= red(GetPixel(1,i+1,H-1));
       C1:= BWColor(C);
     if (red(C)= $80) and (c2=255) then SetPixel(1,i,h-1,RGB(255,Green(C),Blue(C)));
   end;
for j:=h-2 downto 0 do
  for i:=W-2 downto 0 do
   begin
       C:=  GetPixel(1,i,j);
       C2:= red(GetPixel(1,i,j+1));
       C1:= red(GetPixel(1+1,i,j+1));
   if (Red(c)= $80) and ((c1=255) or (c2=255)) then SetPixel(1,i,j,RGB(255,Green(C),Blue(C)));
   if (red(C) > $80) then  SetPixel(1,i,j,RGB(0,Green(C),Blue(C)));   
  end;
// 3 проход
  for i:=1 to W-1 do
   begin
       C:= GetPixel(1,i,0);
       C2:= red(GetPixel(1,i+1,0));
       C1:= BWColor(C);
   if (red(C) > $80) and (c2=255) then  SetPixel(1,i,j,RGB(0,Green(C),Blue(C)));   
  end;
for j:=1  to H-1 do
  for i:=1 to W-1 do
   begin
    C:= GetPixel(1,i,j);
    C2:= red(GetPixel(1,i,j+1));
    C1:= red(GetPixel(1+1,i,j+1));
    if (red(c)= $80) and ( (c1=255) or (c2=255) ) then     SetPixel(1,i,j,RGB(255,Green(C),Blue(C)));
  end;

// 4 проход
// Обратный проход 2
  for i:=W-2 downto 0 do
   begin
    C:= GetPixel(1,i,0);
    C2:= red(GetPixel(1,i+1,0));
    C1:= BWColor(C);
    if (red(C) > $80) and (c2=255)then  SetPixel(1,i,j,RGB(0,Green(C),Blue(C)));   
  end;
   for j:=H-2 downto 0 do
    for i:=W-2 downto 0 do
      begin
       C:=  GetPixel(1,i,j);
       C2:= red(GetPixel(1,i,j+1));
       C1:= red(GetPixel(1+1,i,j+1));
      if (red(c)= $80) and ((c1=255) or (c2=255)) then   SetPixel(1,i,j,RGB(255,Green(C),Blue(C)));
      if (red(C) > $80) then  SetPixel(1,i,j,RGB(0,Green(C),Blue(C)));   
   end;
end;
LH,LL:Integer;
begin
//Lh:= StrToInt(GetParam('L_HI'));
//LL:= StrToInt(GetParam('L_L'));
CopyImage(0,1);
RunTime (H,1 );
HTBase (100,200);
RunTime (H,1 );
MSG('script run...');
end.
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Серия проектов "Дополнение к реальности "

Сообщение Pavia » 30.07.2015 00:02:29

Да что-то ошибок много. Поправил основные.
Код: Выделить всё
// Гистерезисный порог
procedure HTBase( Tmin,TMax:Integer);
var
i,j:Integer;
LL,CY:Integer;
h,w,C,C1,c2:Integer;
// Реализация в 4 прохода с частичной потерью точности.
begin
w:=GetWidth(1);
H:=GetHeight(1);
CY:=0;
  for i:=1 to W-1 do
   begin
      if BWColor(GetPixel(0,i,Cy))> Tmin then SetPixel(1,i,cy,RGB($80,$80,$80));
   if ( BWColor(GetPixel(0,i,Cy))> Tmax) or ( BWColor(GetPixel(0,i-1,Cy))=255) then SetPixel(1,i,cy,RGB(255,255,255));
  // if j mod 10 = 0 then  RunTime (W,i );
   end;
for j:=1  to H-1 do
  for i:=1 to W-1 do
   begin
    C:= GetPixel(0,i,J);
    C1:= GetPixel(1,i-1,J);
    c2:= GetPixel(1,i,J-1);
    RunTime (W,i );
   if ( BWColor(C)> Tmin) then
      begin
      SetPixel(1,i,j,RGB($80,$80,$80 ));
      if (BWColor(C1)=255) or (red(c2)=255) then        SetPixel(1,i,j,RGB(255,255,255));
     end;
if (BWColor(C)> Tmax) then  SetPixel(1,i,j,RGB(255,255,255));
   end;
// Обратный проход

  for i:=W-2 downto 0 do
   begin
       C:= GetPixel(1,i,H-1);
       C2:= red(GetPixel(1,i+1,H));
     if (red(C)= $80) and (c2=255) then SetPixel(1,i,h-1,RGB(255,255,255));
   end;
for j:=h-2 downto 0 do
  for i:=W-2 downto 0 do
   begin
       C:=  GetPixel(1,i,j);
       C2:= red(GetPixel(1,i+1,j));
       C1:= red(GetPixel(1,i,j+1));
   if (Red(c)= $80) and ((Red(c1)=255) or (Red(c2)=255)) then SetPixel(1,i,j,RGB(255,255,255));
    if j mod 10 = 0 then RunTime (W,i ); 
  end;
// 3 проход
  for i:=1 to W-1 do
   begin
       C:= GetPixel(1,i,0);
       C2:= red(GetPixel(1,i-1,0));
   if (red(C) = $80) and (c2=255) then  SetPixel(1,i,j,RGB(255,255,255));   
  end;
for j:=1  to H-1 do
  for i:=1 to W-1 do
   begin
    C:= GetPixel(1,i,j);
    C2:= red(GetPixel(1,i-1,j));
    C1:= red(GetPixel(1,i,j-1));
    if (red(c)= $80) and ( (c1=255) or (c2=255) ) then     SetPixel(1,i,j,RGB(255,255,255));
  end;

// 4 проход
// Обратный проход 2
  for i:=W-2 downto 0 do
   begin
    C:= GetPixel(0,i,0);
    C2:= red(GetPixel(0,i+1,0));
    C1:= BWColor(C);
    if (red(C) = $80) and (c2=255)then  SetPixel(1,i,j,RGB(255,255,255));   
    if (red(C) = $80) then  SetPixel(1,i,j,RGB(0,0,0));   
  end;
   for j:=H-2 downto 0 do
    for i:=W-2 downto 0 do
      begin
       C:=  GetPixel(1,i,j);
       C2:= red(GetPixel(1,i+1,j));
       C1:= red(GetPixel(1,i,j+1));
      if (red(c)= $80) and ((c1=255) or (c2=255)) then   SetPixel(1,i,j,RGB(255,255,255));
      if (red(C) = $80) then  SetPixel(1,i,j,RGB(0,0,0));   
   end;
end;
begin

HTBase (100,200);
SResult('Stage 1 '+#13+#10+'Ok');
end.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Серия проектов "Дополнение к реальности "

Сообщение Alex2013 » 30.07.2015 14:53:07

О спасибо посмотрю (исходных формул увы так и не нашел )...Но вообще этот метод явно медленный хотя и чисто целочисленный . Вчера на качал литературы по обработке изображений но сходу понятное дело в вузовский курс не вникнешь .
Зы
Тут появилась смежная задача на обработку спутниковых фотографий так что по любому в математику вникать придется ... :roll: :idea:
Зы Зы
Смотрел исходники библиотеки OpenCV использовать можно но мороки ...
https://ru.wikipedia.org/wiki/OpenCV
Хотя есть готовый DLL модуль и можно юзать "в темную" но уж очень не хочется делать это без понимания методов .
https://www.youtube.com/watch?v=AZmkLLeALBE
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Серия проектов "Дополнение к реальности "

Сообщение Pavia » 30.07.2015 17:22:28

Идея не нова. В электротехнике широко известна как Триггер-Шмитта.
http://www.rlocman.ru/shem/schematics.html?di=48930
В компьютерной графике гистерезисный порог описал Кэнни в своей работе по детектированию границ.
А вообще он формулой не описывается.
Что касается алгоритма который я привел. То алгоритм чисто моя разработка.
Основан на алгоритме с выделением связанных областей двух проходным методом.

Вчера на качал литературы по обработке изображений но сходу понятное дело в вузовский курс не вникнешь .
Да не это не трудно. Там ничего трудного нет. Только время нужно.

Тут появилась смежная задача на обработку спутниковых фотографий так что по любому в математику вникать придется ...
И не говори. Я из-за этого весь матанализ выучил!!!
На самом деле очень много шелухи. Настоящих самородков которые дают реально качественные результаты мало. Да и их тоже надо дошлифовывать.

А что за задача?

Смотрел исходники библиотеки OpenCV использовать можно но мороки ...
Мороки больше если не использовать. Вроде есть заголовочные файлы для паскаля.
Аватара пользователя
Pavia
постоялец
 
Сообщения: 290
Зарегистрирован: 07.01.2011 12:46:51

Re: Серия проектов "Дополнение к реальности "

Сообщение Alex2013 » 03.08.2015 00:40:14

Задача создать экспертную систему для мелиорации...
Там получают уже отфильтрованные через различные фильтры изображения увязанные
с разным параметрами позволяющими дистанционно делать мониторинг состояния посевов ...
Все это нужно сопрягать с моделью
Возможно будет частью или развитием вот этого проекта .
http://gispoliv.com/demo/
Сейчас на стадии "дожимания" заказчика на предмет уточнения постановки задачи ....
(А то знаете как это бывает ? Заказчик говорит сделаете нам что-то похожее на вот это вот это и вот это ...
Добавите тот-то и хорошо бы веб-интерфейс ... Начинаешь спрашивать о конкретике (Что за сервер например ). Требовать материалы и данные.. и т.д. и т.п. и тут заказчик делает большие глаза :shock: и говорит что-то вроде " Так это же мы вам заказ делаем а не вы нам !" или отделывается бесконечными подождите не много мы все подготовим ... А вы пока сделаете нам то что вы уже сейчас можете или предложите пока свое решение .
Короче как говориться "Рука-Лицо" :mrgreen:
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Серия проектов "Дополнение к реальности "

Сообщение Alex2013 » 07.08.2015 13:11:23

И так возвращаясь к своему барану ...

Сделал более приятное сглаживание (не по Гаусу зато работает быстро )...
Скрипт stage2.scr
Код: Выделить всё
Var
W,H:Integer;
X,Y:Integer;
const
   step = 3;
   d_step = 1;
   //(step - 1) div 2;
Procedure Simple;
Var
I,J,T,R,_R,_X,_Y,CNT:Integer;
begin
  for j := 0 to h-1 do begin
    for i := 0 to W-1 do 
     begin
        cnt := 0;
        _r := 0;
       for t := 0 to step*step-1 do
        begin     
         _x := i + t mod step - d_step;
         _y := j + t div step - d_step;
         if (_x >= 0) and (_x < W) and (_y >= 0) and (_y < H) then
           begin
            R:=Red(GetPixel(1,_X,_Y)); 
            inc(cnt);
            _R:=_r+r;
           end;
        end;
        r := _r div cnt;
        SetPixel(1,I,J,RGB(r,r,r));
     end;
    if J mod 10 = 0 then RunTime (H,Y );
   end;
end;
Const
clBlack   = $000000;
clWhite   = $FFFFFF;       
begin
W:=GetWidth(0);
H:=GetHeight(0);
//Amount:=1;
//StrToInt(GetParam('AM'));
//  if Amount=0 then Exit;
Simple; Simple;
//MSG('script run...'+IntToStr(w)+' '+IntToStr(H)+' ');
SResult('Stage 2 '+#13+#10+'Ok');
end.

После выполнения нужно снова запустить порог
то есть StageList.lst теперь такой
Этап 1 Порог + получение ЧБ изображения
Stage1.scr
Stage1.prm
Этап 2 Сглаживание
Stage2.SCR
Stage2.prm
Этап 3 Порог
Stage1.scr
Stage1.prm
Этап 4 Поиск контуров
Stage3.scr
Stage3.prm
Этап 5 Проба (Отладка окна наблюдения)
Stage4.scr
Stage4.prm
Этап 6 Распознавание контуров
Stage5.scr
Stage5.prm

Зы
Начитался теории но до практики пока не довел ...
Так что "чем богаты тем и рады"... :idea:
Кстати насчет сглаживания есть интересный способ чистки изображения от не ровной освещенности :
сильно сглаженное изображение "отнимают" (нужно будет еще подумать как это сделать) от исходного (результат должен быть как при идеально прямом освещении )...
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Re: Серия проектов "Дополнение к реальности "

Сообщение Alex2013 » 26.09.2015 01:34:39

Проект не забыт но временно отложен .... :idea:
(Нужно наработать навык и свои инструменты для использования веб-интерфейса .)
Но идеи и информация успешно накапливаются .

:idea:
Alex2013
долгожитель
 
Сообщения: 2923
Зарегистрирован: 03.04.2013 11:59:44

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 35

Рейтинг@Mail.ru