Archive for the 'computer vision' Category

Скоростной видео трекинг + визуальный фидбэк в робототехнике

Augmented Reality: Попытка соединить флэш и юнити через js

Read more about here

Очень интересная статья по сегментации изображений

Сегментация изображений и выделение границ объектов (edge detection) играют важную роль в системах Computer Vision и применяются для задач распознавания сцен и выделения (определения) объектов. По большому счету, это такой же инструмент, как, например, сортировка, предназначенный для решения более высокоуровневых задач. И поэтому понимание устройства данного класса алгоритмов не будет лишним при построении подобных систем с учетом предъявляемых требований (в плане качество/производительность) и специфики поставленных задач.

В данной статье кратко описан алгоритм «Efficient Graph-Based Image Segmentation» авторов Pedro F. Felzenszwalb (MIT) и Daniel P. Huttenlocher (Cornell University), опубликованный в 2004 году. Да, алгоритм относительно старенький, но, несмотря на это, он до сих пор остается весьма популярным, демонстрируя неплохие результаты в плане производительности.

Под катом – большая смесь картинок и текста, не требовательная к текущему уровню знаний тематики. Любопытство приветствуется.

via Эффективная сегментация изображений на графах / Алгоритмы / Хабрахабр.

OpenCV 2.0 on SnowLeopard 64bit via MacPorts

OpenCV 2.0 on SnowLeopard 64bit via MacPorts

Posted by Matthias in guides | 17 Comments

Updated 1/17/10: The Portfile now includes a “+disable_openmp” variant. I encountered some OpenMP related segfaults in cvCalcOpticalFlowPyrLK which can be prevented with this variant.

In case you need OpenCV 2.0 on SnowLeopard in 64bit and can live without quicktime support (OpenCV 2.0 it has FFMPEG support so you should be OK in most cases) this tutorial is for you.

In case you want OpenCV 2.0 in 32 bit on 10.5 this probably works too, but I haven’t tested it. Just download the attached “Portfile” and follow the short steps underneath:

1. Before starting execute

sudo port selfupdate

so that the most recent dependencies will be installed later on. Otherwise the build might fail.

2. Make your own port directory somewhere, e.g.

/Users/sam/ports

3. Let macports know about it by editing sources.conf, e.g.

> cd /opt/local/etc/macports

> sudo vim sources.conf

4. Add the local port directory to the sources.conf before the rsync:// at the bottom of the file, e.g.

file:///Users/sam/ports # That is 3 slashes after file ;)

5. Create a graphics/OpenCV subfolder so that we have in our example

/Users/sam/ports/graphics/OpenCV

6. Copy the downloaded Portfile into the above directory, make sure it is called Portfile not Portfile.txt

7. Execute portindex in your local port directory, e.g.

> cd /Users/sam/ports

> portindex

You should see a message telling you that the total number of parsed ports is 1

8. Check if OpenCV 2.0 is found

> port search OpenCV

9. Install OpenCV via

> sudo port install OpenCV

or on SnowLeopard in 64 bit but without quicktime support

> sudo port install OpenCV +sl_64bit

10. Enjoy the time you have saved by not having to implement the algorithms in the new MachineLearning package all by yourself ;)

via random thoughts » Blog Archive » OpenCV 2.0 on SnowLeopard 64bit via MacPorts.

D’Fussion presentation

Требования к AR маркерам

В зависимости вида “дополненной реальности” которую можно делать в настоящий момент с помощью флеша,
маркеры условно можно разделить на два типа:

3D маркеры

Использование данных маркеров позволяет осуществлять полное 3D управление AR сценой:

  • перемещение X, Y, Z
  • вращение относительно осей X, Y, Z
  • пропорциональное увеличение, уменьшение

Под 3D маркером понимается в виду классический квадратный маркер

Пропорции линий и элементов важно соблюдать, размер можно делать меньше, но не сильно.

Цвета маркера должны быть контрасными, желательно (но не обязательно) ЧБ

Квадратный маркер нельзя печатать на неплоскхи  поверхностях (например елипсоидный значок) ,
т.к. даже незначительные нелинейные искажения граней маркера приводят к очень нестабильной работе технологии.

Основные графичиские элементы маркера долны быть крупными (мин размер 15% от площади маркера)

Мелкие элементы в процессе обработки маркера (сжатие до 16х16 px) превращаются в серую муть и в анализе не участвуют

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

Если материал не бумага – необходимо следить, чтобы поверхность была матовой, не бликовала.

2D маркеры

Использование этих (как правило цветных) маркеров позволяет осуществлять 2D управление AR сценой:

  • перемещение X, Y
  • пропорциональное увеличение, уменьшение
  • в некоторых случаях вращение вокруг оси перепендикулярной плоскости экрана

Пример такого “маркера

Кратно принцип работы техники распознавания:

  • В видеопотоке идёт поиск определённого основного цвета
    (в примере синий цвет бутылки)
  • чтобы отличить рабочую область “маркера” от фона
    в ней проводиться внутренний поиск на характерный дополнительный цвет
    (в примере красный цвет лого)
  • далее идетрасчёт положения сцены идёт отностительно центров масс
    основого и дополнительного цвета

Исходя из выше сказанного:

  • Цвета “маркера” должны быть насыщенными (отстоящими от цвета кожи, редко встречающимися в одежде)
  • Основной и дополнительные цвета должны отстоять друг от друга по крайней мере на 30 градусов спектра
    (параметр H в HSV системе)
  • Дополнительный цвет должен быть занимать ~25-50% от основного цвета
  • Дополнительный цвет не должен разрывать границы основного цвета

Материал на котором будет печататься маркер должен быть по возможности матовым
паразитные блики от освещения – делают распознование нестабильным.
Если этого нельзя избеажать – необходимо увеличить площадь основного цвета.

HSV Threshold using pixelblender

It can be very usefully for a blob tracking technics

Example

Usage

// HSV PIXEL BLENDER FILTER
[Embed("HSV_Threshold.pbj", mimeType="application/octet-stream")]
private var hsvShader:Class;
private var hsv:Shader = new Shader(new hsvShader as ByteArray);

...

/// RED /// /// /// /// /// /// /// /// /// //

hsv.data.HueMin.value = [275.0]
hsv.data.HueMax.value = [ 35.0]
hsv.data.SatMin.value = [ 40.0]
hsv.data.SatMax.value = [100.0]
hsv.data.ValMin.value = [ 40.0]
hsv.data.ValMax.value = [100.0]

yourBitmapData.applyFilter(yourBitmapData, yourBitmapData.rect, new Point(0,0), new ShaderFilter(hsv));

Shader source

Расширенная реальность или особенности японского исходного кода

“The Japanese have hit the shores like dead fish. They’re just like dead fish washing up on the shores.”

Steve Jobs

“Тихо, тихо ползи, Улитка, по склону Фудзи, вверх, до самых высот!”

Кобаяси Исса о FLAR Toolkit

Изучая FLARToolkit нашёл вот такую строку в коментах, оставленную Сакоши :

直線に直交するベクトルを計算する・・・だと思う。

Что буквально переводиьтся как:

Мне кажется эта штука возращает перепендикулярный вектор…

Кояма… Ну ёб твою мать!

Уважаемый Кояма сан

Какого хуя тебе вообще что-то кажется?
Я до глубины души изумлён тем фактом, что Вы не досканально осознали суть вашей работы.

Твоим блять кодом пользуются тысячи флешеров!
Ведь Вашей библиотекой пользуются тысячи Ваших коллег по всему миру!

Почему изучив портировнаный тобой код у меня ощущеня будто мне слон навалил в мозг здоровенную кучу дерьма?
Мне также было очень тяжело воспринимать Ваш код,
в том числе и из-за плохого знания японского языка!

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

Нахуя эта гора классов состоящих из 5 строк кода и 30 строк копирайта?
Избыточная структуризация на такой узкой по производительности платформе как флеш,
также на мой взгляд является непозволительной расточтительностью.

Нахуя в коде закоментированы куски сишного кода?
Хочу также отметить, что противоричивые коментарии в коде, порой ставят в тупик.

Фрагмент переписки:

Hi peko,

sorry for late reply.
I don’t understand internal algorithms.
Most of codes are just rewritten from NyARToolkit. (Java ported
version of ARToolKit)…

Koyama (aka Sakoshi)

Перевод:

“Я не понимаю как это всё работает, я просто портировал код…”

… я извиняюсь за лексику поста, но это просtо какой-то пиздец…
Соглашусь, что первая версия поста была излишне эмоциональна, я поправил её!

Выводы:

из всего тулкита, реально полезны и исползуется максимум 5%,
да и эти 5% портированы с ошибками при чём в ключевых местах…

надеюсь, в скором времени, совместными усилиями мы приведём
эту несложную технологию в надлежащее состояние.

Кроме этого я хочу добавить, что я никогда не забывал, что именно благодаря Сакоши технологии AR
были популизированы и донесенны до огромных масс людей.
Что в свою очередь дало новый мощный толчок Computer Vision технологиям в целом.

Exporting animation from 3DMax to FLARToolkit

Just select all your animated objects and run this little one ; )

if selection.count > 0 then (

	output_name = getSaveFileName caption:"Animation File" types:"Animation Class (*.as)|*.as"

	if output_name != undefined then (

		output_file = createfile output_name

		for o in selection do (

			format "\rpublic static var %:Array = [" o.name to:output_file
			for t = animationrange.start to animationrange.end do (
				at time t (
					tx = formattedPrint o.pos.x format:"6.6f"
					ty = formattedPrint o.pos.y format:"6.6f"
					tz = formattedPrint o.pos.z format:"6.6f"

					rx = formattedPrint (o.rotation.x * 180 / pi) format:"6.6f"
					ry = formattedPrint (o.rotation.y * 180 / pi) format:"6.6f"
					rz = formattedPrint (o.rotation.z * 180 / pi) format:"6.6f"

					sx = formattedPrint o.scale.x format:"6.3f"
					sy = formattedPrint o.scale.y format:"6.3f"
					sz = formattedPrint o.scale.z format:"6.3f"

					format "\r\t%, %, %,     %, %, %,     %, %, %" tx ty tz rx ry rz sx sy sz to:output_file
					if t != animationrange.end then format "," to:output_file
				)
			)

			format "\r];" to:output_file
		)

		close output_file
		edit output_name

	)

)

Презентация по Augmented Reality для RIW 2009


IMG_5712-2

IMG_5724-2

RIW 2009

Презентация