Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Recenzii
  • Maparea obiectelor de date. Potrivirea imaginilor pe baza „funcțiilor”

Maparea obiectelor de date. Potrivirea imaginilor pe baza „funcțiilor”

Iată soluția mea comentată în ES3 (detalii după cod):

Object.equals = function(x, y) ( dacă (x === y) returnează adevărat; // dacă ambele x și y sunt nule sau nedefinite și exact la fel dacă (! (x instanță de obiect) || ! (y instanceof Object)) returnează false // dacă nu sunt strict egale, ambele trebuie să fie Objects if (x.constructor !== y.constructor) returnează false // trebuie să aibă exact același lanț de prototip, cel mai apropiat; putem face este // să testăm constructorul pentru (var p în x) ( dacă (! x.hasOwnProperty(p)) continuă; // alte proprietăți au fost testate folosind x.constructor === y.constructor if (! y. .hasOwnProperty(p)) returnează false // permite compararea x[ p ] și y[ p ] când sunt setate la nedefinit dacă (x[ p ] === y[ p ]) continuă; egal dacă (typeof(x[ p ]) !== „obiect”) returnează false // Numerele, șirurile, funcțiile, valorile booleene trebuie să fie strict egale dacă (! Object.equals(x[ p ], y[ p ]); ) return false // Obiectele și tablourile trebuie testate recursiv ) pentru (p în y) ( if (y.hasOwnProperty(p) && ! x.hasOwnProperty(p)) returnează fals; // permite ca x[ p ] să fie setat la nedefinit ) returnează adevărat; )

În timpul dezvoltării acestei soluții, m-am uitat în special la carcasele de colț, la eficiență, dar încercând să ofer o soluție simplă care să funcționeze, sperăm cu o oarecare eleganță. JavaScript permite asta zeroȘi incert proprietăţile şi obiectele sunt prototipuri, ceea ce poate duce la un comportament foarte diferit dacă nu este testat.

Mai întâi am decis să mă extind Obiectîn loc de Obiect.prototip, în principal pentru că nul nu poate fi unul dintre obiectele comparației și că eu cred că nul trebuie să fie un obiect valid pentru a fi comparat cu altul. Există și alte preocupări legitime remarcate de alții cu privire la extindere Obiect.prototip cu privire la posibilele efecte secundare pentru alt cod.

Trebuie avută o grijă deosebită pentru a activa JavaScript, astfel încât proprietățile obiectului să poată fi setate ca incert, adică Există proprietăți ale căror valori sunt setate ca incert. Soluția de mai sus confirmă faptul că ambele obiecte au aceleași proprietăți, care nedefinit pentru un mesaj de egalitate. Acest lucru poate fi realizat numai prin verificarea existenței proprietăților folosind Object.hasOwnProperty(nume_proprietate). De asemenea, rețineți că JSON.stringify() elimină proprietățile care sunt setate ca incert, și, prin urmare, comparațiile care utilizează acest formular vor ignora proprietățile setate la valoare nedefinit.

Funcțiile ar trebui considerate egale doar dacă folosesc aceeași referință, nu doar același cod, deoarece acest lucru nu va ține cont de prototipul acelor funcții. Prin urmare, compararea liniilor de cod nu funcționează pentru a se asigura că au același obiect prototip.

Ambele obiecte trebuie să aibă același lucru lanț de prototipuri, mai degrabă decât aceleași proprietăți. Acest lucru poate fi verificat numai prin comparație între browsere constructor ambele obiecte pentru egalitate strictă. ECMAScript 5 vă va permite să testați prototipul lor real folosind Object.getPrototypeOf(). Unele browsere web oferă și __proto__, care face același lucru. O posibilă îmbunătățire a codului de mai sus ar permite ca una dintre aceste metode să fie utilizată ori de câte ori este posibil.

Utilizarea comparațiilor stricte aici este de o importanță capitală deoarece 2 nu trebuie considerate egale "2.0000" , A fals ar trebui considerate egale zero, incert sau 0 .

Considerentele de eficiență mă fac să compar cât mai curând posibil pentru egalitatea proprietăților. Apoi, numai dacă nu reușește, găsiți tip aceste proprietăți. Accelerarea poate fi semnificativă pentru obiecte mari cu multe proprietăți scalare.

Nu sunt necesare mai mult de două bucle, prima pentru a verifica proprietățile de la obiectul din stânga, a doua pentru a verifica proprietățile din dreapta și pentru a verifica doar existența (nu valoarea) pentru a prinde acele proprietăți care sunt definite cu incert sens.

În general, acest cod gestionează majoritatea cazurilor de colț în doar 16 rânduri de cod (fără comentarii).

Actualizare (13.08.2015). Am implementat o versiune mai eficientă deoarece funcția value_equals() este mai rapidă, gestionează cazurile de colț corecte, cum ar fi NaN și 0-uri, altele decât -0, fără a impune neapărat ordonarea și testarea proprietăților obiectelor pentru referințe ciclice, susținută de peste 100 de teste automate ca test parțial set de proiecte

Pentru a afișa corect această pagină aveți nevoie de un browser cu suport JavaScript.

Procesarea „Potrivirea și corectarea obiectelor”

Procesarea de potrivire și corecție a obiectelor este aplicată dacă maparea obiectelor mapate anterior a fost modificată în Gestionarea distribuției. Apoi, în formularul de procesare pentru descărcarea datelor de la distribuitor, va apărea un link pentru corectarea documentelor care conțin date modificate ( Orez. 7.16 ) .

Procesarea poate fi începută în două moduri:

    din subsistemul Date Distribuitor pentru a modifica maparea direct prin procesare;

Pentru a selecta datele despre un distribuitor, introduceți numele distribuitorului în câmpul „Distributor” și faceți clic pe butonul „” pentru a afișa datele descărcate din MS-ul distribuitorului.

Să ne uităm la compararea nomenclaturii ca exemplu.

Orez. 7.13. Procesarea „Potrivirea și corectarea obiectelor”

Partea tabulară afișează elementul director în baza de date a distribuitorului și potrivirea acestuia în baza de date a producătorului.

Conformitatea este indicată din directorul " Nomenclatură". Acest lucru se poate face manual sau folosind butonul " Găsiți similare". Căutarea poate fi efectuată după numărul articolului (dacă setarea „Afișează numărul articolului” este activată) sau după nume. Dacă căutarea nu găsește o potrivire completă, atunci o nomenclatură cu o potrivire parțială a articolului sau numelui va fi înlocuit.

Este evidențiată o mapare modificată, dar nesalvată cu aldine.

Caseta de bifat " Arată articolul" controlează afișarea SKU-ului produsului distribuitorului și a produsului potrivit.

Modul de vizualizare a listei de elemente din secțiunea tabelară este configurat în meniul „Mai multe” al secțiunii tabelare ( Orez. 7.14). Dacă procesarea este începută după efectuarea modificărilor prin „ Descărcarea datelor de la distribuitori"sau director" Nomenclatorul distribuitorilor", atunci lista de produse va fi filtrată bifând caseta " Doar schimbat".

Pentru a corecta documentele aveți nevoie de:

Imprimare (Ctrl+P)

Mecanism de potrivire a datelor la schimbul printr-un format universal

Mecanismul de potrivire a datelor este conceput pentru a rezolva problema sincronizării datelor între baza sursă și baza receptorului în timpul schimbului

Identificatori interni de obiect

În mod ideal, datele din aplicațiile sincronizate ar putea fi asociate cu identificatori interni unici de obiect (GUID). Dar pentru aceasta este necesar ca adăugarea datelor de sincronizat să se efectueze numai într-o aplicație, iar în cealaltă aceste date să apară numai ca urmare a sincronizării. În acest caz, GUID-urile din două aplicații pentru obiecte identice vor fi aceleași și va fi posibilă compararea unică a obiectelor după acestea.

În practică, nu este întotdeauna posibil să se respecte această cerință, mai ales când se configurează sincronizarea între aplicații care funcționează independent. Acest lucru se datorează faptului că două obiecte identice create în paralel în fiecare aplicație vor avea două GUID-uri diferite.

În unele cazuri, datele nu pot fi corelate prin GUID, deoarece lipsesc (cazuri speciale care nu sunt acoperite în acest articol).

Identificatori de obiecte publice

Pentru a potrivi cu succes obiecte cu GUID-uri diferite, trebuie să existe un loc pentru a stoca informații despre corespondența lor. Acest loc este registrul de informații Identificatori publici ai obiectelor sincronizate(Mai departe BRAD).

Orez. 1 Registrul de informații Identificatori publici ai obiectelor sincronizate

Structura registrului este prezentată în tabel:

Pentru a compara datele din două programe, procesarea „Compararea obiectelor de bază de informații” este destinată în BSP 2.3 pentru utilizare directă la sincronizarea datelor


Fig 2. Principala formă de prelucrare „Compararea obiectelor de bază de informații”

Lista se deschide la comandă Efectuați maparea Pe pagina Maparea datelor Asistent interactiv de sincronizare a datelor. De asemenea, puteți face dublu clic pe rândul care are probleme de mapare a datelor.

Lista este formată din două coloane, fiecare dintre ele corespunde bazei de informații care participă la schimb. Datele sunt grupate pe obiecte de program (documente, liste). În partea de jos a listei, este afișată o linie de informații: câte elemente sunt potrivite și câte nu sunt potrivite.

În câmp Retrage Puteți alege ce date să afișați în listă. În mod implicit, acestea sunt afișate Date nepotrivite.

Potrivirea obiectelor

  • Clic Potriviți automat(recomandat), selectați câmpurile pentru a se potrivi folosind casetele de selectare. Unele câmpuri sunt selectate implicit de program. Pentru a confirma alegerea, faceți clic Efectuați maparea. După căutare, programul afișează datele cu care se potrivesc. Faceți clic pentru a confirma aplica.
  • După potrivirea automată, puteți potrivi manual obiectele rămase sau puteți modifica maparea obiectelor. Selectați obiectele necesare din cele două baze de date, faceți clic Nepotrivire, pentru a încerca să potriviți manual obiectele, faceți clic Meci pentru a compara obiecte.
  • Faceți clic pentru a confirma Salveaza si inchide.

Setarea câmpurilor pentru tabelul de cartografiere

  • Clic Coloane pentru a adăuga câmpuri la coloanele listei. Puteți utiliza casetele de selectare pentru a marca câmpuri suplimentare; faceți clic pentru a confirma. aplica.

Primirea datelor de la alt program

Ordinea de potrivire a obiectelor

  • Se recomandă efectuarea mapării și încărcării datelor ținând cont de relațiile de referință. Mai ales dacă câmpul este folosit pentru a potrivi obiecte.
  • De exemplu, în configurație există un director de contracte de contrapartidă, care este subordonat directorului de contrapărți. Compararea acordurilor de contrapartidă se realizează în conformitate cu directorul proprietarilor, adică conform directorului contrapartidelor. Prin urmare, pentru a compara corect datele, trebuie mai întâi să comparați și să descărcați directorul contrapărților, iar apoi directorul acordurilor contrapărților.
  • În caz contrar, câmpurile tabelului de mapare pot conține linkuri fictive precum:
    <Объект не найден>(26:a0b9001b24e002fe11dfba347dd41412).
  • Un link fals indică un obiect din baza de informații curentă care nu a fost încă încărcat din mesajul de schimb.

Intrări în BRAD sunt create și de partea expeditorului la confirmarea primirii datelor de către corespondent prin mecanismul de confirmare. În câmp Identificatorîn astfel de înregistrări este stabilit identificatorul original al obiectului. Înregistrarea unor astfel de înregistrări este necesară pentru ca la primirea altor date de la corespondent, să se înțeleagă că acest obiect ar trebui exclus din procedura de căutare pe câmpuri și printr-un identificator unic.

Opțiuni de identificare a obiectelor la primire

Procedura de comparare automată a obiectelor la primire este cuprinsă în regulile de conversie a obiectelor (OCR) destinate primirii datelor. Regulile PKO sunt în modulul general


Fig. 3 Secțiuni ale modulului general Exchange Manager Prin Formatul Universal

Rețineți că ce este în modulul general Manager de schimb prin format universal există toate componentele (reguli de prelucrare a datelor, reguli de conversie a obiectelor etc.) care determină logica aplicată pentru prelucrarea datelor în procesul de primire sau trimitere a acestora. Codul programului pentru acest modul este creat automat utilizând aplicația „Conversia datelor, Ediția 3.0” pe baza regulilor de schimb configurate. Codul modulului poate fi creat manual, dar necesită abilități deosebite din partea dezvoltatorului.

Opțiunea de potrivire (identificare) automată a obiectelor la primire este specificată folosind proprietatea Opțiunea de identificare PKO


Fig 4. Setări de identificare în modulul manager

Există 3 opțiuni (3 valori) pentru identificarea obiectului

  1. Prin identificatorul unic - identificare prin GUID,
  2. Mai întâi prin identificatorul unic, apoi după câmpurile de căutare identificarea prin GUID și câmpuri de căutare,
  3. Prin SearchFields – identificarea prin câmpuri de căutare,

O altă proprietate care definește logica de potrivire este matricea de câmpuri de căutare definite în proprietate Câmpuri de căutare PKO.

Algoritm de căutare în câmp

Opțiunile de căutare specificate în proprietate sunt aplicate secvenţial Câmpuri de căutare PKO folosit la încărcarea obiectului.

Prescripţie.
La compararea în etapa de analiză a datelor, este utilizată doar prima opțiune de căutare - Prin UniqueIdentifier

Trecerea la următoarea opțiune se realizează în două cazuri:

  1. Obiectul care este încărcat nu are niciunul dintre câmpurile specificate în opțiunea de căutare completat.
  2. Opțiunea de căutare nu a returnat niciun rezultat.

Dacă obiectul încărcat conține informații despre GUID-ul sursă și o opțiune de identificare pentru obiectul „După GUID” sau „După GUID și câmpuri de căutare”, atunci căutarea se efectuează între toate obiectele de un anumit tip, cu excepția celor pentru care au avut potriviri. au fost deja stabilite în FIR.

În alte cazuri, căutarea se efectuează între toate obiectele de bază de informații de tipul corespunzător.

Particularități.
La compararea în etapa de analiză a datelor, câmpurile care sunt încărcate nu sunt verificate pentru completare în câmpurile implicate în căutare.

În timpul fazei de analiză a datelor, o potrivire va fi stabilită numai dacă este găsit un obiect destinatar pentru un obiect expeditor.

La etapa de încărcare a datelor se va stabili o potrivire chiar și în cazul în care au fost găsite mai multe obiecte destinatare pentru un obiect expeditor. Într-o astfel de situație, meciul se va stabili cu unul dintre ei.

La etapa de încărcare a datelor, opțiunea de căutare Număr + Data pentru documente funcționează astfel: numărul documentului căutat este verificat pentru o potrivire exactă, data determină intervalul în care se efectuează căutarea după număr. Intervalul în sine este definit ca perioada de unicitate a numerelor documentelor care include data specificată. De exemplu, dacă numerele documentelor sunt unice într-o lună și data este 10 decembrie 2001, atunci căutarea va fi efectuată în intervalul de la 1 decembrie la 31 decembrie 2001.
În timpul fazei de analiză a datelor, această opțiune de căutare va funcționa ca de obicei: ambele câmpuri vor fi verificate pentru o potrivire exactă.

Material de la Technical Vision

La rezolvarea problemei comparării imaginilor, cel mai important rol îl joacă analiza ierarhică a caracteristicilor „primare” ale imaginilor - așa-numitele „trăsături caracteristice”. Astfel de „funcții” pot fi utilizate pentru a compara imaginile curente și cele de referință într-o mare varietate de tehnici, cum ar fi procesarea corelației ierarhice, metodele de vot sau schemele de comparație volumetrică. În acest caz, punctele speciale, liniile, zonele și structurile (grupuri de caracteristici) sunt utilizate ca caracteristici de imagine. Să luăm în considerare pe scurt abordările bazate pe utilizarea caracteristicilor de punct și contur.

Potrivire pe baza caracteristicilor punctuale.

Principalele avantaje ale utilizării punctelor caracteristice pentru sarcinile de detectare sunt simplitatea și viteza extragerii (comparativ cu alte caracteristici utilizate). În plus, nu este întotdeauna posibilă identificarea altor trăsături caracteristice (contururi sau zone bune și clare) în imagini, în timp ce trăsăturile locale pot fi identificate în marea majoritate a cazurilor.

Sarcina de a detecta un obiect dintr-o imagine se rezumă la găsirea punctelor caracteristice și înregistrarea pozițiilor lor relative. Aceste proceduri sunt efectuate mai întâi pe o imagine de referință, apoi pe imaginea țintă, adesea într-o zonă de căutare limitată specifică. Schema generală a algoritmului de căutare a punctelor corespunzătoare constă în mai multe etape:

Identificarea caracteristicilor punctuale din imagini;

Formarea vectorilor caracteristici ai punctelor;

Puncte de potrivire în spațiul caracteristic;

Izolarea și descrierea punctelor caracteristice din imagine este etapa inițială și cheie a algoritmului de identificare, de care depinde rezultatul întregului algoritm. Acest pas a fost discutat mai devreme în secțiunea 4.1.

Cu toate acestea, indiferent cât de complexă este forma invarianților, ei încă nu sunt capabili să caracterizeze obiectul în mod unic în cazuri de $100$(\%). Ambiguitățile, adică cazurile în care diferite obiecte (puncte, zone) din imagine sunt caracterizate de parametri foarte similari, pot fi asociate cu imperfecțiunea invarianților selectați, cu rezoluție scăzută sau zgomot în imagine. Ambiguitățile apar și atunci când în imagine există obiecte care se repetă. O modalitate de a rezolva situațiile ambigue este de a dezvolta invarianți sau alți descriptori mai buni; Această direcție este foarte relevantă în rândul cercetătorilor implicați în viziunea computerizată. O abordare paralelă este utilizarea relațiilor spațiale dintre obiecte.

Algoritmii bazați pe relații spațiale, care aparțin unui nivel superior de procesare decât algoritmii raster, se caracterizează printr-o rezistență mai mare la diverse distorsiuni geometrice și radiometrice. Unul dintre indicatorii „corectitudinii” perechii găsite poate fi acumularea în jurul punctelor care formează astfel de perechi a unui număr mare de alte puncte potrivite corect. Un alt criteriu pe baza căruia puteți elimina greșit legat

Distribuția punctelor singulare

puncte, poate exista un aranjament de puncte relativ la linii drepte. Această secțiune discută filtrele metrice și topologice, care resping potrivirile incorecte pe baza poziției relative a obiectelor din imagine.

Comparație metrică.

Pentru a verifica corectitudinea perechilor candidate, se folosesc informații suplimentare despre aranjarea spațială relativă a punctelor pe planul imaginii. Cu alte cuvinte, aranjarea spațială a punctelor din imaginile din dreapta și din stânga ar trebui să fie similară într-un anumit sens. Aranjamentul spațial poate fi descris ca o matrice de distanță. Să considerăm o mulțime de puncte $A_(1), A_(2), \ldots, A_(i), \ldots, A_(N)$ în planul imaginii (Fig. 8).

Distanțele dintre puncte pot fi scrise ca o matrice de distanțe $\vert \vert r_(ij)\vert \vert $ după cum urmează:

\[ (\begin(array)% & (A_1 ) & (A_2 ) & (...) & (A_i ) & (...) & (A_N ) \\ \hline (A_1 ) & 0 & (r_( 12) ) & (...) & (r_(1i) ) & (...) & (r_(1N) ) \\ (A_2 ) & & 0 & (...) & (r_(2i) ) & (...) & (r_(2N) ) \\ (...) & & & (...) & (...) & (...) & (...) \\ (A_i ) & & & & 0 & (...) & (r_(iN) ) \\ (...) & & & & & (...) & (...) \\ (A_N ) & & & & & & 0 \\ \end(array) ) \]

unde $r_(ik) =\sqrt ((x_i -x_k)^2-(y_i -y_k)^2) $ este distanța euclidiană dintre $A_(i)$ și $A_(k)$, $x_(i ) $, $y_(i)$ - coordonatele punctului $A_(i)$ pe imagine, $x_(k)$, $y_(k)$ - coordonatele punctului $A_(k)$ pe imagine.

Pentru a verifica formarea corectă a perechilor conjugate de puncte, matricele de distanțe ale stânga $\vert \vert r_(ij)^(L)\vert \vert $ și dreapta $\vert \vert r_(ij)^(R) \vert \vert $ imaginile sunt comparate. Pentru a cuantifica legarea eronată, se introduce variabila $\delta _(ij)$,

$$ \delta _(ij) = r_(ij)^(R) - r_( ij)^(L). $$

Analiza histogramei de distribuție $\delta _(ij)$ ne permite să estimăm valoarea pragului de respingere a perechilor eronate $\Delta $ conform criteriului descris mai jos. Rețineți că punctul cu numărul $i$ are $N-1$ conexiuni, iar distanțele corespunzătoare din matricea $\vert \vert r_(ij)\vert \vert $ sunt: ​​$r_(1i)$, $r_( 2i) ,(\ldots), r_(ii)$, $r_(i,i+1),(\ldots),r_(i,N)$. În consecință, vectorul distanță asociat cu numărul de pereche $i$ este $$ \delta_(i)=\(\delta _(1i), \delta _(2i),(\ldots), \delta _(ii), \ delta _(i,i+1),(\ldots), \delta _(i,N)\) $$ unde $$ \vert \vert \delta _(i)\vert \vert = \min\(\ delta _(1i), \delta _(2i),(\ldots), \delta _(ii), \delta _(i,i+1),(\ldots), \delta _(i,N)\ )$$ este norma vectorului $\delta_(i)$.


Perechi de puncte filtrate

O pereche de puncte conjugate este acceptată dacă $\vert \vert \delta _(i)\vert \vert< \Delta $ и отклоняется в противоположном случае. Процедура проверки выполняется для каждого $i$ от $1$ до $N$. Существенно, что предложенный критерий отбора на основе анализа матрицы (5) инвариантен к вращению изображений.

Pentru a face algoritmul mai eficient, se folosește o piramidă de imagini. Aproximația inițială pentru punctele de interes este la nivelul superior al piramidei și este apoi rafinată la nivelurile ulterioare folosind corelația. Un exemplu de funcționare a algoritmului la compararea a două cadre video de testare este prezentat în Fig. 9.

Comparație topologică.

Luați în considerare un triplu de obiecte $\langle R_1^1 ,R_1^2 ,R_1^3 \rangle$ în imaginea $V_1 $ și triplul corespunzător de obiecte $\langle R_2^1 ,R_2^2 ,R_2^3 \rangle$ în imagine $ V_2 $. Un obiect este înțeles ca o zonă a imaginii, de exemplu, un „punct interesant” (să zicem, un unghi sau o extremă locală de luminozitate) și împrejurimile sale, sau o zonă cu o formă mai complexă.

Fie $c_v^i =\langle x_v^i ,y_v^i \rangle$ centrul obiectului (regiunii) $R_v^i$. Funcţie

$$ \begin(gather)\tag(1) \textrm(side) (R_v^1 ,R_v^2 ,R_v^3)= \textrm(sign) \left(\det \left[ ((\begin(array) )(*(20)c) (x_v^3 -x_v^2 ) & (x_v^1 -x_v^2 ) \\ (y_v^3 -y_v^2 ) & (y_v^3 -y_v^2 ) \\ \end(array) )) \right] \right) \end(gather) $$

ia valoarea $-\mbox()1$ dacă $c_v^1 $ se află în partea dreaptă a vectorului direcționat de la $c_v^2 $ la $c_v^2 $, sau valoarea 1 dacă acest punct se află în stânga partea lui. Deci ecuația

$$ \begin(aduna)\tag(2) \textrm(side)(R_1^1 ,R_1^2 ,R_1^3)=\textrm(side)(R_2^1 ,R_2^2 ,R_2^3) \ sfarsit(aduna) $$înseamnă că punctul $c^1$ se află pe aceeași parte a vectorului în ambele imagini. Dacă pentru un anumit punct egalitatea (9) nu este satisfăcută, vom spune că punctul încalcă relația de lateralitate. Acest lucru se întâmplă când cel puțin

Relația laterală - - punctul $c^1$ trebuie să se afle pe aceeași parte (aici - la stânga) a segmentului direcționat de la $c^2$ la $c^3$ în ambele imagini

Cel puțin unul dintre cele trei obiecte este fixat incorect la omologul său din cealaltă imagine sau dacă obiectele nu sunt coplanare și există o deplasare a camerei într-o direcție perpendiculară pe planul 3D care conține centrele lor. În acest din urmă caz, punctul se poate muta în cealaltă parte a vectorului (adică paralaxa sa se va schimba), dar acest lucru se întâmplă doar cu un număr mic de tripleți. Punctele $R_v^1 $, $R_v^2 $ și $R_v^3 $ satisfac sau încalcă egalitatea (9) indiferent de ordinea în care apar în triplu; este necesar doar ca în ambele imagini să fie numerotate în aceeași ordine ciclică (în sensul acelor de ceasornic sau în sens invers acelor de ceasornic). În fig. Figura 10 prezintă tripleți de puncte corespunzătoare care satisfac relația (9).

Când egalitatea (9) este încălcată, putem concluziona că unul dintre obiectele triplei este atribuit incorect, dar în această etapă nu este clar care anume. Un triplu nu este suficient pentru o astfel de concluzie, cu toate acestea, luând în considerare toate tripletele posibile, puteți găsi obiecte care sunt mai probabil decât altele să fie atașate incorect. Ideea principală a metodei propuse în este că obiectele potrivite incorect au mai multe șanse să încalce relația de lateralitate.

Egalitatea (9) este verificată pentru toate triplele regiunilor $\langle R^i,R^j,R^k\rangle,R^i,R^j,R^k\in \Phi _(12)$, unde $\ Phi _(12) $ este setul de regiuni prezente atât în ​​imaginea $V_1 $ cât și în imaginea $V_2 $. Fie $\Phi =\left\( (i\vert R^i\in \Phi _(12) ) \right\)$. La începutul algoritmului, se calculează penalitatea $$ \begin(gather)\tag(3) h(i)=\sum\limits_(j,k\in \Phi \backslash i,j>k) (\left| (\textrm(side)(R_1^ i ,R_1^j ,R_1^k)-\textrm(side)(R_2^i ,R_2^j ,R_2^k)) \right|) , \end(gather) $$ adică de câte ori un obiect $R^i$ încalcă relația de lateralitate (9), pentru toate $i\in \Phi $. Amenda este apoi normalizată la numărul maxim de încălcări posibile:

$$ \begin(gather)\tag(4) h_N (i)=\frac(h(i))((n-1)(n-2)), \quad n=\left| \Phi \right|. \end(aduna) $$

Pe baza (11), obținem că $h_N (i)\în $. Utilizatorul selectează pragul $t_(\textrm(topo)) \în $. Analizând penalitatea pentru toate obiectele, se determină obiectul $R^w$, unde $w=\arg \max _i h_N (i)$, care a încălcat relația (9) mai des decât altele. Dacă $h_N (w)>t_(\textrm(topo)) $, atunci obiectul $R^w$ (adică perechea de obiecte $R_1^w ,R_2^w)$ este considerată incorect ancorată și este eliminată din multimea $\Phi $ La fiecare iteratie, penalitatea $h_N (i)$ este recalculata pe baza obiectelor ramase in $\Phi $ si sunt eliminate perechile care incalca cel mai frecvent relatia (9). Procesul continuă atâta timp cât există obiecte de eliminat, adică până când valoarea maximă a penalizării pentru obiectele rămase este mai mică decât pragul $t_(\textrm(topo))$.

În timpul primelor iterații, atâta timp cât există mulți candidați pentru ștergere în setul $\Phi $, chiar și obiectele legate corect pot avea o valoare de penalizare mare. Cu toate acestea, obiectele legate incorect vor avea o penalizare și mai mare. După îndepărtarea celei mai proaste perechi de obiecte, $h_N(i)$ pentru obiectele rămase va scădea. Când rămân doar perechi de obiecte ancorate corect, mici modificări ale paralaxei vor produce în continuare valori de penalizare diferite de zero.

Valoarea pragului $t_(\textrm(topo))$ afectează numărul de obiecte rămase după filtrarea topologică. O valoare zero a pragului are ca rezultat un număr mic de obiecte rămase, dar toate satisfac pe deplin relația topologică laterală. Această alegere a pragului este rezonabilă pentru imagini relativ plate cu adâncime mică. În cele mai multe cazuri, trebuie avut în vedere faptul că o valoare de prag mică duce la efectul nedorit de ștergere eronată a unui număr de puncte/regiuni ca fiind atribuite incorect. Pe baza numeroaselor experimente cu fotografii de sol și aeriene, este cel mai de dorit să alegeți pragul $t_(\textrm(topo))$ din intervalul [$0(,)03$, $0(,)15$].

Să ilustrăm funcționarea algoritmului cu un exemplu. Lăsați un algoritm să găsească perechi de puncte de $50$ și să le atașați unul altuia (Fig. 11). Cu ochi puteți determina că un număr de puncte sunt atașate unul de celălalt incorect, adică punctele marcate cu același număr sunt situate în locuri diferite în imaginile din stânga și din dreapta.

Acum să trecem coordonatele perechilor de puncte printr-un filtru topologic cu $t_(\textrm(topo)) =0(,)15$ - vor rămâne $21$ perechi de puncte (Fig. 12). Dacă aplicăm o mai strictă

Perechi de puncte de $50$ au fost găsite și legate între ele. Aproximativ 2/3 din potriviri sunt false

După aplicarea filtrului topologic cu $t_(\textrm(topo)) =0(,)15$, perechile de puncte de $29$ au fost eliminate ca potriviri false, lăsând o pereche de $21$

După aplicarea filtrului topologic cu $t_(\textrm(topo)) =0(,)05$ $34$ perechi de puncte au fost eliminate ca potriviri false, lăsând $16$ perechi

filtrarea cu $t_(\textrm(topo)) = 0(,)05$, atunci vor rămâne $16$ perechi de puncte (Fig. 13), iar toate potrivirile sunt corecte. Nu au fost eliminate potriviri adevărate, iar metoda a filtrat cu succes $34$ de perechi, ceea ce înseamnă că $68\%$ din potrivirile originale au fost false.

După cum puteți vedea, metoda de filtrare topologică nu este atât de sensibilă la localizarea spațială exactă a punctelor. Accentul principal în metodă se pune pe poziția relativă a punctelor din imagine.

Complexitatea de calcul a metodei depinde de numărul de perechi incorect legate și, într-o măsură mai mare, de numărul inițial de perechi de obiecte legate. Cea mai mare parte a calculelor este calculul determinantului din formula (8) pentru a verifica toate tripletele posibile de obiecte. În setul original de $\left| \Phi \right|=n$ perechile candidate trebuie verificate $C_n^3 =\frac (n(n-1)(n-2)) (6)$ triplete, deci complexitatea totală a algoritmului este $O (n^ 3)$, care este destul de mult, iar acesta este unul dintre dezavantajele metodei. Pe măsură ce obiectele sunt respinse, numărul tuturor triplelor posibile scade, iar pentru a accelera munca, nu puteți recalcula penalitățile din formula (10), ci numărați doar acei termeni care au inclus obiectul eliminat și apoi scădeți acești termeni din expresie pentru $h(i)$ .

Trebuie remarcat faptul că această metodă nu face față bine situațiilor în care imaginea are un prim plan și un fundal pronunțate. De exemplu, dacă majoritatea regiunilor sunt în prim-plan, atunci regiunile de fundal vor încălca adesea relația de lateralitate (9) din cauza necoplanarității cu regiunile din prim-plan. În acest caz, unele dintre zonele corecte vor fi respinse.

Potrivire pe baza caracteristicilor de contur.

Principalul dezavantaj al caracteristicilor punctuale este instabilitatea lor la modificările radiometrice ale imaginii. În același timp, în imaginile reale acest tip de distorsiune apare destul de des: strălucire, umbre și alte efecte asociate cu modificările condițiilor de iluminare, timpului sau sezonului de fotografiere. Un alt dezavantaj al caracteristicilor punctuale este instabilitatea lor la distorsiunile aspectului. Acest tip de distorsiune apare și în multe probleme de interes practic. Prin urmare, este nevoie de a atrage informații despre forma obiectului în sine ca fiind cea mai rezistentă la schimbări de acest fel, pentru a rezolva problemele de referință coordonate-plan. Forma unui obiect este, desigur, caracteristica sa cea mai stabilă. Una dintre dificultățile sarcinii este că, în practică, sunt destul de frecvente cazurile de schimbări sezoniere ale formei obiectelor naturale (păduri, rezervoare) și artificiale (drumuri) care nu sunt asociate cu distorsiuni radiometrice. Lipsa informațiilor a priori despre modelele schimbărilor sezoniere ale formelor obiectelor complică în mod semnificativ soluția acestei probleme.

Din punct de vedere intuitiv, forma unui obiect este determinată în mare măsură de limitele sale. Într-o imagine plată, limitele sunt contururile. Cercetările psihologilor arată că creierul uman se bazează cel mai mult pe informațiile de contur atunci când recunoaște imaginile. Contururile sunt mai rezistente la schimbările de iluminare, distorsiunile unghiului, sunt invariante la rotație și la schimbările de scară. Avantajele reprezentării conturului includ și o reducere semnificativă a cantității de informații procesate atunci când se compară două sau mai multe imagini, datorită faptului că punctele de contur reprezintă o mică parte din toate punctele din imagine.

În această secțiune, marginile se referă la schimbări bruște ale luminozității imaginilor. În procesul de utilizare a informațiilor de contur pentru potrivirea (legarea) automată a imaginilor, pot fi distinse patru etape principale:

  1. evidențierea punctelor de contur;
  2. trasarea conturului;
  3. descrierea contururilor;
  4. compararea contururilor din spațiul caracteristic selectat.

Metodele de identificare a punctelor de contur au fost deja discutate în detaliu în Secțiunea 3.4. Sarcinile de trasare și descriere a contururilor au fost discutate în Secțiunea 4.1. Să luăm acum în considerare problema comparării contururilor.

Una dintre problemele cheie atunci când se compară contururile în două imagini digitale este selecția atributelor care definesc caracteristicile individuale ale conturului. În acest caz, se pot distinge mai multe tipuri principale de caracteristici: metrice (lungime, lățime, orientare, unghi), analitice (paralelism, dreptate, curbură), topologice (imbricare, proximitate, intersecție, adiacență, suprapunere). În practică, se utilizează un număr destul de mare de atribute de contur: lungime, curbură, suprafață, perimetru, număr și poziția punctelor speciale, indicator de compactitate, poziția centrului de greutate. Pentru a crea algoritmi de recunoaștere mai fiabili, este recomandabil să folosiți combinații de caracteristici de diferite tipuri.

De asemenea, rețineți că în imaginile reale nu este întotdeauna posibil să se identifice un număr suficient de contururi închise. Prin urmare, pentru sarcina de identificare a contururilor, este mai bine să folosiți atribute care nu depind de proprietățile de închidere ale conturului.

În funcție de atributele selectate, sunt utilizate diferite metode de comparare a marginilor.

Compararea contururilor în reprezentarea naturală.

Fie ca imaginea de referință să conțină $N$ contururi diferite $i=1 ,\ldots, N$, apoi $C_L ^i$ este $i$-lea contur de lungime $l_L ^i$. Zona de căutare dintr-o altă imagine conține $M$ diferite contururi $j=1 ,\ldots, M$, apoi $C_R ^j$ este $j$-lea contur al zonei de căutare de lungime $l_R ^j$. $C_L ^i$ și $C_R ^j$ sunt reprezentate de funcțiile de curbură (inflexie) $K_L (l)$ și, respectiv, $K_R (l)$.

Pentru a rezolva problema se poate folosi o procedură de comparare a două contururi, a cărei esență este de a muta secvențial funcția $K_(\textrm(E))(l)$ (contur $C_(\textrm(E))$ ) de-a lungul funcției $K_( \textrm(OP))(l)$ (contur $C_(\textrm(OP))$), iar la fiecare poziție curentă valoarea coeficientului de corelație normalizat $$ k(m, C_ (\textrm(E)) , C_ este calculat (\textrm(OP))) = \frac (\sum\limits_(i=1)^(l_\textrm(E)) (\left((K_(\textrm) (E)) \left((l_i ) \ right)-\bar (K)_(\textrm(E)) ) \right)\left((K_(\textrm(OP)) \left((l_(i) +m) ) \right)-\bar ( K)_(\textrm(OP)) ^m) \right)) )(\sqrt (\sum\limits_(i=1))^(l_(\textrm(E) )) ) (\left((K_(\ textrm(E))) \left((l_i ) \right)-\bar (K)_(\textrm(E)) \right)^2) ) \sqrt (\ sumă\limits_(i=1)^( l_(\textrm(E)) ) (\left((K_(\textrm(OP)) \left((l_(i+m) ) \right)-\bar ( K)_(\textrm(OP)) ^m) \right)^2) ) ), $$ unde $m=1 ,\ldots, l_(\textrm(OP)) -l_(\textrm(E)) $; $K_(\textrm(E)) (l)$ - - funcția de curbură $C_(\textrm(E))$ a conturului; $K_(\textrm(OP)) (l)$ - - funcția de curbură $C_(\textrm(OP))$ a conturului; $\bar (K)_(\textrm(E)) $, $\bar (K)_(\textrm(OP)) ^m$ - - valori medii ale intensității curburii conturului $C_(\textrm( E)) $ și respectiv fragment de contur $C_(\textrm(OP))$.

În acest caz, este necesar ca următoarea condiție să fie îndeplinită: $l_(\textrm(E))

Poziția la care se realizează valoarea maximă a coeficientului de corelație este fixă, iar perechii de contururi $C_(\textrm(E))$ și $C_(\textrm(OP))$ i se atribuie valoarea coeficientului de corelație. la aceasta pozitie.

După ce s-au găsit coeficienții de corelație pentru toate contururile zonei de căutare, este necesar să se selecteze o pereche de contururi ($C_(L) ^i$ și $C_R ^j)$ pentru care coeficientul de corelație ia valoarea maximă. Cu toate acestea, valoarea maximă a coeficientului într-o zonă de căutare limitată nu garantează fiabilitatea rezultatului, deci este necesar să se utilizeze informații suplimentare despre poziția relativă a contururilor. Utilizarea unor astfel de informații face posibilă identificarea identificărilor false.

În această lucrare, pentru verificarea fiabilității identificării, s-au folosit distanțele dintre centrele de greutate ale contururilor, cu perechile de contururi găsite ($C_(L)^i$, $C_R^j)$ și ($ C_(L)^l$, $C_R ^ m)$ pot fi considerate corecte dacă $$ \left| (L_(i,l) -L_(j,m) ) \right|\le \Delta , $$ unde $L_(i,l) $ - este distanța dintre centrele de greutate ale contururilor $C_(_L ) ^i$ și $C_(_L ) ^l$; $L_(j,m) $ - - este distanța dintre centrele de greutate ale contururilor $C_R ^j$ și $C_R ^m$.

Această schemă de identificare a curbelor nu permite compararea segmentelor drepte ale unui contur între ele, ceea ce, desigur, este un dezavantaj al metodei. Acest lucru se datorează faptului că la compararea oricăror două segmente, coeficientul de corelație va lua valori apropiate de unu. Această caracteristică a corelării funcției de curbură necesită introducerea unor condiții suplimentare de filtrare. Din setul de contururi evidențiate în imagine, toate segmentele drepte trebuie excluse.

Compararea punctelor caracteristice ale conturului.

Să se găsească $N_(\textrm(E))$ puncte singulare pentru conturul $C_(\textrm(E))^i$ al imaginii de referință și pentru conturul $C_(\textrm(EP))^j $ din zona de căutare au găsit $N_(\textrm(OP)) $ puncte. În acest caz, zona de căutare $C_(\textrm(E))^i$ în sine conține $N$ contururi. Atunci orice contur $C^i$ poate fi reprezentat ca o funcție $F^i (l)$, luând valori diferite de zero doar în punctele caracteristice găsite ale conturului. Mai mult, dacă la compararea contururilor sunt utilizate doar pozițiile relative ale punctelor, atunci valorile funcției la puncte singulare pot fi setate egale cu unul (Fig. 14).

Reprezentarea unui contur ca functie $F(l)$

Este necesar ca fiecare contur $C_L ^i$ al imaginii de referință să găsească contururile corespunzătoare $C_R ^j$ din zona de căutare.

Pentru a rezolva problema se folosește o procedură de comparare a două contururi, a cărei esență este combinarea secvenţială a punctului $i$ al conturului $C_(\textrm(E))$ ($i=1,\ldots, N_ (\textrm(E)))$ și $j$ puncte de contur $C_(\textrm(OP))$ ($j=1, \ldots, N_(\textrm(OP)))$. În acest caz, este necesar ca condiția $l_(\textrm(E)) să fie îndeplinită

În fiecare poziție fixă, se determină numărul de puncte corespunzătoare pentru care este îndeplinită condiția

\begin(gather*) F_(\textrm(E)) (l_(\textrm(E)) ^i+\Delta _m)=F_(\textrm(OP)) (l_(\textrm(OP)) ^j+\ Delta _m)\ne 0,\\ \Delta _m =l_(\textrm(E)) ^(i+m)-l_(\textrm(E)) ^i, \quad m=1 ,\ldots, N_( \textrm(E)) -i. \end(gather*) Ca urmare a efectuării operațiilor de comparare a contururilor $N$, este necesară selectarea conturului $C_(\textrm(OP)) ^\ast $ care conține numărul maxim de puncte corespunzătoare. Cu toate acestea, pentru a reduce numărul de identificări false, este necesar să se limiteze de mai jos numărul maxim de puncte corespunzătoare găsite. Contururile $C_(\textrm(E)) ^i$ și $C_(\textrm(OP)) ^\ast $ sunt considerate corespunzătoare dacă numărul de puncte găsite este mai mare decât un anumit prag $T$.

Această metodă de comparare este una dintre cele mai rapide și nu necesită calcularea caracteristicilor suplimentare în puncte, cu toate acestea, fiabilitatea unui astfel de algoritm este scăzută. Instabilitatea algoritmului se datorează faptului că pentru datele reale $$ F_(\textrm(E)) (l_(\textrm(E))^i+\Delta_m)=F_(\textrm(OP)) (l_( \textrm( OP))^j+\Delta _m \pm \Delta E_m)\ne 0, $$ unde $\Delta E_m $ este valoarea erorii datorată caracterului discret al datelor sursă și influenței diferitelor zgomote.

O modalitate alternativă de căutare a punctelor corespunzătoare pe două contururi este o schemă în care nu luminozitatea, ci caracteristicile geometrice ale obiectului sunt utilizate pentru comparație, iar toate caracteristicile sunt calculate nu din funcția de intensitate bidimensională $I(x,y) $, dar din funcția unidimensională $F(l )$. Algoritmul pentru găsirea punctelor corespunzătoare constă din trei etape principale:

  1. selectarea atributelor;
  2. căutarea punctelor corespunzătoare într-un spațiu caracteristic multidimensional;
  3. verificarea fiabilității identificării folosind poziția relativă a punctelor pe imagine.;

Următoarele caracteristici sunt utilizate ca atribute punctuale: $M_(0)$, $D$, coeficient de asimetrie. Coeficientul de asimetrie se calculează prin formula $$ a=\frac((\bar M)_3 )(\sigma ^3), $$ unde $(\bar M)_3 $ este momentul central de ordinul trei.

Spre deosebire de metoda anterioară, problema identificării punctelor este rezolvată folosind o căutare geometrică într-un spațiu de caracteristici multidimensionale. Pentru atributele specificate, măsura asemănării punctelor din spațiul caracteristic va avea forma $$ S_(ij) =\frac(\vert M^(\textrm(E))_(0i) -M^(\textrm (OP))_(0j ) \vert )(M_(0\max) -M_(0\min)) +\frac(\vert D^(\textrm(E))_i -D^(\textrm(OP) ))_j \vert )( D_(\max) -D_(\min) ) +\frac(\vert a^(\textrm(E))_i -a^(\textrm(OP))_j \vert )( a_(\max) -a_ (\min) ) $$ Căutarea punctelor corespunzătoare constă în determinarea unei perechi de puncte $\langle i,j \rangle$, $i\in C_(\textrm(E)) $, $j\in C_(\textrm(OP) ) $ pentru care $S_(ij) $ ia cea mai mică valoare din zona de căutare a conturului.

Acest algoritm de identificare a punctelor este mai fiabil. Acest lucru se datorează faptului că distanța euclidiană dintre puncte a fost folosită pentru a testa validitatea.

Cele mai bune articole pe această temă