Ho lavorato a un progetto autonomo nell'elaborazione delle immagini e nella robotica, dove invece come al solito, rilevando i colori e individuando l'oggetto, tenta di rilevare i fori (simili a diversi poligoni) sulla scheda. Per una migliore comprensione della configurazione qui è un'immagine: come migliorare il rilevamento e l'abbinamento dei punti chiave
Come potete vedere devo rilevare questi buchi, scoprire le loro forme e quindi utilizzare il robot per adattare l'oggetto nei fori. Sto usando una telecamera di profondità kinect per ottenere l'immagine di profondità. Il pic è il seguente:
ero perso nei suoi pensieri su come rilevare i buchi con la fotocamera, inizialmente utilizzando adesivo per rimuovere la porzione di fondo e alcuni della parte in primo piano in base alla misurazione della profondità, ma questo non ha funzionato in quanto, a diversi orientamenti della telecamera, i buchi si fondevano con la scacchiera ... qualcosa di simile all'abitudine (diventa completamente bianco). Poi mi sono imbattuto adaptiveThreshold
funzione
adaptiveThreshold(depth1,depth3,255,ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY,7,-1.0);
Con la rimozione del rumore utilizzando erodere, si dilatano, e sfocatura gaussiana; che ha rilevato i buchi in un modo migliore, come mostrato nella foto qui sotto. Poi ho usato il rilevatore di bordo cvCanny per ottenere i bordi ma finora non è stato buono come mostrato nella foto qui sotto.Dopo questo ho provato vari rilevatori di caratteristiche da SIFT, SURF, ORB, GoodFeaturesToTrack e ho scoperto che ORB ha dato il meglio tempi e le caratteristiche rilevate. Successivamente, ho cercato di ottenere la relativa posa della telecamera di un'immagine di una query trovando i suoi punti chiave e facendo corrispondere quei punti chiave per ottenere buoni risultati per la funzione findHomography
. I risultati sono riportati di seguito come nel diagramma:
Alla fine voglio vedere la telecamera relativa posa tra le due immagini e portare il robot che posizione utilizzando i vettori rotazionale e traslazionale ricevuti dal la funzione solvePnP.
Quindi esiste un altro metodo con cui è possibile migliorare la qualità dei fori rilevati per il rilevamento e l'abbinamento dei punti chiave?
avevo provato anche il rilevamento del profilo e approxPolyDP ma le forme approssimate non sono molto buono:
ho provato modificando i parametri d'ingresso di soglia e le funzioni astuti ma questo è il meglio che posso ottenere
Inoltre, è il mio approccio per ottenere la posa della fotocamera corretta?
UPDATE: Non importa quello che ho cercato non ho potuto ottenere buone caratteristiche ripetibili alla mappa. Poi ho letto online che un'immagine di profondità ha una risoluzione economica e viene usata solo per cose come mascherare e ottenere le distanze. Quindi, mi ha colpito il fatto che le caratteristiche non siano corrette a causa dell'immagine a bassa risoluzione con i suoi bordi disordinati. Quindi ho pensato di rilevare le funzioni su un'immagine RGB e di utilizzare l'immagine di profondità per ottenere solo le distanze di tali funzioni. La qualità delle caratteristiche che ho ottenuto sono state letteralmente fuori scala. Ha anche rilevato le viti sulla scheda !! Ecco i punti chiave rilevati utilizzando il rilevamento dei punti chiave GoodFeaturesToTrack. . Ho incontrato un altro ostacolo mentre ottenevo la distanza con le distanze dei punti che non uscivano correttamente. Ho cercato le possibili cause e mi è venuto in mente dopo un po 'che c'era un offset nelle immagini RGB e di profondità a causa dell'offset tra le fotocamere. Si può vedere questo dalle prime due immagini. Ho quindi cercato in rete come compensare questo offset ma non sono riuscito a trovare una soluzione funzionante.
Se qualcuno di voi potrebbe aiutarmi a compensare l'offset, sarebbe fantastico!
UPDATE: non ho potuto fare un buon uso della funzione goodFeaturesToTrack. La funzione fornisce gli angoli in tipo Point2f. Se si desidera calcolare i descrittori, sono necessari i punti chiave e la conversione di Point2f in Keypoint con il frammento di codice sottostante porta alla perdita di scala e all'invarianza di rotazione.
for(size_t i = 0; i < corners1.size(); i++)
{
keypoints_1.push_back(KeyPoint(corners1[i], 1.f));
}
Il risultato ripugnante dall'abbinamento funzione seguito è mostrata .
Devo iniziare ora su diverse corrispondenze di funzionalità. Pubblicherò ulteriori aggiornamenti. Sarebbe davvero utile se qualcuno potesse aiutare a rimuovere il problema di offset.
Ecco resto delle immagini http://www.hostingpics.net/viewer.php ? id = 764686img3.jpg (questa è l'immagine di profondità). – SidJaw
questa è l'immagine con soglia adattativa http://www.hostingpics.net/viewer.php?id=468584adapthresh.png. questa è l'immagine di approxpolyDP http://www.hostingpics.net/viewer.php?id=196889coo.png E chiunque potrebbe essere così gentile da revocare la mia domanda perché ho bisogno di almeno 10 reputazione per pubblicare immagini. – SidJaw
Perché non provi la corrispondenza dei modelli poiché conosci già la forma dei fori su cui il robot deve adattarsi. Nota: la corrispondenza dei modelli non funzionerà correttamente se la dimensione dell'oggetto varia. cioè se la dimensione del rettangolo varia in schede diverse o quando si ingrandisce/rimpicciolisce ecc. – Darshan