Сервер пятна SpotServer

advertisement
Чумаченко А.А., Воробьев В.В.
Сервер пятна SpotServer
Рабочий отчет RWR-2014-06-01.1
Москва, 2014 г.
RWR-2014-06-01.1
1
Аннотация
Программа предназначена для распознавания цветовых пятен, а именно определения
координат центра пятна, его цвета и радиуса.
Принцип работы
Программа SpotServer была написана под ОС Kubuntu при помощи Qt Creator
версии 5.0. SpotServer запускается под ROS.
Распознавание пятен сервером пятна производится с помощью библиотеки OpenCV,
которая обеспечивает работу с камерой, обработку изображения и данных поступающих с
камеры.
SpotServer является узлом ROS и он передает данные в определенном формате в
топик SpotMsg, откуда можно получить данные о центре пятна, его цвете и радиусе
другими узлами.
Входные и выходные данные
Входные данные
1. Видеопоток с камеры.
2. Файл конфигурации Spotserver_node.ini:
0 - номер камеры
640 480 - разрешение камеры
3 - количество распознаваемых цветов(Color num)
5 - минимальный радиус цветового пятна (пикс.)(Spot radius min)
60 - маскисмальный радиус цветового пятна (пикс.)(Spot radius max)
0 - флаг для програмного отключения консольного вывода(Flag output console)
3 2 1 0 - количество процедур для размывки изображения(Eval proc num)
Id цвета(color id). Каналы каждого цвета описываются отдельно друг за другом!
H: 125 (минимальное значение) 255 (максимальное значение)
S: 151 (минимальное значение) 255 (максимальное значение)
V: 0 (минимальное значение) 255 (максимальное значение)
Выходные данные:
Массив SpotArray типа Spot.
Структура Spot:
Int32 center.x; - координата центра пятна по оси Х;
Int32 center.y; - координата центра пятна по оси Y;
Int32 radius; - радиус пятна;
Int32 cColor; - номер цвета пятна.
Программа отсылает в топик массив структур Spot.
Пример работы с программой
Для работы с сервером пятна необходима ОС Kubuntu версии 12.04, установленная
библиотека компьютерной графики OpenCV версии 2.3.1 и система ROS с созданным
рабочим окружением. Инструкция по установке и настройке ROS можно найти в
DropBox'е.
RWR-2014-06-01.1
2
После создания рабочей среды ROS скопируйте в папку src проект spotserver и
каталог spot_msg.
Затем:
1. Подключаем камеру.
2. Запускаем консоль и вводим команду roscore.
3. Не закрывая (!!!) предыдущую консоль открываем новую и вводим команду rosrun
spotserver spotserver _node.
4. Открываются 3 окна Control, frmrez и hsv_and:
Control
frmrez
hsv_and
Control - окно управления
RWR-2014-06-01.1
3
В программе используются алгоритмы сглаживания изображения.
cvErode Radius - параметр указывает радиус сглаживания.
cvErode Iterations - параметр регулирует количество итерации производимых для
сглаживания.
min spot radius - параметр регулирует минимальный радиус контура для нахождения
пятна.
max spot radius - регулирует максимальный радиус контура для нахождения пятна.
ColorNum - параметр показывает цвета, которые ищет программа в окне hsv_and. В
зависимости от того какую позицию показывает параметр такой цвет и показывается окно
hsv_and
Hmin Hmax - регулирует диапазон H модели HSV для выбранного цвета.
Smin Smax - регулирует диапазон S модели HSV для выбранного цвета.
Vmin Vmax - регулирует диапазон V модели HSV для выбранного цвета.
frmrez - показывает изображение с камеры.
Показывает изображение с камеры с найденными на нем цветами (выделены голубой
окружностью).
hsv_and - показывает окно настройки цвета.
Программа переводит изображение в формат hsv а потом делит полученное
изображение на 3 канала (H, S, V), где оператор, регулируя каждый из них, выделяет
необходимые цвета.
RWR-2014-06-01.1
4
В итоге, выделенный таким образом цвет можно наблюдать в окне HSV. (Белый
цвет).
Программные функции
Пользовательские функции
1.
2.
3.
4.
5.
6.
7.
8.
void ReadConfig(char *fname) — Чтение из файла конфигурации
void error(const char *fmt, …) - Функция обработки ошибок
void WriteConfig(char *fname) — Запись в файл конфигурации
void myTrackbarH(S,V)min(max)(int pos) — Функции-обработчики ползунков для
каналов HSV.
void myTrackbarRadius (int pos) — Радиус размывания
void myTrackbarColorNum (int pos) — Перезагрузка ползунков цветов
void myTrackbarIterations(int pos) — Обработчик ползунка количества итераций
размывания
void myTrackbarSpotRadiusMin(Max)(int pos) — Функции-обработчики размера
пятна
Стандартные функции библиотеки OpenCV
1. cvCreateCameraCapture(CV_CAP_ANY) — Подключение камеры. В качестве
параметра указано подключение любой камеры, которая присоединена к
компьютеру.
2. assert(cap); - привязка камеры к переменной cap.
3. cvSetCaptureProperty(cap,
CV_CAP_PROP_FRAME_WIDTH(HEIGHT),
WIDTH(HEIGHT)); - Установка разрешения.
4. cvQueryFrame(cap) — Получение кадра с камеры.
5. cvCreateImage( cvGetSize(frmrez), IPL_DEPTH_8U, 3 ); - создание пустых
изображений.
В качестве параметров указан размер, глубина цвета (бит),
количество цветовых каналов.
6. сvNamedWindow ("Control", CV_WINDOW_AUTOSIZE) — устанавливает название окна
7. cvCreateTrackbar — создание ползунков
8. cvCreateStructuringElementEx — ядро для процедуры размывания
9. cvErode(frmrez, frmrez, Kern, erode_iterations); - функция размывания изображения
10. cvSmooth(frmrez, frmrez, CV_GAUSSIAN(CV_MEDIAN), 3, 3); - функция
сглаживания (Гаусс/медиана)
11. cvCvtColor( frmrez, hsv, CV_BGR2HSV ); - конвертирования изображения из RGB в
HSV
12. cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); - разбитие изображения на
отдельные каналы H,S и V.
13. cvInRangeS(h_plane,
cvScalar(Cols[cColor].Hmin(Vmin,Smin)),
cvScalar(Cols[cColor].Hmax(Vmax,Smax)),
h_range);
выборка
внутри
канала.(Например, если пиксель по каналу H находится между Hmin и Hmax — то
программа его отрисует)
14. cvAnd(h_range, s_range, hsv_and,0); - складывание изображений h_range и s_range в
hsv_and
15. cvShowImage("hsv_and",hsv_and); - вывод изображения
16. cvFindContours(
hsv_and,
storage,
&contours,
sizeof(CvContour),CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0)) —
поиск контуров, удовлетворяющих показателям H,S и V в hsv_and
17. cvMinEnclosingCircle - находит окружность минимальной площади, которая
содержит данный набор 2D-точек.
18. CvCircle — отрисовка круга в заданных координатах.
RWR-2014-06-01.1
5
19. cvClearMemStorage(storage); - очистка памяти с найденными контурами.
20. cvReleaseStructuringElement(&Kern); - отключения ядра для размытия изображения.
21. cvReleaseMemStorage( &storage); - удаление памяти, выделенной для хранения
найденных контуров.
22. сvReleaseImage — удаление памяти, выделенной для хранения изображений
23. cvReleaseCapture(&cap); - отключение от камеры.
24.CvDestroyAllWindows(); - удаление всех созданных окон.
Глобальные переменные
Для сохранения исходного изображения с камеры
IplImage* frmrez
Для сохранения переведенного в ysv формат изображения
IplImage* hsv
Послойное сохранение изображения
IplImage* h_plane
IplImage* s_plane
IplImage* v_plane
Здесь сохраняется изображение в котром выделен нужный пользователю цвет по слоям и
обратно сложено.
IplImage* hsv_and
Здесь выделен цвет, но изображение сохранено по разным слоям.
IplImage* h_range
IplImage* s_range
IplImage* v_range
CvMemStorage* storage – для выделения памяти.
char ConfigFile[512] – имя файла конфигурационного файла
тип массива. Для сохранения min и max значений 3 слоев искомых цветов
typedef struct
{
int ColorID;
int Hmin, Hmax;
int Smin, Smax;
int Vmin, Vmax;
} TColDef;
TColDef Cols[MAX_COLORS]
int ColorNum - количество определяемых цветов
int CurrentColor – положение ползунка
int SPOT_RADIUS_MIN -min радиус контура пятна
int SPOT_RADIUS_MAX – max радиус контура пятна
int FLAG_OUTPUT_CONSOLE – флаг (выводить данные в консоль или нет)
int const channelmax RWR-2014-06-01.1
6
int EvalProcNum – количество функции сглаживания изображения
int EvalProc[MAX_EVAL_PROC] – значение для функций сглаживания
Чумаченко А.А., Воробьев В.В. Сервер пятна SpotServer // Рабочий отчет RWR-2014-0601.1, -М.: Robofob Lab, 2014
RWR-2014-06-01.1
7
Download