Описание методов и алгоритмов

Содержание

  1. Постановка задачи.
  2. Исходные измерения морфометрических характеристик.
  3. Морфометрические характеристики, измеряемые по изображениям-проекциям.
  4. Вычисляемые для анализа морфометрические характеристики (геометрические признаки).
  5. Реализация рассмотренных алгоритмов средствами Web.


Введение

Традиционно ...

1. Постановка задачи

Рассмотрим ...

2. Исходные измерения морфометрических характеристик реально существующего объекта

Измерялись ...

3. Морфометрические характеристики, определяемые по изображениям-проекциям объекта

3.1 Характеристики, определяемые по растровым canvas-изображениям

Изображение, представляемое средствами HTML5 CAnvas, является растровым изображением (не векторным). Элементарная неделимая точка растра (пэл) - пиксел. Пиксел - это квадрат, длина стороны которого зависит от разрешения экрана используемого дисплея.

3.2 Определение площади изображения

...

3.2 Определение длины внешнего контура (периметра) изображения

Используем градиентный метод поиска границы контура изображения [Гонсалес].

Идея алгоритма в следующем. Совершается обход изображения и находится вектор градиента (пространственная производная), равный (dG/dx,dG/dy), где G - степень яркости, для каждой его точки. Дело в том, что чем больше перепад яркости, тем больше будет вектор градиента, и, анализируя его величину, мы можем судить о том, принадлежит ли точка фону или объекту на нем. Чтобы увеличить точность определения границ необходимо ввести порог. Если градиент в данной точке меньше величины порога, то значение точки обнуляется, если больше, приравнивается 1. После завершения работы алгоритма мы получим набор точек из 0 и 1, где 1 будет соответствовать границе контура.

Вот написанный мною код, реализующий (худо-бедно) этот алгоритм:

void scan(void)
{ int i,j;
for (i=1;i10) color_write(i,j,RGB(0,0,0));
else color_write(i,j,RGB(255,255,255));
}
return;
}

Сдесь h и v - размеры изображения по вертикали и горизонтали, ф-ии color_read и color_write понятны из названия. if (gradient[i][j]>10) - 10 здесь является порогом, однако для его нахождения лучше применить конкретный алгоритм, коих много.

Определение длины контура связано с необходимостью преодоления следующих проблем.

Определение длины вертикальных или горизонтальных линий в растре проводится подсчетом числа ячеек, через которые линия проходит, и умножением его на размер одной ячейки (разрешение) растра. Если линия занимает 15 ячеек по вертикали при разрешении растра 50 метров, то ее общая длина составит 15 х 50 = 750 метров. Аналогично - для горизонтали.

Но если линия ориентирована не точно по горизонтали или вертикали, наш метод не будет точным. Например, если линия проходит точно по диагоналям ячеек, то ее длина будет очевидно больше (в данном случае в р. (примерно 1.414) раз), чем произведение разрешения на число ячеек. То есть, для таких линий нужно использовать разрешение растра, умноженное на ^2. Тем не менее, оказывается, что многие простые растровые системы только лишь подсчитывают число ячеек растра и используют это число в качестве длины, оставляя за пользователем вычисление реальной длины. Более совершенные системы используют простую тригонометрию для определения реальной длины линии, имеющей произвольную ориентацию [Environmental Systems Research Institute, 1993].

Более сложная проблема возникает, когда мы имеем дело с извилистой (sinuous) линией, проходящей случайным образом по растру. Если для ее кодирования используется метод присутствия/отсутствия, то вполне вероятно, что такая линия будет выглядеть как некоторое число пар, троек или больших групп ячеек растра, представляющих непрямые части линии. В таком случае может оказаться достаточным простой подсчет числа ячеек, через которые проходит линия, так как точное ее расположение внутри ячеек все равно неизвестно. На самом деле, способность ГИС выполнять тригонометрические операции при подсчете длины представляет небольшую ценность в подобных случаях, так как линейные объекты не так хорошо представляются ячейками растра, которые так или иначе дискретизируют непрерывное пространство. Иначе говоря, точное положение линейного объекта не известно для любой ячейки растра.

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

Вычисляемые для анализа морфометрические характеристики

Среди используемых для анализа морфометрических характеристик выделяют геометрические, статистические и аналитические (ортогональные составляющие, векторного иконтурного анализов и проч.). Здесь идёт речь только лишь о геометрических характеристиках.

Можно перечислить следующие геометрические характеристики, используемые в морфологическом анализе ...

По этой причине основным методом измерения формы является сравнение ее с кругом. В связи с использованием круга как сравнительной фигуры, мы можем говорить, что эта мера является также и мерой выпуклости или вогнутости (convexity or concavity) полигона. Крут является наиболее выпуклой фигурой, вот почему мы используем его для измерения формы других объектов. Как известно, все другие геометрические фигуры имеют большую длину периметра при том же значении площади. Сравнение имеющегося многоугольника с крутом, по сути, - то же, что рассмотрение величины выпуклости этого полигона по сравнению с выпуклостью круга. Общая формула выпуклости в векторных ГИС такова:
CI = k Р/А,
где: CI - индекс выпуклости, к - некоторая константа, Р - периметр, А -площадь.

Здесь мы имеем отношение периметра к площади, умноженное на некоторую константу. Эта константа определяется размером круга, описанного вокруг многоугольника, так что индекс принимает значения в диапазоне 1...99, причем большее значение соответствуют большему сходству с кругом, а 100 получается, если мы возьмем идеальный круг.

В растре формула основана на той же идее, но здесь площадь определяется как количество клеток, а квадратный корень из нее используется для получения того же диапазона 1...99 значений сходства. При этом надо помнить, что в растре мы физически не можем иметь идеальный круг. Формула определения выпуклости в растре такова:
CI = P/^N
где: CI - индекс выпуклости, Р - периметр, N - площадь в растровом формате.

Заключение

В результате выполненной работы ...

Использованные источники

Про HTML5 Canvas

  1. Canvas : начало, в том числе про прозрачность (png-альфа) (мне - пробовать): http://codestorage.ru/vvedenie-v-canvas-2d-api/
  2. Canvas :сводка методов и свойств: http://webonrails.ru/articles/html5/189/
  3. Canvas : выводим текст: http://habrahabr.ru/post/140235/
  4. Canvas : обзор с примерамиhttp://www.pixelcom.crimea.ua/rukovodstvo-po-html5-canvas.html
  5. Canvas : работа с пикселями изображений: http://prootime.ru/html5-canvas-effects
  6. Canvas : работа с пикселями изображений + библиотеки визуализации: http://blogs.msdn.com/b/kichinsky/archive/2011/05/23/html5-canvas-svg.aspx
  7. Canvas : работа с пикселями изображений - перевод в градации серого: http://2web-master.ru/izobrazhenie-v-gradaciyax-serogo-na-html5.html

Ссылки по работе с изображениями на экранах различного разрешения

  1. Определяем размер изображения:http://www.pixelcom.crimea.ua/razmery-izobrazheniya-v-javascript.html
  2. Типы мониторов с различным разрешением:http://ru.wikipedia.org/wiki/Разрешение_(компьютерная_графика)
  3. Обработка фотографий для экрана:http://www.smart-alien.ru/raznoe/kurs/obrabotka/obr_ekrn/obr_ekran.htm
  4. Расчёт разрешения в ppi (англ. pixels per inch):http://ru.wikipedia.org/wiki/Ppi
  5. Определение разрешения в ppi:http://hashcode.ru/questions/134456/html-верстка-с-учетом-ppi-устройств-как-определять-каков-подход
  6. Переменная плотность пикселей:http://www.pixelcom.crimea.ua/peremennaya-plotnost-pikselej.html

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

  1. ВИКИ-ресурс "Техническое зрение":http://wiki.technicalvision.ru/index.php/Заглавная_страница
  2. Выделение и опсание связных областей (в том числе геометрические признаки, морфологические ...):http://wiki.technicalvision.ru/index.php/Выделение_и_описание_областей
  3. Алгоритмы в виде PDF-презентации. На стр.90-91 коды С-программ алгоритмов морфологического расширения и сужения:http://courses.graphicon.ru/files/courses/vision/2010/cv_2010_02.pdf http://courses.graphicon.ru/files/courses/vision/2010/cv_2010_02.pdf
  4. OpenCV - шаг за шагом. Хорошо (кратко, доступно) описаны определения:http://robocraft.ru/page/opencv/
  5. В.М. Рябенький, А.В. Головко, В.Р. Ягьяев. Выделение силуэта человека на цветном цифровом изображении:http://www.nbuv.gov.ua/portal/natural/pit/2009_2/Ryaben.htm

К вычислению периметра фигуры неправильной формы

  1. Алгоритмы выделения контуров изображений:http://habrahabr.ru/post/114452/
  2. Алгоритмы построения минимальных выпуклых оболочек (математику см.Кормен подраздел 33.3, с.1063):http://habrahabr.ru/post/144921/
  3. Программы построения выпуклых оболочек:http://algolist.manual.ru/maths/geom/convhull/
  4. Алгоритмы выделения контуров изображений:http://habrahabr.ru/post/114452/#habracut
  5. Источники по распознаванию по шаблону и по контуру:http://geekproit.blogspot.com/2010/10/blog-post.html
  6. Контурный анализ:http://habrahabr.ru/post/118486/
  7. Быстрая маркировка изображений с использованием внешних контуров:http://habrahabr.ru/post/119461/