2014-06-23 18 views
7

ho problema con la riflessione della luce, ecco la foto scattata con la fotocamera standartOpenCV riduzione della luce riflessione

Original Image taken with camera

e processo che faccio

1. blur the image 
    Imgproc.GaussianBlur(blurred, blurred, new Size(17, 17), 
    Imgproc.BORDER_ISOLATED); 
2. create second empty image that using hsv 
    Imgproc.cvtColor(gray0, gray0, Imgproc.COLOR_BGR2HSV); 
3. mix the image color chanel (fromto {0,0}) 
    Core.mixChannels(blurredlist, graylist, fromto); 
4. Threshold, Canny, and delate 
Imgproc.threshold(gray0, gray0, 126, 255, Imgproc.THRESH_TRUNC); 
Imgproc.Canny(gray0, gray0, 50, 70); 
Imgproc.dilate(gray0, gray0, Mat.ones(new Size(3, 3), 0)); 
5. finding the contour 
    Imgproc.findContours(gray0, contours, new Mat(), Imgproc.RETR_EXTERNAL, 
     Imgproc.CHAIN_APPROX_SIMPLE); 
6. magicall filter for biggest contour and stuff 

ed ecco il risultato After Thresholding come posso rimuovere la retroilluminazione o collegare la linea spezzata dal contorno rilevato?

risposta

1

Il problema qui è che la riflessione sovrasatura i pixel. Ci sono due possibili percorsi da seguire qui;

Regolare la condizione

Regolazione della condizione è la via più facile. Controllando semplicemente le condizioni in base alle quali viene scattata l'immagine, è possibile rimuovere la maggior parte (se non tutte) le situazioni difficili (come queste). Pensare di utilizzare filtri polarizzati, meglio (eg; diffusa) di illuminazione, le impostazioni di esposizione migliori, ecc

Regolare l'immagine

L'altra opzione (eg; rimuovere i punti salienti in seguito) è molto più difficile. Ciò è dovuto principalmente al fatto che l'oversaturation distrugge molti dati. Il metodo più comune utilizzato è quello di utilizzare le immagini HDR, che tendono a conservare molti più dati, poiché le immagini vengono scattate a esposizioni diverse. In alcuni casi il problema potrebbe verificarsi a causa della conversione RAW; ma il miglioramento è generalmente abbastanza noioso.

+0

beh, sono nuovo su Android e sto ancora imparando su opencv, ispirato a un'app shot doc https://play.google.com/store/apps/details?id=com.jp.shotdocs in grado di rilevare la carta con lo stesso ambiente. mi chiedo solo, che metodo hanno usato ... –

+1

Per l'aspetto di esso; presumono che la cosa che stai cercando di rilevare sia quadrata. Per esempio; Cercano di adattare diverse linee ai punti dati con la migliore corrispondenza. Come in questo caso, tre delle linee possono essere montate abbastanza facilmente (dato che hai molti punti). Il bordo a sinistra è più difficile, ma ancora possibile poiché solo il "centro" è invisibile. – Nallath

+0

sì, il rilevamento quadrato è ... se lo sfondo è chiaro e non ha alcun riflesso di luce, la precisione è abbastanza buona ma, un riflesso vicino alla carta non riesce a riconoscere il quadrato. –

Problemi correlati