nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

Обнаружение на БИХ 1-го порядка - может и заработать.

Жизнь возвращается в норму: "Critical warning - Timing constraints were not met" как-то рассосался сам собой при следующем синтезе, когда я вспомнил, что прерывания надо вернуть на место. И с прерываниями получение изображения заработало нормально, так что я смог-таки всунуть свой БИХ-фильтр "по горизонтали" и посмотреть, что из этого получается:



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

Тут самое паршивое, что левое пятно "наползло" на соседа, напрочь потеряв свой максимум!

Это у нас "уровень 6", то бишь исходный сигнал делится на 26 = 64, и прибавляется к прошлому значению, умноженному на 63/64, таким образом обеспечивая сильную фильтрацию.

Дальше всё-таки понял, что "играться" будет проще на компьютере, и уже там реализовал фильтрацию по обеим осям, с возможностью менять "частоту среза". Была пара соображений, почему из этого всё-таки может что-то получиться.


Начнём с "уровня 1", что означает усреднение примерно по 2 точкам:


Изображение мало отличается от исходного, разве что шумов стало поменьше, сгладились.

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


Поначалу хотел, чтобы точка была СТРОГО больше своих соседей, но тогда в большинстве случаев вообще в районе пятен не нахожу ничего, там сейчас большие области равномерной интенсивности.

Тем не менее, такая картинка кое-какую информацию даёт. Совершенно случайно она по сути показывает "кривые равных уровней". Здесь небольшой спад в левой и верхней границе пятен, как раз за счёт фильтрации.

Ладно, попробуем радиус увеличить вдвое, т.е level = 2:


И карта максимумов:


Ещё немножко ужалось сверху и слева, т.е нарастание идёт более плавно. А вот падение (справа и снизу) - чересчур резко!

И ещё вдвое, level = 3:


И карта максимумов:


Ужимается "верхушка", пока как будто бы "движемся в правильном направлении". Но всё еще слишком большая зона одинаковой яркости.

Так что двигаемся дальше, level = 4:


Карта максимумов:


Вот здесь верхушка подсократилась изрядно, кажется, что ещё чуть-чуть - и будет всё как надо.

level = 5:


Карта максимумов:


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

Ну и посмотрим, что будет при level = 6:


Карта максимумов:


Большинство точек выглядят весьма многообещающе: картинка стала симметричной. Но вот максимум в левой точке "съелся", наползла она на соседку, так что здесь у нас перебор.

Итак, наиболее подходящим здесь кажется level = 5. А дальше попробуем повысить разрядность результата!

Это второе соображение. Пока что мы использовали для промежуточных результатов (8 + level) бит, чтобы при подаче на вход любого значения достаточно долго мы могли к этому значению прийти, а не обрезать его как "слишком маленькое". Но результаты мы обрезали до тех же 8 бит, что и в начале.

А что, если не торопиться с этим, и вообще разрядность поднять, чтобы как можно дольше наша "экспонента" не выходила на постоянное значение, в смысле, чтобы у нас хватало разрядов регистрировать подъём, всё более и более малый. Тогда по логике эти области с равными значениями должны исчезнуть - и появиться вполне себе максимум!

Для начала попробовал обойтись теми же (8 + level) битами на выходе. Как ни странно, для level = 6 я получил в ответе РОВНО 8 МАКСИМУМОВ:


Посмотрим, что будет, если их сдвинуть на 32 пикселя влево и на 32 вверх:




Забавный метод! Мы просто прогоняем картинку через 2 линейных фильтра, затем ищем локальные максимумы (то есть когда один пиксель ярче всех 8 своих соседей) - и все их добавляем в качестве "обнаруженных пятен". Никакого процессора не надо, никаких связанных списков, выделения памяти, злобных FIFO на вход и выход и пр.

Хотя до памяти метод всё-таки слегка прожорлив, ему надо аж 3 килобайта. Но есть их у нас :) Разве что на 5576ХС6Т всё-таки вряд ли, там их всего 5, но нужно и под остальное что-нибудь оставить.

PS. А ведь можно забабахать БИХ второго порядка, у которого импульсная характеристика будет sin(ωt) * exp(-t/τ) и при подборе ω по искомому диаметру пятна и добротности порядка 0,5..1 (чтоб не звенело по чём зря) получится куда симметричнее, и даже этот "звон" немножко должен помочь от "склеивания" соседних пятен, мне так представляется.
Tags: ПЛИС, программки, работа, странные девайсы
Subscribe

  • О вытягивании себя из болота по методу Мюнхгаузена

    Всё готовлюсь к встрече с представителями РКК Энергия, нужно убедить их в моём способе определения положения ВидеоИзмерителя Параметров Сближения на…

  • Ремонт лыжных мостиков

    Вернулся с сегодняшнего субботника. Очень продуктивно: отремонтировали все ТРИ мостика! Правда, для этого надо было разделиться, благо народу…

  • Гетто-байк

    В субботу во время Великой Октябрьской резни бензопилой умудрился петуха сломать в велосипеде. По счастью, уже на следующий день удалось купить…

  • А всё-таки есть польза от ковариаций

    Вчера опробовал "сценарий", когда варьируем дальность от 1 метра до 11 метров. Получилось, что грамотное усреднение - это взять с огромными весами…

  • Так есть ли толк в ковариационной матрице?

    Задался этим вопросом применительно к своему прибору чуть более 2 недель назад. Рыл носом землю с попеременным успехом ( раз, два, три, четыре),…

  • Big Data, чтоб их ... (4)

    Наконец-то стряхнул пыль с компьютерной модели сближения, добавил в неё код, чтобы мы могли определить интересующие нас точки, и выписать…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 1 comment