Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Наукова новизна та практичне значення одержаних результатів ⇐ ПредыдущаяСтр 10 из 10
В рамках цієї роботи було розроблено метод і алгоритм автоматизованого розпізнавання образів на базі алгоритмів контурного аналізу. Досліджувався на окремому завданні: розпізнавання Герба України. Також в даній роботі використовувався метод Віоли-Джонса, який дозволив навчити нейронну мережу і отримати на виході каскад Хаара, завдяки якого можна було розпізнавати той же об'єкт (Герб України). Проведена оцінка складності алгоритму контурного аналізу. Проведено порівняльний аналіз отриманих результатів від розробленого методу і від навченого каскаду, який використовує зовсім інші методи виявлення об'єктів. Надані рекомендації до використання того чи іншого методу, в таких чи інших ситуаціях.
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ 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; просмотров: 133; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.106.69 (0.359 с.) |