Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Наукова новизна та практичне значення одержаних результатівСодержание книги
Поиск на нашем сайте В рамках цієї роботи було розроблено метод і алгоритм автоматизованого розпізнавання образів на базі алгоритмів контурного аналізу. Досліджувався на окремому завданні: розпізнавання Герба України. Також в даній роботі використовувався метод Віоли-Джонса, який дозволив навчити нейронну мережу і отримати на виході каскад Хаара, завдяки якого можна було розпізнавати той же об'єкт (Герб України). Проведена оцінка складності алгоритму контурного аналізу. Проведено порівняльний аналіз отриманих результатів від розробленого методу і від навченого каскаду, який використовує зовсім інші методи виявлення об'єктів. Надані рекомендації до використання того чи іншого методу, в таких чи інших ситуаціях.
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ 1. Журавлев Ю.И. Об алгебраическом подходе к решению задач распознавания и классификации. Проблемы кибернетики. Вып. 33 — М.: Наука, 1978. 2. Гуревич И.Б., Журавлев Ю.И., Сметанин Ю.Г. Алгебры изображений: исследовательские и прикладные задачи/ Труды IV конференции РОАИ. -Новосибирск, 1998. -с.74-78. 3. I.B. Gurevich, Yu.G. Smetanin, Yu.I. Zhuravlev. Image Algebras: Research and Applied Problems// Pattern Recognition and Image Understanding: 5th Open German-Russian Workshop/fB.Radig. (ed.). Sankt Augusting: Infix, 1999, pp.100-107. 4. Гренадер У. Лекции по теории образов. Пер. с англ. М.: Мир, - Т. 1-3. 5. G. Ritter, J. Wilson. Computer Vision. Algorithms in Image Algebra. Prentice Hall Ptr, 1997. 6. Comment on Ignorance, Myopia and Novelette in Computer Vision Systems by M.A. Snuder/ Ramech C. Jain, Thomas O. Binford// CVGIP: Image Understand 1991. - V.53, №1. - P.l 12-117. 7. Jain R.C., Binford Т.О. revolutions and experimental computer vision/ Bowyer K.W., Jons J.P. // CVGIP: Image Understand. 1991. V.53, №1. - P.127-128. 8. Прэтт У. Цифровая обработка изображений: Пер. с англ. -М.: Мир, Кн.1, 2. 9. Розенфельд А. Распознавание и обработка изображений. М.: Мир, 1972. 10. Павлидис Т. Алгоритмы машинной графики и обработки изображений: Пер. с англ. М.: Радио и связь, 1986. 11. Методы компьютерной обработки изображений/ Под ред. В.А. Сойфера. -М.: Физматлит, 2001. -784 с. 12. Анисимов Б.В., Курганов В.Ф., Злобин В.К. Распознавание и цифровая обработка изображений. М.: Высшая школа, 1983. 13. Чэн Ш.К. Принципы проектирования систем визуальной информации: Пер. с англ. М.: Мир, 1994. 408 с.14 14. Введение в контурный анализ. Я. А. Фурмана. Москва 2003 15. Фурман Я. А., Хафизов Д. Г., Хафизов Р. Г. Распознавание образов и анализ изобаржений (РОАИ-6-2002). Великий народ 2002 16. Фурман Я.А., Роженцов АА., Леухин А.Н. Новые оптимальные сигналы для задач разрешения/распознавания// Вестник Верхне-Волжского отделения Академии технологических наук Российской Федерации. Серия: высокие технологии в радиоэлектронике. - Н. Новгород, 1998. 17. Фурман Я.А. Основы теории обработки контуров изображений: Учебное пособие для вузов. Йошкар-Ола: МарГТУ, 1997. - 256 с. 18. Фурман Я.А., Егошина И.Л. Обработка контуров изображений с протяженными прямолинейными границами. «Автометрия», №6. 1999. 19. Фурман Я.А., Егошина И.Л. Согласованные контурные фильтры. «Радиотехника», №7. 1998. С.33-39. 20. Фурман Я.А., Егошина И.Л., Михайлов А.И. Оценка степени сходства двух плоских форм. «Автометрия», №4. 1995. С.19-26. 21. Фурман Я.А., Кравцова Н.М. Задания групповых точечных объектов и алгоритмы нумерации составляющих их точек//Цифровая обработка многомерных сигналов. Межвуз.сб.науч.тр./МарПИ, ЛЭТИ, МАИ, МИРЭА. Йошкар-Ола, 1992. - С.25-31. 22. Фурман Я.А., Юрьев А.Н., Яншин В.В. Цифровые методы обработки и распознавания бинарных изображений. Красноярск: Изд-во Красноярского ун-та, 1992.-248с. 23. Файн В.С. Распознавание образов и машинное понимание естественного языка. М.: Наука, 1987. - 240 с. 24. Искусственный интеллект: В 3-х кн. Кн. 1. Системы общения и экспертные системы: Справочник /Под ред. Э. В. Попова. М.: Радио и связь, 1990. -464 с. 25. Аверкин А. Н., Гаазе-Рапопорт М. Г., Поспелов Д. А. Толковый словарь по искусственному интеллекту. М.: Радио и связь, 1992. - 256 с. 26. Горелик А. JL, Гуревич И. Б., Скрипкин В. А. Современное состояние проблемы распознавания: Некоторые аспекты. Сер. Кибернетика. М.: Радио и связь, 1985.- 160 с. 27. Ту Д. Т., Гонсалес Р. К. Принципы распознавания образов: Пер. с англ. -М.: Мир, 1978.-411 с. 28. Learning OpenCV. Gary Bradski, Adrian Kaehle, 2008 29. OpenCV Reference Manual. Intel Corporation 2001 30. Distinctive Image Features from Scale-Invariant Keypoints. David G. L. Canada, 2004 31. David G. L. Distinctive Image Features from Scale-Invariant Keypoints, 2004 32. Гончаров, A.B. Исследование алгоритмов поиска изображений, основанных на вейвлет-преобразовании / A.B. Гончаров // Тезисы докладов студенческой конференции РГУ "Неделя науки" механико-математического факультета. — 2005. — С. 91-92. 33. Бермант А. Ф. Краткий курс математического анализа / А. Ф. Бермант, И. Г. Араманович. - 6-е изд. - М.: Наука, 1969. - 736 с. 34. Виттих В.А. Обработка изображений в автоматизированных системах научных исследований. / В. А. Виттих, В. В. Сергеев, В. А. Сойфер. — М.: Наука, 1982.-213с. 35. Гилл Ф. Практическая оптимизация / Ф. Гилл, У. Мюррей, М. Райт. -М.: Мир, 1985. 510 с. 36. Гонсалес Р. Цифровая обработка изображений / Р. Гонсалес, Р. Вудс; Пер. с англ. М.: Техносфера, 2005. - 1072 с. 37. Даджион Д. Цифровая обработка многомерных сигналов / Д. Даджион, Р. Мерсеро. М.: Мир, 1988.-488 с. 38. Дегтярев C.B. Методы цифровой обработки изображений: учеб. пособие 4.1 / C.B. Дегтярев, С.С. Садыков, С.С. Тевс, Т. А. Ширабакина. Курск, 2001. — 167 с. 39. Кострикин А. И. Введение в алгебру. Основы алгебры: Учебник для вузов. М.: Физматлит, 1994. - 320 с. 40. Ланкастер П. Теория матриц. М.: Наука, 1978. - 280 с. 41. Ланнэ A.A., Соловьева Е.Б. Нелинейные цифровые фильтры импульсных помех. 2 Международная НТК "Цифровая обработка сигналов и ее применение" М. 1999, т.2, С.31-38. 42. Макклеллан Дж. Г., Рейдер Ч. М. 'Применение теории чисел в цифровой обработке сигналов / Под ред. Ю. И. Манина. М.: Радио и связь, 1983.-264 с. 43. П.Оппенгейм А. В., Шафер Р. В. Цифровая обработка сигналов. -М.: Радио и связь, 1979. 416 с. 44. Прэтт У. Цифровая обработка изображений. В 2 кн. М.:Мир, 1982. -Кн. 1.-312 с. Кн. 2.-480 с. 45. Пупков К. А. Функциональные ряды в теории нелинейных систем / К. А. Пупков, В. И. Капалин, А. С. Ющенко. М.: Наука, 1976. 448 с. 46. Рабинер JI. Теория и применение цифровой обработки сигналов. / JI. Рабинер, Б. Гоулд; Пер. с англ. М.: Мир, 1978. 848 с. 47. Рампони Дж. Расчет изотропных характеристик квадратичных фильтров методом двухимпульсной характеристики // ТИИЭР., 1990., Т.78., № 4., С. 96-108. 48. Садыков С.С. Цифровая обработка и анализ изображений Ташкент: НПО "Кибернетика", АН РУЗ. - 1994. - 193 с. 49. Сорокин С. В. Использование взвешенных медианных фильтров для удаления импульсного шума при обработке изображений / С. В. Сорокин // Известия высших учебных заведений. Поволжский регион. Технические науки. 2007. - № 3 (30). - С. 50-57. 50. Сорокин С. В. Увеличение изображений с помощью многофазной интерполяции / С. В. Сорокин, М. А. Щербаков // Цифровая обработка сигналов и ее применение: сб. тр. Междунар. конф. и выставки. М., 2007. - С. 341-343. 51. Сорокин С. В. Нелинейный оператор повышения качества изображения / С. В. Сорокин, М. А. Щербаков // Надежность и качество: тр. Междунар. симп.: в 2-х т. / под ред. Н. К. Юркова. -Пенза: Инф.-издат. центр Пенз. гос. ун-та, 2007. Т. 1. - С. 288-289. 52. Freeman H. On the encoding of arbitrary geometric configurations // IEEE Trans. Electron. Comput.,1961. – Vol. 10, № 2. – P. 260-268. 53. Freeman H. Shape description via the use of critical points // Pattern recognition, 1978. – Vol. 10, № 3. – P. 159-169.
Додаток A
Додаток B package p;
import static com.googlecode.javacv.cpp.opencv_core.CV_AA; import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U; import static com.googlecode.javacv.cpp.opencv_core.cvClearMemStorage; import static com.googlecode.javacv.cpp.opencv_core.cvDrawContours; import static com.googlecode.javacv.cpp.opencv_core.cvGetSeqElem; import static com.googlecode.javacv.cpp.opencv_core.cvLoad; import static com.googlecode.javacv.cpp.opencv_core.cvPoint; import static com.googlecode.javacv.cpp.opencv_core.cvRectangle; import static com.googlecode.javacv.cpp.opencv_imgproc.*; import static com.googlecode.javacv.cpp.opencv_objdetect.CV_HAAR_DO_CANNY_PRUNING; import static com.googlecode.javacv.cpp.opencv_objdetect.cvHaarDetectObjects;
import java.awt.Frame; import java.io.BufferedReader; import java.io.FileReader; import java.util.Scanner;
import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*;
import com.googlecode.javacpp.Loader; import com.googlecode.javacv.CanvasFrame; import com.googlecode.javacv.OpenCVFrameGrabber; import com.googlecode.javacv.cpp.opencv_objdetect; import com.googlecode.javacv.cpp.opencv_core.CvContour; import com.googlecode.javacv.cpp.opencv_core.CvMemStorage; import com.googlecode.javacv.cpp.opencv_core.CvRect; import com.googlecode.javacv.cpp.opencv_core.CvScalar; import com.googlecode.javacv.cpp.opencv_core.CvSeq; import com.googlecode.javacv.cpp.opencv_core.IplImage; import com.googlecode.javacv.cpp.opencv_imgproc.CvHuMoments; import com.googlecode.javacv.cpp.opencv_imgproc.CvMoments; import com.googlecode.javacv.cpp.opencv_objdetect.CvHaarClassifierCascade;
public class Main { public static void main(String[] args) {
Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new GridLayout(1, true)); shell.setText("Детектор"); Image image = new Image(display, "C:\\Eye-icon.ico"); shell.setImage(image);
//group box for radio buttons GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); Group group1 = new Group(shell, SWT.NONE); group1.setLayoutData(gd); group1.setText("Выбор метода детектирования объектов: "); group1.setLayout(new GridLayout(1, true));
//contours analis radio buuton gd = new GridData(SWT.LEFT, SWT.CENTER, true, true); final Button button1 = new Button(group1, SWT.RADIO); button1.setLayoutData(gd); button1.setText("Контурный анализ");
//haar radio buuton gd = new GridData(SWT.LEFT, SWT.CENTER, true, true); final Button button2 = new Button(group1, SWT.RADIO); button2.setLayoutData(gd); button2.setText("Каскад Хаара");
//group box for settings gd = new GridData(SWT.FILL, SWT.FILL, true, true); final Group group2 = new Group(shell, SWT.NONE); gd.grabExcessHorizontalSpace = true; group2.setLayoutData(gd); group2.setText("Дополнительные настройки: "); GridLayout gl = new GridLayout(3, false); gl.makeColumnsEqualWidth = false; group2.setLayout(gl);
//Gaussian gd = new GridData(SWT.RIGHT, SWT.CENTER, true, true); final Label label1 = new Label(group2, SWT.NONE); label1.setText("Фильтр Гаусса:"); label1.setLayoutData(gd);
gd = new GridData(SWT.FILL, SWT.CENTER, true, false); final Scale scale1 = new Scale(group2, SWT.NONE); scale1.setMinimum(0); scale1.setMaximum(31); scale1.setIncrement(2); scale1.setPageIncrement(2); scale1.setSelection(9); scale1.setLayoutData(gd);
gd = new GridData(SWT.LEFT, SWT.CENTER, true, true); final Label label2 = new Label(group2, SWT.NONE); label2.setText("9 "); label2.setLayoutData(gd);
//canny1 gd = new GridData(SWT.RIGHT, SWT.CENTER, true, true); final Label label3 = new Label(group2, SWT.NONE); label3.setText("Верхний порог Canny:"); label3.setLayoutData(gd);
gd = new GridData(SWT.FILL, SWT.CENTER, true, false); final Scale scale2 = new Scale(group2, SWT.NONE); scale2.setMinimum(1); scale2.setMaximum(255); scale2.setPageIncrement(5); scale2.setSelection(100); scale2.setLayoutData(gd);
gd = new GridData(SWT.LEFT, SWT.CENTER, true, true); final Label label4 = new Label(group2, SWT.NONE); label4.setText("100 "); label4.setLayoutData(gd);
//canny2 gd = new GridData(SWT.RIGHT, SWT.CENTER, true, true); final Label label5 = new Label(group2, SWT.NONE); label5.setText("Нижний порог Canny:"); label5.setLayoutData(gd);
gd = new GridData(SWT.FILL, SWT.CENTER, true, false); final Scale scale3 = new Scale(group2, SWT.NONE); scale3.setMinimum(1); scale3.setMaximum(255); scale3.setPageIncrement(5); scale3.setSelection(100); scale3.setLayoutData(gd);
gd = new GridData(SWT.LEFT, SWT.CENTER, true, true); final Label label6 = new Label(group2, SWT.NONE); label6.setText("100 "); label6.setLayoutData(gd);
//check box buuton gd = new GridData(SWT.LEFT, SWT.CENTER, true, true); gd.horizontalSpan = 3; final Button button5 = new Button(group2, SWT.CHECK); button5.setLayoutData(gd); button5.setText("Показать окно результатов оператора Canny");
//group box for selecting file or capture gd = new GridData(SWT.FILL, SWT.FILL, true, true); Group group4 = new Group(shell, SWT.NONE); group4.setLayoutData(gd); group4.setText("Выбор видеопотока: "); group4.setLayout(new GridLayout(2, true));
//capture gd = new GridData(SWT.LEFT, SWT.CENTER, true, true); final Button button6 = new Button(group4, SWT.RADIO); gd.horizontalSpan = 2; button6.setLayoutData(gd); button6.setText("Веб-камера"); button6.setSelection(true);
//file stream gd = new GridData(SWT.LEFT, SWT.CENTER, true, true); final Button button7 = new Button(group4, SWT.RADIO); gd.horizontalSpan = 2; button7.setLayoutData(gd); button7.setText("Из файла");
//file path gd = new GridData(SWT.FILL, SWT.CENTER, true, true); final Text text1 = new Text(group4, SWT.BORDER); text1.setLayoutData(gd);
//browse gd = new GridData(SWT.LEFT, SWT.CENTER, true, true); final Button button8 = new Button(group4, SWT.PUSH); button8.setLayoutData(gd); button8.setText("...");
//group box for two buttons: start and stop gd = new GridData(SWT.FILL, SWT.FILL, true, true); Group group3 = new Group(shell, SWT.NONE); group3.setLayoutData(gd); group3.setText("Управление:"); group3.setLayout(new GridLayout(2, true));
gd = new GridData(SWT.FILL, SWT.FILL, true, true); final Button button3 = new Button(group3, SWT.PUSH); button3.setLayoutData(gd); button3.setText("Запустить");
gd = new GridData(SWT.FILL, SWT.FILL, true, true); final Button button4 = new Button(group3, SWT.PUSH); button4.setLayoutData(gd); button4.setText("Остановить"); button4.setEnabled(false);
final Contours contours = new Contours(); final Thread contoursThread = new Thread(contours);
final Haar haar = new Haar(); final Thread haarThread = new Thread(haar);
button1.addListener(SWT.MouseDown, new Listener() { @Override public void handleEvent(Event event) {
label1.setEnabled(true); label2.setEnabled(true); label3.setEnabled(true); label4.setEnabled(true); label5.setEnabled(true); label6.setEnabled(true);
scale1.setEnabled(true); scale2.setEnabled(true); scale3.setEnabled(true);
button5.setEnabled(true); } });
button2.addListener(SWT.MouseDown, new Listener() { @Override public void handleEvent(Event event) {
label1.setEnabled(false); label2.setEnabled(false); label3.setEnabled(false); label4.setEnabled(false); label5.setEnabled(false); label6.setEnabled(false);
scale1.setEnabled(false); scale2.setEnabled(false); scale3.setEnabled(false);
button5.setEnabled(false); } });
button3.addListener(SWT.MouseDown, new Listener() { @Override public void handleEvent(Event arg0) { if (button1.getSelection()) { contoursThread.start(); } else { haarThread.start(); }
button1.setEnabled(false); button2.setEnabled(false); button3.setEnabled(false); button4.setEnabled(true); } });
button4.addListener(SWT.MouseDown, new Listener() { @Override public void handleEvent(Event arg0) { if (button1.getSelection()) { contours.stop(); } else { haar.stop(); }
button1.setEnabled(true); button2.setEnabled(true); button3.setEnabled(true); button4.setEnabled(false); } });
scale1.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { contours.gaussianThr = scale1.getSelection(); //label2.setText(String.valueOf(scale1.getSelection())); if ((contours.gaussianThr % 2) == 0) { contours.gaussianThr++; scale1.setSelection(contours.gaussianThr); label2.setText(String.valueOf(scale1.getSelection())); }
} });
scale2.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { contours.cannyThr1 = scale2.getSelection(); label4.setText(String.valueOf(scale2.getSelection())); } });
scale3.addListener(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { contours.cannyThr2 = scale3.getSelection(); label6.setText(String.valueOf(scale3.getSelection())); } });
button5.addListener(SWT.MouseDown, new Listener() { @Override public void handleEvent(Event event) { if (button5.getSelection()!= true) { contours.createFrame(); } else { contours.disposeFrame(); } } });
shell.pack(); shell.open();
while (!shell.isDisposed()) { if (display.readAndDispatch()) display.sleep(); } } }
class Contours implements Runnable {
CanvasFrame frame; CanvasFrame frame2;
public int cannyThr1 = 100; public int cannyThr2 = 100; public int gaussianThr = 9; boolean fr2 = false;
static boolean stoped;
public void createFrame() { if (frame2 == null) { frame2 = new CanvasFrame("Gray Frame"); frame2.setDefaultCloseOperation(CanvasFrame.EXIT_ON_CLOSE); } }
public void disposeFrame() { if (frame2!= null) { frame2.dispose(); } }
public void run() { frame = new CanvasFrame("Main Frame"); frame.setDefaultCloseOperation(CanvasFrame.EXIT_ON_CLOSE); stoped = false;
try { OpenCVFrameGrabber grabber = new OpenCVFrameGrabber("C:\\3test.avi"); grabber.start(); while (!stoped) { IplImage Grab = grabber.grab(); if (Grab == null) return; Grab = Detect(Grab); frame.showImage(Grab); } } catch (Exception e) { e.printStackTrace(); } finally { frame.dispose(); if (frame2!= null) frame2.dispose(); } }
public void stop() { stoped = true; }
public IplImage Detect(IplImage Grab) { CvMemStorage storage = CvMemStorage.create(0); CvSeq contour = new CvSeq(null); CvSeq seqhull = new CvSeq(null); CvMoments moments = new CvMoments(); CvHuMoments hu_moments = new CvHuMoments(); CvHuMoments hu_templ = new CvHuMoments();
try { Scanner fileScan = new Scanner(new BufferedReader(new FileReader( "C:\\moments.txt"))); if (fileScan.hasNext()) hu_templ.hu1(fileScan.nextDouble()); if (fileScan.hasNext()) hu_templ.hu2(fileScan.nextDouble()); if (fileScan.hasNext()) hu_templ.hu3(fileScan.nextDouble()); if (fileScan.hasNext()) hu_templ.hu4(fileScan.nextDouble()); if (fileScan.hasNext()) hu_templ.hu5(fileScan.nextDouble()); if (fileScan.hasNext()) hu_templ.hu6(fileScan.nextDouble()); if (fileScan.hasNext()) hu_templ.hu7(fileScan.nextDouble()); } catch (Exception e) { }
IplImage gray = IplImage.create(Grab.width(), Grab.height(), IPL_DEPTH_8U, 1);
if (Grab == null) { System.err.println("Невозможно загрузить изображение."); } else { cvCvtColor(Grab, gray, CV_BGR2GRAY); // Получаем серый цвет //cvEqualizeHist(gray, gray); cvSmooth(gray, gray, CV_GAUSSIAN, gaussianThr, 0, 0, 0);
//cvThreshold(gray, gray, 100, 110, CV_THRESH_BINARY); // Необходимо удалить белый бордюр // cvRectangle(gray, cvPoint(0,0), // cvPoint(gray.width()-1,gray.height()-1),CvScalar.GRAY, 2, 8, 16); // Утолщаем контуры
//cvDilate(gray, gray, null, 1); // Нах. границы cvCanny(gray, gray, cannyThr1, cannyThr2, 3); // Нах. контуры // frame.showImage(gray);
cvFindContours(gray, storage, contour, Loader.sizeof(CvContour.class), CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0));
int NC = 0; while (contour!= null &&!contour.isNull()) { if (contour.elem_size() > 0) {
/* * CvSeq points = cvApproxPoly(contour, * Loader.sizeof(CvContour.class), storage, * CV_POLY_APPROX_DP, cvContourPerimeter(contour)*0.002, 0); * * //seqhull = cvConvexHull2( * points,null,CV_COUNTER_CLOCKWISE,1); */ cvMoments(contour, moments, 1); cvGetHuMoments(moments, hu_moments);
if (MatchShapes(hu_templ, hu_moments) < 100) { // if (NC == 0) { cvDrawContours(Grab, contour, CvScalar.RED, CvScalar.RED, -1, 4, CV_AA);
/* CvRect r = cvBoundingRect(contour, 1); int x = r.x(), y = r.y(), w = r.width(), h = r.height(); cvRectangle(Grab, cvPoint(x, y), cvPoint(x + w, y + h), CvScalar.MAGENTA, 4, CV_AA, 0);*/ }
System.out.print("NC = " + NC + "\n"); System.out.print("hu1 = " + hu_moments.hu1() + "\n"); System.out.print("hu2 = " + hu_moments.hu2() + "\n"); System.out.print("hu3 = " + hu_moments.hu3() + "\n"); System.out.print("hu4 = " + hu_moments.hu4() + "\n"); System.out.print("hu5 = " + hu_moments.hu5() + "\n"); System.out.print("hu6 = " + hu_moments.hu6() + "\n"); System.out.print("hu7 = " + hu_moments.hu7() + "\n");
NC++; } contour = contour.h_next(); } if (frame2!= null) frame2.showImage(gray); }
return Grab; }
private double MatchShapes(CvHuMoments hu_m_templ, CvHuMoments hu_m) { double mt = 0; double[] ma = new double[7]; double[] mb = new double[7];
ma[0] = hu_m_templ.hu1(); ma[1] = hu_m_templ.hu2(); ma[2] = hu_m_templ.hu3(); ma[3] = hu_m_templ.hu4(); ma[4] = hu_m_templ.hu5(); ma[5] = hu_m_templ.hu6(); ma[6] = hu_m_templ.hu7();
mb[0] = hu_m.hu1(); mb[1] = hu_m.hu2(); mb[2] = hu_m.hu3(); mb[3] = hu_m.hu4(); mb[4] = hu_m.hu5(); mb[5] = hu_m.hu6(); mb[6] = hu_m.hu7();
for (int i = 0; i < 7; i++) { mt += Math.abs((Math.signum(ma[i]) * Math.log(Math.abs(ma[i])) - Math.signum(mb[i]) * Math.log(Math.abs(mb[i]))) / Math.signum(ma[i]) * Math.log(Math.abs(ma[i]))); }
System.out.print("\nMatchResult = " + mt + "\n");
return mt; }
}
class Haar implements Runnable {
private static final int SCALE = 2; // scaling factor to reduce size of input image
// cascade definition for face detection private static final String CASCADE_FILE = "C:\\out_ok_25.02.2012.xml";
static boolean stoped;
public void run() { stoped = false; System.out.println("Starting OpenCV...");
Loader.load(opencv_objdetect.class);
CanvasFrame frame = new CanvasFrame("Main Frame"); frame.setDefaultCloseOperation(CanvasFrame.EXIT_ON_CLOSE);
try { OpenCVFrameGrabber grabber = new OpenCVFrameGrabber("C:\\pasport.avi"); grabber.start(); while (!stoped) { IplImage origImg = grabber.grab(); if (origImg == null) return;
// convert to grayscale IplImage grayImg = IplImage.create(origImg.width(), origImg.height(), IPL_DEPTH_8U, 1); cvCvtColor(origImg, grayImg, CV_BGR2GRAY);
// scale the grayscale (to speed up face detection) IplImage smallImg = IplImage.create(grayImg.width() / SCALE, grayImg.height() / SCALE, IPL_DEPTH_8U, 1); cvResize(grayImg, smallImg, CV_INTER_LINEAR);
// equalize the small grayscale IplImage equImg = IplImage.create(smallImg.width(), smallImg.height(), IPL_DEPTH_8U, 1); cvEqualizeHist(smallImg, equImg);
// create temp storage, used during object detection CvMemStorage storage = CvMemStorage.create();
// instantiate a classifier cascade for face detection CvHaarClassifierCascade cascade = new CvHaarClassifierCascade( cvLoad(CASCADE_FILE)); System.out.println("Detecting faces..."); CvSeq faces = cvHaarDetectObjects(equImg, cascade, storage, 1.1, 3, CV_HAAR_DO_CANNY_PRUNING); cvClearMemStorage(storage);
// iterate over the faces and draw yellow rectangles around them int total = faces.total(); System.out.println("Found " + total + " obj"); for (int i = 0; i < total; i++) { CvRect r = new CvRect(cvGetSeqElem(faces, i)); cvRectangle( origImg, cvPoint(r.x() * SCALE, r.y() * SCALE), // undo the // scaling cvPoint((r.x() + r.width()) * SCALE, (r.y() + r.height()) * SCALE), CvScalar.YELLOW, 6, CV_AA, 0); } frame.showImage(origImg); } } catch (Exception e) { e.printStackTrace(); } finally { frame.dispose(); }
}
public void stop() { stoped = true; } }
|
||
|
Последнее изменение этой страницы: 2017-02-05; просмотров: 222; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.01 с.) |