В таблице 4.1 представлены условные обозначения, введенные в тексте подраздела
Таблица 4.1
Условные обозначения
Условные обозначения | Расшифровка |
lnum | порядковый номер обрабатываемого сегмента |
lineno | идентификатор обрабатываемого сегмента в массиве сегментов |
M | ширина изображения |
N | высота изображения |
AnalyzeNode | алгоритм поиска узлов, формирующий значения элементов массива узлов |
AnalyzeSeg | алгоритм поиска сегментов линий, формирующий значения элементов массива сегментов |
apix[M][N] | массив точек исходного изображения |
apix1[M][N] | массив сегментов |
NeigCount | функция вычисления количества соседних точек |
GetLineVect(x,y,n) | рекурсивная функция обработки точек сегмента и кодирования его координат, x,y – координаты начала обработки сегмента, n – номер сегмента |
Описание программы «Обработка и кодирование сегментов»
Вводная часть
Программа «Обработка и кодирование сегментов», обозначаемая как SegCode, предназначена для обработки исходного изображения с целью формирования кодов сегментов линий, образующих данное графическое изображение, основываясь на поиске сегментов линий и узлов их пересечения.
|
|
Функциональное назначение
Программа SegCode, предназначена для формирования кодов сегментов линий, содержащих координаты необходимых точек в зависимости от типа кодируемого сегмента. В процессе работы с программой осуществляется формирование массивов узлов и сегментов, на основании значений которых формируется код определенного сегмента. При этом учитываются типы узлов, а также типы кодируемых сегментов. Полученные результаты обработки могут быть выведены как на экран, так и в файл, и могут быть обработаны в других подсистемах.
Описание информации
Программа SegCode в качестве входной информации использует следующие данные:
- массив точек исходного изображения;
- массив узлов, содержащий описания узловых точек: их области, центры и их уникальную нумерацию для однозначной идентификации;
- массив сегментов, содержащий описания сегментов линий: точки, принадлежащие линии, координаты их пересечения и присвоенные номера для однозначной идентификации.
На выходе программа формирует координаты сегментов с указанием типа сегмента.
Формат описания сегментов линий:
n1:x11,y11 [,x12,y12 [,x13,y13]]
n2:x21,y21 [,x22,y22 [,x23,y23]]
nk:xk1,yk1 [,xk2,yk2 [,xk3,yk3]]
где ni – номер i-го сегмента линии (идентификатор);
xi1,yi1 – координаты первой точки i-го сегмента линии;
xi2,yi2 – координаты второй точки i-го сегмента линии, указываются в том случае, если точка (xi2,yi2)является узлом;
xi3,yi3 – координаты направления кодирования от точки (xi1,yi1), указываются в том случае, если точки (xi1,yi1) и (xi2,yi2) являются узлами.
|
|
Используемые подпрограммы
В процессе обработки изображение программа использует следующие подпрограммы:
- actExitExecute – обработка запроса завершения работы программы;
- FormCreate – создание формы обработки изображения;
- actZoomInExecute – режим увеличения изображения;
- actZoomOutExecute - режим уменьшения изображения;
- actOpenFileExecute – открытие файла для обработки;
- actSaveFileExecute – сохранение файла;
- Image2MouseMove – обработка события движения указателя мыши при наведении на элементы изображения;
- Image2MouseDown – обработка события нажатия кнопки мыши при редаутировании изображения;
- actZoom1Execute - режим установки масштаба изображения 100%;
- actAnalyzeExecute – вызов основной функции обработки изображения;
- FormCanResize – изменение размера окна;
- actNewFileExecute – создание нового файла для обработки;
- actGridCheckExecute – изменение режима просмотра сетки;
- actLightCheckExecute - изменение режима подсветки структурных элементов изображения;
- actZoom10Execute – режим установки 10-кратного увеличения изображения;
- actSegLightCheckExecute - изменение режима подсветки сегментов линий;
- actLockViewExecute – изменение режима блокировки изображения;
- actAnalyzeNodeExecute – обработка узлов изображения;
- actAnalyzeSegExecute – обработка сегментов изображения;
- FormCloseQuery – обработка запроса на закрытие окна;
- actOpenArrayExecute – открытие изображения из файла массива точек;
- actSaveArrayExecute – сохранение изображения в файл массива точек;
- actOptionsExecute – вызов окна настройки;
- actSaveCodeExecute – запись результата обработки изображения в файл;
- actSegCodeOutExecute – выполнение алгоритма формирования координат сегментов;
- ZoomTo –установка заданного масштаба изображения;
- DrawGrid – рисование сетки изображения;
- ShowInfo – отображение информации о текущем состоянии;
- NeigCount – определение количества соседних точек;
- VectMove – осуществление движения координат обработки изобржаения в заданном направлении;
- wlog – вывод информации в журнал вычислений;
- VectToStr – преобразование кода вектора направления в строку;
- ValidateView – обработка свойств доступности элементов панели управления;
- plDistance(x, y, x1, y1, x2, y2) – вычисление расстояние (минимального) от точки (x,y) до прямой, заданной точками (x1,y1) и (x2,y2)
StrToLen – выравнивание строки для образования формата определенной длины;
- NeigNode – рекурсивная обработка соседей точки на принадлежность узлу
- NeigLine – рекурсивная обраобтка соседей точки (x,y) на принадлежность сегменту
- GetLineVect – рекурсивная обработка кода сегмента линии;
- NodeCentre - вычисление значения центра узла;
- FillLine изменение принадлежности точек одного сегмента другому;
- CodeLine – формирование кода сегмента линии.
Описание логики
Схема программы SegCode представлена на рис. 4.1. Здесь представлено текстовое описание схемы программы:
1. Начало;
2. Инициализация массивов и переменных;
3. Если поиск узлов выполнен, то переход к п.5, иначе к п.4;
4. AnalyzeNode, переход к п.3;
5. Если поиск сегментов выполнен, то переход к п.7, иначе к п.6;
6. AnalyzeSeg, переход к п.5;
7. i=0; j=0; lnum=0; lineno=0;
8. Если j>=N, то переход к п.15;
9. Если i>=M, то переход к п.14;
10. Если (apix[i][j]=1)и(apix1[i][j]<0)и((NeigCount(i,j)=1)или(NeigCount(i,j)=2)), то переход к п.11, иначе к п.13;
11. lnum=lnum+1; lineno=lineno+1;
12. GetLineVect(i,j,lineno);
13. i=i+1; переход к п.9;
14. i=0; j=j+1; переход к п.8;
15. Конец.