Алгоритм Рамера-Дугласа-Пекера — алгоритм, що дозволяє зменшити число точок кривої, апроксимованої більшою серією точок. Алгоритм було незалежно відкрито Урсом Рамером в 1972 та Давидом Дугласом і Томасом Пекером в 1973 та декількома іншими дослідниками протягом наступного десятиліття. Також алгоритм відомий під назвами: алгоритм Дугласа-Пекера, алгоритм ітеративної найближчої точки та алгоритм розбиття і злиття.
Ідея
Суть алгоритму полягає в тому, щоб за даною ламаною, яка апроксимує криву, побудувати ламану з меншою кількістю точок. Алгоритм визначає розбіжність, яка обчислюється за максимальною відстанню між вихідною і спрощеною кривими. Спрощена крива складається з підмножини точок, які визначаються з початкової кривої.
Алгоритм
Початкова крива являє собою упорядкований набір точок або ліній, і задану відстань ε > 0. Початкова крива показана на малюнку 0, спрощена — на малюнку 4.
Алгоритм рекурсивно ділить лінію. Входом алгоритму служать координати всіх точок між першою і останньою. Перша і остання точка зберігаються незмінними. Після чого алгоритм знаходить точку, найбільш віддалену від відрізка, що з'єднує першу і останню. Якщо точка знаходиться на відстані, меншій ε, то всі точки, які ще не були відзначені до збереження, можуть бути викинуті з набору і отримана пряма згладжує криву з точністю не нижче ε
Якщо ж відстань більше ε, то алгоритм рекурсивно викликає себе на наборі від початкової до даної і від даної до кінцевої точках (що означає, що дана точка буде відзначена до збереження). По закінченню всіх рекурсивних викликів вихідна ламана будується тільки з тих точок, що були відзначені до збереження.
Псевдокод (рекурсивна реалізація)
function DouglasPeucker(PointList[], epsilon) // Знаходимо точку з максимальною відстанню від прямої між першою й останньою точками набору dmax = 0 index = 0 for i = 2 to (length(PointList) - 1) d = PerpendicularDistance(PointList[i], Line(PointList[1], PointList[end])) if d > dmax index = i dmax = d end end // Якщо максимальна дистанція більша, ніж epsilon, то рекурсивно викликаємо функцію на ділянках if dmax >= epsilon //Recursive call recResults1[] = DouglasPeucker(PointList[1...index], epsilon) recResults2[] = DouglasPeucker(PointList[index...end], epsilon) // Будуємо підсумковий набір точок ResultList[] = {recResults1[1...end-1] recResults2[1...end]} else ResultList[] = {PointList[1], PointList[end]} end // Повертаємо результат return ResultList[] end
Псевдокод (ітеративна реалізація)
function DouglasPeucker(PointList[], epsilon) { // У стек заносимо перший і останній індекси stack.push({0, length(PointList) - 1}) // У масиві за заданим індексом зберігаємо точку (true) або ні (false) keep_point[0...length(PointList) - 1] = true while(!stack.empty()) { startIndex = stack.top().first endIndex = stack.top().second stack.pop() dMax = 0 index = startIndex for(i = startIndex + 1 to endIndex - 1) { if(keep_point[i]) { d = PerpendicularDistance(PointList[i], Line(PointList[startIndex], PointList[endIndex])) if(d > dMax) { index = i dMax = d } } } if(dMax >= epsilon) { stack.push({startIndex, index}) stack.push({index, endIndex}) } else { for(j = startIndex + 1 to endIndex - 1) { keep_point[j] = false } } } for(i = 0 to (length(PointList) - 1)) { if(keep_point[i]) { ResultList.Add(PointList[i]) } } return ResultList[] }
Застосування
Алгоритм застосовується для обробки векторної графіки та при картографічній генералізації.
Крім того, застосовується у робототехніці для обробки результатів роботи кругового лазерного далекоміру і тому також називається алгоритмом розбиття і злиття.
Складність
Очікувана складність алгоритму може бути оцінена виразом , яка спрощується (як наслідок основної теореми про рекурентні співвідношення) в . Проте в гіршому випадку складність алгоритму .
Примітки
- Heckbert, Paul S.; Garland, Michael (1997). Survey of polygonal simplification algorithms (PDF): 4. Архів оригіналу (PDF) за 22 квітня 2016. Процитовано 23 червня 2016.
- Nguyen and Martinelli and Siegwart (2005). A Comparison of Line Extraction Algorithms using 2D Laser Rangefinder for Indoor Mobile Robotics (PDF). Архів оригіналу (PDF) за 17 вересня 2010. Процитовано 15 червня 2016. [Архівовано 2010-09-17 у Wayback Machine.]
Література
- Urs Ramer, "An iterative procedure for the polygonal approximation of plane curves", Computer Graphics and Image Processing, 1(3), 244–256 (1972) DOI:10.1016/S0146-664X(72)80017-0
- David Douglas & Thomas Peucker, "Algorithms for the reduction of the number of points required to represent a digitized line or its caricature", The Canadian Cartographer 10(2), 112–122 (1973) DOI:10.3138/FM57-6770-U75U-7727
- John Hershberger & Jack Snoeyink, "Speeding Up the Douglas–Peucker Line-Simplification Algorithm", Proc 5th Symp on Data Handling, 134–143 (1992). UBC Tech Report TR-92-07 available at
- R.O. Duda and P.E. Hart, "Pattern classification and scene analysis", (1973), Wiley, New York ()
- Visvalingam, M., and Whyatt, J.D. "Line Generalisation by Repeated Elimination of the Smallest Area". (1992) CISRG Discussion Paper Series No 10, University of Hull, 16 pp ()
Це незавершена стаття про алгоритми. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Algoritm Ramera Duglasa Pekera algoritm sho dozvolyaye zmenshiti chislo tochok krivoyi aproksimovanoyi bilshoyu seriyeyu tochok Algoritm bulo nezalezhno vidkrito Ursom Ramerom v 1972 ta Davidom Duglasom i Tomasom Pekerom v 1973 ta dekilkoma inshimi doslidnikami protyagom nastupnogo desyatilittya 1 Takozh algoritm vidomij pid nazvami algoritm Duglasa Pekera algoritm iterativnoyi najblizhchoyi tochki ta algoritm rozbittya i zlittya Zmist 1 Ideya 2 Algoritm 2 1 Psevdokod rekursivna realizaciya 2 2 Psevdokod iterativna realizaciya 3 Zastosuvannya 4 Skladnist 5 Primitki 6 LiteraturaIdeyared Sut algoritmu polyagaye v tomu shob za danoyu lamanoyu yaka aproksimuye krivu pobuduvati lamanu z menshoyu kilkistyu tochok Algoritm viznachaye rozbizhnist yaka obchislyuyetsya za maksimalnoyu vidstannyu mizh vihidnoyu i sproshenoyu krivimi Sproshena kriva skladayetsya z pidmnozhini tochok yaki viznachayutsya z pochatkovoyi krivoyi Algoritmred nbsp Zgladzhuvannya kuskovo linijnoyi krivoyi algoritmom Duglasa Pekera nbsp Zgladzhuvannya kuskovo linijnoyi krivoyi algoritmom Duglasa Pekera zalezhno vid parametra e Pochatkova kriva yavlyaye soboyu uporyadkovanij nabir tochok abo linij i zadanu vidstan e gt 0 Pochatkova kriva pokazana na malyunku 0 sproshena na malyunku 4 Algoritm rekursivno dilit liniyu Vhodom algoritmu sluzhat koordinati vsih tochok mizh pershoyu i ostannoyu Persha i ostannya tochka zberigayutsya nezminnimi Pislya chogo algoritm znahodit tochku najbilsh viddalenu vid vidrizka sho z yednuye pershu i ostannyu Yaksho tochka znahoditsya na vidstani menshij e to vsi tochki yaki she ne buli vidznacheni do zberezhennya mozhut buti vikinuti z naboru i otrimana pryama zgladzhuye krivu z tochnistyu ne nizhche e Yaksho zh vidstan bilshe e to algoritm rekursivno viklikaye sebe na nabori vid pochatkovoyi do danoyi i vid danoyi do kincevoyi tochkah sho oznachaye sho dana tochka bude vidznachena do zberezhennya Po zakinchennyu vsih rekursivnih viklikiv vihidna lamana buduyetsya tilki z tih tochok sho buli vidznacheni do zberezhennya Psevdokod rekursivna realizaciya red function DouglasPeucker PointList epsilon Znahodimo tochku z maksimalnoyu vidstannyu vid pryamoyi mizh pershoyu j ostannoyu tochkami naboru dmax 0 index 0 for i 2 to length PointList 1 d PerpendicularDistance PointList i Line PointList 1 PointList end if d gt dmax index i dmax d end end Yaksho maksimalna distanciya bilsha nizh epsilon to rekursivno viklikayemo funkciyu na dilyankah if dmax gt epsilon Recursive call recResults1 DouglasPeucker PointList 1 index epsilon recResults2 DouglasPeucker PointList index end epsilon Buduyemo pidsumkovij nabir tochok ResultList recResults1 1 end 1 recResults2 1 end else ResultList PointList 1 PointList end end Povertayemo rezultat return ResultList end Psevdokod iterativna realizaciya red function DouglasPeucker PointList epsilon U stek zanosimo pershij i ostannij indeksi stack push 0 length PointList 1 U masivi za zadanim indeksom zberigayemo tochku true abo ni false keep point 0 length PointList 1 true while stack empty startIndex stack top first endIndex stack top second stack pop dMax 0 index startIndex for i startIndex 1 to endIndex 1 if keep point i d PerpendicularDistance PointList i Line PointList startIndex PointList endIndex if d gt dMax index i dMax d if dMax gt epsilon stack push startIndex index stack push index endIndex else for j startIndex 1 to endIndex 1 keep point j false for i 0 to length PointList 1 if keep point i ResultList Add PointList i return ResultList Zastosuvannyared Algoritm zastosovuyetsya dlya obrobki vektornoyi grafiki ta pri kartografichnij generalizaciyi Krim togo zastosovuyetsya u robototehnici 2 dlya obrobki rezultativ roboti krugovogo lazernogo dalekomiru i tomu takozh nazivayetsya algoritmom rozbittya i zlittya Skladnistred Ochikuvana skladnist algoritmu mozhe buti ocinena virazom T n 2 T n 2 O n displaystyle T n 2T left frac n 2 right O n nbsp yaka sproshuyetsya yak naslidok osnovnoyi teoremi pro rekurentni spivvidnoshennya v T n 8 n log n displaystyle T n in Theta n log n nbsp Prote v girshomu vipadku skladnist algoritmu O n 2 displaystyle O left n 2 right nbsp Primitkired Heckbert Paul S Garland Michael 1997 Survey of polygonal simplification algorithms PDF 4 Arhiv originalu PDF za 22 kvitnya 2016 Procitovano 23 chervnya 2016 Nguyen and Martinelli and Siegwart 2005 A Comparison of Line Extraction Algorithms using 2D Laser Rangefinder for Indoor Mobile Robotics PDF Arhiv originalu PDF za 17 veresnya 2010 Procitovano 15 chervnya 2016 Arhivovano 2010 09 17 u Wayback Machine Literaturared Urs Ramer An iterative procedure for the polygonal approximation of plane curves Computer Graphics and Image Processing 1 3 244 256 1972 DOI 10 1016 S0146 664X 72 80017 0 David Douglas amp Thomas Peucker Algorithms for the reduction of the number of points required to represent a digitized line or its caricature The Canadian Cartographer 10 2 112 122 1973 DOI 10 3138 FM57 6770 U75U 7727 John Hershberger amp Jack Snoeyink Speeding Up the Douglas Peucker Line Simplification Algorithm Proc 5th Symp on Data Handling 134 143 1992 UBC Tech Report TR 92 07 available at https web archive org web 20160414023022 http www cs ubc ca cgi bin tr 1992 TR 92 07 R O Duda and P E Hart Pattern classification and scene analysis 1973 Wiley New York https web archive org web 20110715184521 http rii ricoh com stork DHS html Visvalingam M and Whyatt J D Line Generalisation by Repeated Elimination of the Smallest Area 1992 CISRG Discussion Paper Series No 10 University of Hull 16 pp https web archive org web 20140210052537 http www2 dcs hull ac uk CISRG publications DPs DP10 DP10 html nbsp Ce nezavershena stattya pro algoritmi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Otrimano z https uk wikipedia org w index php title Algoritm Ramera Duglasa Pekera amp oldid 44063916