Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МОЙ ДИПЛОМ.doc
Скачиваний:
140
Добавлен:
17.05.2015
Размер:
1.16 Mб
Скачать

2. Разработка и написание программы

2.1. Алгоритмы работы программы

Перед написанием программы необходимо продумать алгоритм ее работы, построить соответствующие блок-схемы (Рис.10).

Для начала необходимо загрузить изображение карты в программу. Любое изображение в MatLab представляется в виде массива с числами. После получения этого массива нам необходимо нужным образом его обработать. Топографическая карта обычно выполнена в полно цветном варианте, линии рельефа и все цифры выполнены одним цветом. Поэтому, зная цвета линий и цифр, мы можем их выделить из числа других объектов на карте, и преобразовать наше растровое изображение в логический формат, то есть в новую матрицу. Эта матрица будет представлять собой значения только 1 и 0 – там, где находиться линия или число – 1, а там, где остальные объекты 0.

Картинку вставить

Далее очистим новую матрицу от шумов. Это необходимо сделать, так как до преобразования на ней было множество посторонних элементов, ненужных нам, и которые могли остаться на карте.

Далее, из этой новой матрицы, с помощью специальных функций MatLab, мы определим все отдельные объекты и пронумеруем их. Затем выделим из всех найденных объектов линии по их свойствам (например, малая площадь самого объекта в области этого объекта). И если вычесть получившуюся матрицу линий из нашей первоначальной матрицы – получим матрицу цифр.

Распознаем каждую цифру по ее особенным свойствам (например, число Эйлера, эксцентриситет, центр масс и так далее), а затем соединим все полученные цифры в числа, составим новую матрицу чисел.

Следующим шагом, необходимо сопоставить все полученные нами данные – линии и числа, и также сформировать новую матрицу Z. Эта матрица будет содержать все высоты на карте.

По полученной матрице можно будет построить 3-D модель.

Рис. 10. Блок-схема работы программы

2.2. Обработка изображения

Для начала нам потребуется загрузить карту в MatLab для дальнейшей работы с ней. Для этого используем функцию imread.

f=imread('топографическая карта 1.jpg');

Теперь наша карта представлена с помощью массива f, в каждой ячейке которого указана интенсивность каждого пикселя. Топографические карты выполняются в цветном варианте, но рельеф и цифры изображаются черным цветом. Компьютеру в данном случае будет намного проще работать с черно-белым изображением, поэтому с помощью специальных функций программы переведем изображение в черно-белый вариант:

fR = f(:, : , 1);

fG = f(: , : , 2);

fB = f(:, : , 3);

gray=((fR>150)&(fG<150)&(fB<150));

Мы просто исключили красный, зеленый и синий цвета и сохранили новый массив. Далее с помощью функции size мы определяем размер изображения, который нам пригодиться в будущем. И найдем отдельные объекты на изображении используя специальную функцию bwlabel и найдем свойства этих объектов с помощью regionprops, то есть площадь Area и область объекта BoundingBox. только второй раз через пару страниц

[Ny,Nx]=size(gray);

[labeled,num] = bwlabel(gray,8);

stats = regionprops(labeled, 'Area','BoundingBox');

Очистим изображение от шума. Если есть в нашем изображении отдельные пиксели, вокруг которых нет других элементов, то он их удалит. И сохраним новый массив без шумов.

for i=1:num

if stats(i).Area<15

for xx=min(ceil(stats(i).BoundingBox(1)),Nx):min(ceil(stats(i).BoundingBox(1)+stats(i).BoundingBox(3)-1),Nx)

for yy=min(ceil(stats(i).BoundingBox(2)),Ny):min(ceil(stats(i).BoundingBox(2)+stats(i).BoundingBox(4)-1),Ny)

if labeled(yy,xx)==i

gray(yy,xx)=0;

end

end

end

end

end

grayN=gray;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]