2010-06-24 7 views
19

L'immagine funzione fornita da Emgu (un involucro NET per OpenCV) ridimensionamento può utilizzare any one of four interpolation methods:Come si sceglie un metodo di interpolazione dell'immagine? (Emgu/OpenCV)

  1. CV_INTER_NN (default)
  2. CV_INTER_LINEAR
  3. CV_INTER_CUBIC
  4. CV_INTER_AREA

Comprendo approssimativamente l'interpolazione lineare, ma posso solo indovinare cosa fanno cubi o aree. Sospetto che NN sia il vicino più prossimo, ma potrei sbagliarmi.

La ragione per cui sto ridimensionando un'immagine è di ridurre la quantità di pixel (verranno ripetuti a un certo punto) pur conservandoli rappresentativi. Lo dico perché mi sembra che l'interpolazione sia centrale per questo scopo: ottenere il giusto tipo dovrebbe quindi essere abbastanza importante.

La mia domanda, quindi, sono quali sono i pro e i contro di ciascun metodo di interpolazione? In che cosa differiscono e quale dovrei usare?

risposta

19

Il vicino più vicino sarà il più veloce possibile, ma si perderanno informazioni importanti durante il ridimensionamento.

L'interpolazione lineare è meno veloce, ma non comporterà una perdita di informazioni a meno che non sia che stai restringendo l'immagine (che tu sei).

L'interpolazione cubica (probabilmente in realtà "Bicubica") utilizza una delle molte possibili formule che incorporano più pixel adiacenti. Questo è molto meglio per ridurre le immagini, ma si è ancora limitati a quanto si può restringere senza perdita di informazioni. A seconda dell'algoritmo, è possibile ridurre le immagini del 50% o del 75%. L'aspetto principale di questo approccio è che è molto più lento.

Non so quale "area" è - potrebbe essere effettivamente "Bicubico". Con ogni probabilità, questa impostazione darà il risultato migliore (in termini di perdita/aspetto delle informazioni), ma al costo del tempo di elaborazione più lungo.

Update: questo link fornisce ulteriori dettagli (tra cui un quinto tipo non incluso nella lista):

http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html?highlight=resize#resize

9

Il metodo di interpolazione da utilizzare dipende da ciò che si sta cercando di ottenere:

CV_INTER_LINEAR o CV_INTER_CUBIC applicare un filtro passa basso (medio) per ottenere un compromesso tra qualità visiva e edge rem ovale (i filtri passa-basso tendono a rimuovere i bordi per ridurre l'aliasing nelle immagini). Tra questi due, ti raccomanderei lo CV_INTER_CUBIC.

CV_INTER_NN in realtà è il vicino più vicino, è il metodo più semplice e otterrete bordi più nitidi (non verrà applicato alcun filtro passa-basso). Tuttavia questo metodo è semplicemente come "zoomare" l'immagine, nessun miglioramento visivo.

1

Perdono tutte le informazioni, che dipendono dalla velocità di cui hai bisogno, da quante informazioni puoi permetterti di perdere e dalla natura della tua immagine.

Spiacente non c'è ancora nessuna risposta corretta - è per questo che v'è una scelta

4

Gli algoritmi sono: (descrizioni sono dalla documentazione OpenCV)

  • INTER_NEAREST - un vicino-vicino di interpolazione
  • INTER_LINEAR - un'interpolazione bilineare (utilizzata per impostazione predefinita)
  • INTER_AREA - ricampionamento mediante la relazione dell'area dei pixel. Potrebbe essere un metodo preferito per la decimazione dell'immagine, in quanto fornisce risultati senza effetto moiré. Ma quando l'immagine è ingrandita, è simile al metodo INTER_NEAREST.
  • INTER_CUBIC - un'interpolazione bicubica sopra 4x4 quartiere pixel
  • INTER_LANCZOS4 - interpolazione Lanczos sopra 8x8 quartiere pixel

Se si desidera più utilizzare velocità metodo del vicino più vicino.

Se si desidera mantenere la qualità dell'immagine dopo il downsampling, è possibile considerare l'utilizzo dell'interpolazione basata su INTER_AREA, ma di nuovo dipende dal contenuto dell'immagine.

Potete trovare un'analisi dettagliata di confronto velocità here

Di seguito è riportato il confronto della velocità dell'immagine 400 * 400 px sul tratto dal link qui sopra

Speed comparison

+0

Grande risposta, +1. Purtroppo, non sono sicuro che otterrete molto di più, dato che la domanda è di 7 anni. –

+0

Fonte originale: http://tanbakuchi.com/posts/comparison-of-openv-interpolation-algorithms/ – dgorissen

Problemi correlati