Назначение и характеристика алгоритма
Алгоритм описывает метод вычисления координат кольцевого фильтра. Математическое описание алгоритма приведено в подразделе 2.1.4.
Используемая информация
В алгоритме используются значения внешнего и внутреннего радиуса кольца.
Результаты решения
В результате реализации алгоритма формируется массив координат точек кольцевого фильтра. При этом центр координат совпадает с центром фильтра.
Алгоритм решения
1. i=-MASK_SIZE;
2. j=MASK_SIZE;
3. s=sqrt(i*i+j*j);
4. Если ((s<=outsideR)&&(s>=insideR)), то к.п.5, иначе переход к п.7
5. FltArr[FltArr_index].x=i;
6. FltArr[FltArr_index++].y=j;
7. j--;
8. Если j>=-MASK_SIZE, то переход к п.3
9. i++;
10. Если i<=MASK_SIZE, то переход к п.2
11. Конец
Список условных обозначений
Условные обозначения, используемые в описании алгоритма, приведены в табл. 2.1.
Таблица 2.1
Список условных обозначений
Обозначение | Расшифровка |
MASK_SIZE | Радиус максимального фильтра в пикселях |
i, j | Координаты текущего пиксела |
FltArr | Массив координат |
FltArr_index | Индекс текущего элемента в массиве FltArr |
s | Расстояние от центра фильтра до текущего пиксела |
Описание алгоритма вычисления центра масс
Назначение и характеристика алгоритма
Алгоритм описывает процесс вычисления центра масс относительно центра фильтра. Математическое описание алгоритма приведено в подразделе 2.1.4. В результате решения алгоритма вычисляются координаты центра масс.
Алгоритм решения
1. M=0,Wx=0,Wy=0;
2. Cx=0,Cy=0; k=0;
3. Если (k>=FltArr_index), то переход к п.8
4. M=M+ImArr[CF.x+FltArr[k].x][CF.y+FltArr[k].y:
5. Wx=Wx+
+(CF.x+FltArr[k].x)*ImArr[CF.x+FltArr[k].x][CF.y+FltArr[k].y];
6. Wy=Wy+
+(CF.y+FltArr[k].y)*ImArr[CF.x+FltArr[k].x][CF.y+FltArr[k].y];
7. k++; переход к п.3
8. M=M/255;
9. Wx=Wx/255;
10. Wy=Wy/255;
11. Если (M==0), то переход к п.14
12. Cx=Wx/M;
13. Cy=Wy/M;
14. Конец
Список условных обозначений
Условные обозначения, используемые в описании алгоритма, приведены в табл. 2.2.
Таблица 2.2
Список условных обозначений
Обозначение | Расшифровка |
M | Общая масса пикселей попавших в фильтр |
Wx, Wy | Вес пикселей по осям Ox и Oy соответственно. |
FltArr_index | Количество точек фильтра |
k | Порядковый номер точки фильтра |
FltArr | Массив координат точек фильтра |
ImArr | Массив исходного изображения |
CF | Точка, относительно которой вычисляется центр масс |
Cx, Cy | Координаты центра масс |
Описание алгоритма вычисления кривизны
Назначение и характеристика алгоритма
Алгоритм описывает вычисления кривизны линий на изображении с использованием локального метода. В алгоритме используются кольцевой фильтр. В результате решения алгоритма вычисляется кривизна в центре фильтра, находящегося на исследуемой линии.
Алгоритм решения
1. Если (CF.mass==0), то к п.2, иначе переход к п.3
2. С= 140; переход к п.6
3. P=CentrMass(CF);
4. h=sqrt((P.x-CF.x)^2 + (P.y-CF.y)^2);
5. C=(h / insideR^2+0.005)*100;
6. Конец;
Список условных обозначений
Условные обозначения, используемые в описании алгоритма, приведены в табл. 2.3.
Таблица 2.3
Список условных обозначений
Обозначение | Расшифровка |
CF | Центр фильтра (поле mass – масса пиксела, x,y – соответственно, координаты) |
С | Кривизна |
CentrMass | Функция, вычисляющая центр масс |
P | Центр масс |
h | Смещение центра масс от центра фильтра |
insideR | Внутренний радиус кольца |
sqrt | Функция, вычисляющая корень квадратный |
^ | Операция возведения в степень |
Описание алгоритма обработки изображения
Назначение и характеристика алгоритма
Алгоритм описывает обработку изображения кольцевым фильтром. В алгоритме используются кольцевой фильтр. В результате решения алгоритма выполняется прохождение фильтра по изображению и сохранение результата в файл.
Алгоритм решения
1. Name = FormNewFileName(OpenDialog1->FileName);
2. outIm=fopen(Name,"wb");
3. fwrite(&Width,sizeof(Width),1, outIm);
4. fwrite(&Height,sizeof(Height),1, outIm);
5. RingFiltrPoint(insideR,outsideR);
6. i=outsideR;
7. j=outsideR;
8. CrArr[i][j]=CentroidRelax(i,j,insideR,outsideR);
9. j++;
10. Если j<Height-outsideR, то переход к п. 8
11. i++;
12. Если i< Width-outsideR, то переход к п. 7
13. i=0;
14. j=0;
15. fwrite(&CrArr[i][j],sizeof(CrArr[i][j]),1, outIm);
16. j++;
17. Если j<Height, то переход к п. 15
18. i++;
19. Если i<Width, то переход к п. 14
20. fclose(outIm);
21. Конец;
Список условных обозначений
Условные обозначения, используемые в описании алгоритма, приведены в табл. 2.4.
Таблица 2.4
Список условных обозначений
Обозначение | Расшифровка |
outIm | Выходной файловый поток |
Name | Имя выходного файла |
FormNewFileName | Функция, формирующая новое имя выходного файла |
OpenDialog1-> FileName | Имя файла, открытого с помощью диалога “Открыть” |
fopen | Функция открытия файла |
outsideR | Внешний радиус кольца |
insideR | Внутренний радиус кольца |
RingFiltrPoint | Функция вычисления точек фильтра |
Обозначение | Расшифровка |
CrArr | Массив кривизны линий |
CentroidRelax | Функция вычисления кривизны |
fwrite | Функция записи в файл |
sizeof | Функция вычисления размера переменной |
fclose | Функция закрытия файла |
Описание программы «Центроидная релаксация»
Вводная часть
Программа «Центроидная релаксация» применяется для автоматизации процесса структурного анализа графического изображения. При этом программа использует человеко-машинный интерфейс: человек выбирает, чем оперировать и параметры обработки данных, а программа выполняет все необходимые расчеты.
Для начала работы следует загрузить файл изображения или выходной файл подсистемы центроидной фильтрации (изображение, обработанное центроидным фильтром), и задать параметры кольцевого фильтра для его обработки. После этого программа обнаруживает линии и вычисляет их кривизну. Результаты работы сохраняются в файл.
Программа имеет обозначение Relax, разработана в среде программирования Borland C++ Builder 6.0.