Традиционно ...
Рассмотрим ...
Измерялись ...
Изображение, представляемое средствами HTML5 CAnvas, является растровым изображением (не векторным). Элементарная неделимая точка растра (пэл) - пиксел. Пиксел - это квадрат, длина стороны которого зависит от разрешения экрана используемого дисплея.
...
Используем градиентный метод поиска границы контура изображения [Гонсалес].
Идея алгоритма в следующем. Совершается обход изображения и находится вектор градиента (пространственная производная), равный (dG/dx,dG/dy), где G - степень яркости, для каждой его точки. Дело в том, что чем больше перепад яркости, тем больше будет вектор градиента, и, анализируя его величину, мы можем судить о том, принадлежит ли точка фону или объекту на нем. Чтобы увеличить точность определения границ необходимо ввести порог. Если градиент в данной точке меньше величины порога, то значение точки обнуляется, если больше, приравнивается 1. После завершения работы алгоритма мы получим набор точек из 0 и 1, где 1 будет соответствовать границе контура.
Вот написанный мною код, реализующий (худо-бедно) этот алгоритм:
void scan(void) { int i,j; for (i=1;iСдесь h и v - размеры изображения по вертикали и горизонтали, ф-ии color_read и color_write понятны из названия. if (gradient[i][j]>10) - 10 здесь является порогом, однако для его нахождения лучше применить конкретный алгоритм, коих много.10) color_write(i,j,RGB(0,0,0)); else color_write(i,j,RGB(255,255,255)); } return; }
Определение длины контура связано с необходимостью преодоления следующих проблем.
Определение длины вертикальных или горизонтальных линий в растре проводится подсчетом числа ячеек, через которые линия проходит, и умножением его на размер одной ячейки (разрешение) растра. Если линия занимает 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 - площадь в растровом формате.
В результате выполненной работы ...