Лепихов Ю.Н., Лялин В.Е. АНАЛИЗ ПРОСТРАНСТВЕННОЙ СТРУКТУРЫ ГРАФИЧЕСКИХ ИЗОБРАЖЕНИЙ НА ДИСКРЕТНОМ РАСТРЕ
В статье показана взаимосвязь корректных операторов редукции с простым и дифференциальным цепными кодами линейных структурных элементов графического изображения. Также рассматриваются секторные цепные коды, повышающие эффективность кодирования линейных структурных элементов и позволяющие решить задачу анализа пространственной структуры графических изображений на дискретном растре.
На интуитивном уровне оператор редукции линейных структурных элементов и границ планарных элементов представляется достаточно простым образом - при прохождении линий через ячейку растра для каждой точки линии в этой ячейке используется оператор точечной редукции (1)• Таким образом, нали-
чие линий в ячейке выделяет соответствующий пиксел растра, а вся линия представляется связной совокуп-
Рис.1. Линейная редукция на основе точечной
Рис.2. Линейная редукция (1-й алгоритм Брезенхама)
Однако, как видно из рис.1, формируемый дискретизированный отрезок прямой линии имеет нерегулярный угловатый вид и визуально воспринимается как ломаная линия. Причина этого в том, что выделяются пикселы, в ячейках которых могут присутствовать слишком малые участки линии; при этом преобладают вертикальные и горизонтальные переходы на растре, которые и придают линии угловатый вид. Если исключить эти переходы (в этом случае связность обеспечивается за счет диагональных переходов на растре), то визуальный вид линии приобретает гораздо большее сходство с отрезком прямой.
Идея такого построения реализована в алгоритмах Брезенхама [2], в которых используются только целочисленные вычисления за счет многократного масштабирования фрагмента растра, а также ведется подсчет и минимизация инкремента (невязки) текущей точки линии относительно узлов растра. В зависимости от способа подсчета инкремента различаются два алгоритма Брезенхама. Первый алгоритм учитывает инкремент таким же способом, как и оператор точечной редукции К.(лг,у} = ([^]5[І^]) С1) , как показано на рис. 2.
При этом возникает эффект, аналогичный искажениям при использовании оператора точечной редукции (1).
Как видно из рисунка для линейных элементов эффект искажения линий проявляется в несовпадении дискретных представлений отрезков прямых, прорисовываемых в прямом и обратном направлениях. Естественно, что более приемлемым вариантом подсчета инкремента является схема, соответствующая оператору точечной редукции = ([.Ї + 0.5^п(.ї)], [у + 0.5^п(.1~)]) (3), результат воздействия которого показан
на рис.3.
Рис.3. Линейная редукция (2-й алгоритм Брезенхама)
а) двунаправленная
Рис.4. Индексация секторов направлений
Здесь прорисовка отрезка в прямом и обратном направлениях дает идентичные результаты и формируемое дискретное представление отрезка симметрично относительно его центра. Однако, также как и при использовании оператора точечной редукции (3), могут возникнуть искажения в области начала координат. Это обусловлено тем, что формирование связной цепочки пикселов реализуется по восьми координатным секторам, ограничиваемым координатными осями и биссектрисами (диагоналями) квадрантных углов (см. рис.4а) и для каждого сектора эта цепочка представляет собой последовательность диагональных и осевых переходов с идентичным порядком их чередования.
На рис.5 показаны (сплошной линией) такие переходы для прямой линии, являющейся продолжением отрезка с начальной точкой в начале координат и конечной точкой с координатами (2,1). Из рисунка видно, что в окрестности начала координат наблюдается заметное искажение линии. Устранить указанное искажение можно, если перейти к однонаправленной системе секторов, как показано на рис.4б. В этом случае любой отрезок отрисовывается таким образом, что-либо его начальная точка имеет значение ординаты меньшее значения ординаты конечной точки, либо, если эти значения координат равны, начальная точка имеет значение абсциссы, меньшее значения абсциссы конечной точки.
При этом результат действия такого линейного оператора редукции сводится к инверсии начальной и конечной точек отрезка, если они не удовлетворяют указанным выше условиям, и становится эквивалентным действию точечного оператора редукции (1) • Видоизменение дискретного представле-
ния отрезка показана на рис.5 в виде дополнительных окрашенных в более светлый тон пикселов и заштрихованного удаляемого пиксела.
Pис.5. Линейная редукция в области начала координат (2-й алгоритм Брезенхама)
Последняя модификация алгоритма Брезенхама легко обобщается на оператор линейной редукции произвольной кривой на дискретный растр так, как показано на рис.б. При этом необходимо сегментировать кривую на участки, для которых текущие направления целиком находится внутри одного из координатных секторов направлений (рис.ба). Если некоторые сегменты кривой не удовлетворяют указанным выше условиям, то осуществляется их инверсия (на рисунке отмечена звездочкой). При этом формируется однонаправленная сегментация кривой по секторам направлений (рис.бб) и в каждом секторе общее количество осевых и диагональных переходов определяется размером сегмента по направлению соответствующей оси.
а) двунаправленная
Рис.6. Сегментация кривой по секторам направлений (* - инверсия направления)
Линейные операторы редукции на дискретный растр самым непосредственным образом связаны с цепными кодами. Простой цепной код впервые предложил Фримен [3, 4]. Идея простого цепного кода за-
ключается в том, что для любой связной линии на растре кодируютсякоординаты начального пиксела, а для каждого последующего пиксела цепочки в качестве кода используется его приращение, определяющее переход на один из смежных пикселов (рис.7а). Поскольку таких смежных пикселов всего 8, то для кодирования каждого пиксела необходимо 3 бита информации.
Таким образом, оценка информационной емкости линий на растре - 3 бита на элемент, без учета служебной информации (координат начальной точки и количества пикселов в цепочке, либо признака окончания цепочки). Так для линии на рис.5 простой цепной код будет представлять собой последовательность вида 02020102020- всего 33 бита. К недостаткам простого цепного кода можно отнести допустимость возвратных переходов и переходов второго порядка в смежные пикселы, что приводит к эффекту образования пятен на линиях.
* 'УК
* Н
5 6 7
а) цепной код
1 0
2
б) дифференциальный цепной код Рис.7. Цепные коды
Более гибкая схема предусматривается дифференциальным цепным кодом (ДЦК) [1], в котором кодируются координаты начального пиксела, следующий пиксел кодируется простым цепным кодом, а для всех последующих пикселов кодируются не приращения, а изменения направления переходов на растре (см. рис.7б). Если в этой схеме исключить возвратные переходы и переходы второго порядка в смежные пикселы, а также ортогональные переходы (точки, соответствующие таким пикселам являются особыми концевыми узлами линейных сегментов типа «излом», которые сегментируют линии на отдельные гладкие сегменты), то для кодирования каждого пиксела необходимо три состояния (1.5 бита на элемент, 12 бит для линий на рис.5).
Рис.8. Окружности различного радиуса на растре
При рассмотрении ДЦК важным является вопрос о возможной максимальной кривизне таких структурных элементов изображения, как дуги и линейные сегменты переменной кривизны (ЛСПК) . С учетом высказанного замечания о недопустимости в корректно построенных ДЦК ортогональных и возвратных переходов возникает вопрос о кривых с максимальной кривизной на растре. Рассмотрение окружностей различного радиуса на растре позволяет сделать следующие выводы (см. рис.8):
- для окружностей чрезмерно малого радиуса (первые две окружности на рис.8) переходы в цепном коде
являются ортогональными, что не допускает возможность использования корректно построенных ДЦК; одна-
ко, такие структурные образования визуально не воспринимаются как окружности, и, по сути, ничем не отличаются от квадратов минимального размера;
- для окружностей минимального радиуса (третья и четвертая окружности на рис.8) переходы в цепном коде уже не являются ортогональными, что делает возможным использование корректно построенных ДЦК; при этом, такие структурные образования визуально воспринимаются как окружности и по всем своим характеристикам ничем не отличаются от них;
- для окружностей радиуса, большего, чем минимальный радиус (пятая и последующие окружности на
рис.8), их описание полностью соответствует корректно построенным ДЦК.
Таким образом, представление обладающих кривизной линейных структурных элементов графических изображений на растре, таких как дуги и ЛСПК, полностью отвечает условиям корректности ДЦК, используемых для их описания.
г
Если сопоставить дифференциальный цепной код с теми цепочками пикселов, которые формируются в результате применения линейных операторов редукции Брезенхама, то нетрудно заметить, что для этих операторов возможны только два типа переходов (диагональные и осевые) в каждом из координатных секторов направлений (рис.4а). В этом случае, имеем двунаправленный секторный цепной код (ДСЦК) и для каждого гладкого односекторного сегмента произвольной линии служебной информацией являются только код сектора (3 бита) и координаты начальной точки сегмента (возможно, с учетом инверсии). Таким образом, может быть получена оценка информационной емкости линий на растре - несколько больше, чем 1 бит на элемент.
Таблица 1 Сравнение различных цепных кодов
Вид кода Код Емкость (b)
Цепной код 1(001) 1(001) 1(03*^ о(00о) 1(001) х(1б)у(1б) 50
ДЦК 1(01) 0(00) / 0(/4) 1(001) у / 2(10) х(1б)у(1б) 47
ДСЦК 0 x(16),y(16),1(000) 42
ОСЦК 0 x(16),y(16),1(00) 41
В качестве другого варианта кодирования при использовании однонаправленной индексации секторов направлений (рис.4б) может быть выбран однонаправленный секторный цепной код (ОСЦК). В этом случае код обеспечивает корректность линейного оператора редукции и сокращение длины кода служебной информации (номер сектора) на 1 бит.
Сопоставление различных видов цепных кодов линии, показанной на рис.3 дает следующие результаты:
- простой цепной код - 1011101 - всего 21 бит;
- дифференциальный цепной код - (1)з210021 - всего 12 бит;
- двунаправленный секторный цепной код - (1)з1011101 - всего 10 бит;
- однонаправленный секторный цепной код - (1)21011101 - всего 9 бит.
Результаты сравнения различных разновидностей цепных кодов с учетом служебной информации для линейного сегмента, показанного на рис.3, приведены в табл.1. В таблице показаны коды каждого из переходов на растре, а служебная информация помещена в указании кодов начальных точек линейного сегмента. Для простого цепного кода используется 3 бита на один переход на растре, для дифференциального цепного кода - 2 бита на один переход на растре, для двусекторного и односекторного цепных кодов - по 1 биту на один переход на растре.
В отличие от приведенного выше примера из таблицы наглядно видно, какую долю занимает информационная емкость кода служебной информации:
- для цепного кода - 32 бита;
- для ДЦК - 35 бит;
- для ДСЦК - 35 бит;
- для ОСЦК - 3 4 бита.
Несмотря на незначительную разницу емкости ДСЦК и ОСЦК (всего 1 бит), ОСЦК в отличие от ДСЦК обеспечивает корректный оператор редукции, поэтому его использование является предпочтительным.
Таким образом, применение корректных операторов редукции структурных элементов изображений на дискретный растр позволяет построить эффективное представление пространственной структуры изображения и, при использовании различных разновидностей цепных кодов, получить экономную схему кодирования этой структуры, что, в конечном счете, повышает эффективность передачи цифровой графической информации по каналам связи телекоммуникационных систем.
ЛИТЕРАТУРА
1. Павлидис Т. Алгоритмы машинной графики и обработки изображений. - М.: Радио и связь, 1986.
- 400с.
2. Эйнджел Э. Интерактивная компьютерная графика. - М.: Вильямс, 2001. - 592с.
3. Freeman H. On the encoding of arbitrary geometric configurations // IEEE Trans. Electron.
Comput., 1961, v. 10, № 2. - P. 260-268.
4. Freeman H. Shape description via the use of critical points // Pattern recognition, 1978,
v. 10, № 3. - P. 159-169.