Реферат: Алгоритмы выделения контуров

Рис. 4. Ситуации.

Обрабатываемые строки представлены в виде массивов структур, куда входит координата Х начала/конца черной серии и адрес буфера, предназначенного для сбора и хранения информации по одной ветке (части контура), которая пересекает обрабатываемую строку. В буфере содержатся тип ветки (левая или правая в зависимости от расположе­ния черной серии связной компоненты), ее внутренний номер, пара­метры отслеженной части контура (длина, площадь, габариты) и ее координатное описание, адрес буфера парной ветки, которая является частью того же контура и некоторые другие параметры.

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

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

При выявлении ситуации "ветвление" точки ветвления обрабаты­ваются по аналогии с ситуацией "начало".

Ситуация "слияние" возникает тогда, когда закончено отслежи­вание внутреннего контура, и когда объединяются ветки одного контура. В первом случае происходит объединение информации обеих веток и запись в выходную структуру. Во втором случае ветка с меньшим номером "поглощает" ветку с большим номером и ее пару. Объединенная информация сохраняется в буфере ветки с меньшим номером, а в текущей строке адрес буфера парной ветки меняется на адрес буфера оставшейся ветки. В обоих случаях буферы

"поглощенной" пары освобождаются.

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

Рис. 6. Результат работы сканирующего алгоритма выделения контуров.

В листинге 4 представлен модуль, содержащий в себе функции выделения контуров объектов.

Листинг 2. Главный модуль программы:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

USERES("Graphics.res");

USEFORM("MainUnit.cpp", Form1);

USEUNIT("GraphicUnit.cpp");

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->CreateForm(__classid(TForm1), &Form1);

Application->Run();

}

catch (Exception &exception)

{

К-во Просмотров: 633
Бесплатно скачать Реферат: Алгоритмы выделения контуров