Как да открием четириъгълна форма в изображение в Java?

Искам да открия четириъгълна форма в изображение в Java. Мога да използвам метода HoughLinesP в OpenCV (използвайки javaCV за opencv java обвързване), за да открия линейни сегменти. Но не мога да разбера как да открия четириъгълна форма - има ли друг метод за това или някакъв начин да се използват линиите на дъното? Също така, след като ъглите на четириъгълника бъдат открити, искам той да върне правоъгълник точно както прави този клас - http://www.aforgenet.com/framework/docs/html/7039a71d-a87d-47ef-7907-ad873118e374.htm - има ли еквивалентна библиотека в openCV?


person abhishek    schedule 24.10.2012    source източник


Отговори (3)


Как изглеждат вашите въведени изображения? Ако откриете много линейни сегменти с трансформацията на Hough, може би можете да опитате да използвате RANSAC, за да генерирате брой хипотези за четириъгълна форма, намерете начин да оцените тяхната годност и да върнете най-добрата хипотеза.

Една хипотеза може да бъде генерирана по следния начин:

  • изберете четири произволни линейни сегмента от открития набор от линейни сегменти
  • намерете четирите ъгъла, като търсите пресечните точки на линиите, върху които лежат избраните сегменти
  • оценете пригодността на четириъгълната форма, определена от тези четири точки

Пригодността може да е площта на хипотетичния четириъгълник (вижте формулата на Бретшнайдер за изчисляване на площ на изпъкнал четириъгълник), разстоянието на ръбовете на четириъгълника от другите линейни сегменти в открития набор или нещо, което отговаря по-добре на вашето приложение.

Това е само идея, все още не съм опитвал да използвам този подход (но планирам да внедря нещо подобно). Кажете ми, ако смятате, че това може да проработи или защо не! :)

person ppalasek    schedule 27.10.2012

Вашият алгоритъм може да бъде нещо подобно

  1. Обработете изображението, за да намерите ръбове (филтър Canny)
  2. Приложете трансформация на Hough, за да намерите линии
  3. Откриване на двойки линии, които се пресичат под ъгъл от 90 градуса (приблизително)
person jose    schedule 24.10.2012
comment
Да, вече съм наясно с това - но търсех да намеря по-оптимален алгоритъм или съществуващ метод, който дава ъглите на четириъгълника. Също така трябва да се направи четириъгълна трансформация след извличане на ъгъл. - person abhishek; 24.10.2012
comment
Ако линиите са резултат от перспективна проекция на четириъгълник в 3D върху 2D повърхност, тогава няма гаранция, че ъглите между съседните ръбове ще бъдат 90 градуса. Въпреки това, като се има предвид набор от четири линии, все още можете да извършите някаква оценка на вероятността това да е проектиран четириъгълник -- просто е малко по-трудно в такъв случай. - person Drew Noakes; 19.12.2012

Ако използвате OpenCV библиотека, определено трябва да опитате функцията FindChessboardCorners. Освен това ето един добър урок.

person ArtemStorozhuk    schedule 24.10.2012
comment
Не съм сигурен дали това се отнася за моя случай. - person abhishek; 24.10.2012
comment
той открива модел на шахматна дъска в изображението, което не е случаят тук. Няма ли да се провали, тъй като четириъгълникът в моето изображение няма вътрешни ъгли/квадрати? - person abhishek; 24.10.2012
comment
Съжалявам, не знам отговора на въпроса ви, защото никога не съм работил с калибриране. Все пак искаш ли да го тествам вместо теб? - person ArtemStorozhuk; 24.10.2012