2017-02-09 1 views
0

J'ai vu des applications, et je me demandais comment puis-je prendre une photo de l'image par programmation. Définissez comment il doit être transformé pour qu'il soit parallèle à la caméra et non pas biaisé en perspective.Comment l'image de la page peut-elle être redressée pour donner l'impression qu'elle a été numérisée?

Ensuite, combinez plusieurs photos pour créer un fichier pdf. Par exemple, cette application le fait: https://play.google.com/store/apps/details?id=com.appxy.tinyscan&hl=en

+0

http://docs.opencv.org/trunk/da/d6e/tutorial_py_geometric_transformations.html –

+0

voir [vue OpenCV Birdseye sans perte de données] (http : //stackoverflow.com/a/39316776/2521214) donc trouver les points de bord et utiliser l'interpolation bilinéaire ou bicubique pour redresser l'image – Spektre

+0

qui était tellement sur ma tête, visuellement je peux dire ce qui se passe mais assez perdu. Tout livre que vous recommandez qui m'aura aller à la vitesse. –

Répondre

3

Je n'utilise pas de livres pour ces choses triviales si désolé je ne peux pas en recommander (en particulier en anglais). Ce que vous devez faire est la suivante:

control points

  1. image d'entrée
  2. trouverez les principaux contours

    grille idéalement son ensemble, mais même contour extérieur suffit (en cas pas de grille est présent). Vous devez diviser le contour en courbes horizontales (rouge) et verticales (vertes) (ou ensemble de points).

  3. courbes de contour de l'échantillon de 4 points "à égale distance"

    que l'image est déformée (pas seulement tourné), alors nous devons utiliser au moins bi-cube interpolation. Pour cela nous avons besoin de 16 points (Aqua) par patch.

  4. points de miroir ajouter pour couvrir toute la grille

    sur l'image sont en miroir (jaune) les points que pour les contours horizontaux, vous devriez le faire aussi pour les contours verticaux (ne me correspondent à l'image et n'a pas vouloir agrandir la résolution juste pour cela) et aussi pour les points de coin afin que vous ayez des points de contrôle. Le miroir peut être fait linéairement (comme je l'ai fait).

Maintenant, la transformation est effectuée comme suit:

  1. Procédé tous les pixels dst(x0,y0) d'image cible
  2. Poignée x,y comme paramètre d'interpolation cubique

    si xs,ys est la résolution de l'image cible alors:

    u=(3.0*x)/xs 
    v=(3.0*y)/ys 
    

    maintenant interpolation cubique est généralement fait sur le paramètre t=<0.0,1.0) donc
    si u=<0.0,1.0> utilisation t=u et points de contrôle 0,1,2,3.
    si u=<1.0,2.0) utilisation t=u-1.0 et des points de contrôle 1,2,3,4
    si u=<2.0,3.0> utilisation t=u-2.0 et des points de contrôle 2,3,4,5

    en va de même pour les contours verticaux et v. Compute xi,yi en tant que interpolation bi bi de (u,v). Et pixel copie:

    dst(x,y)=src(xi,yi); 
    

    Ceci est juste le plus proche voisin, mais vous pouvez également utiliser bilinéaire pour cette ... Comme courbe cube j'utiliser ce polynomial.

    L'idée derrière l'interpolation bi-cubique est facile. point de calcul correspondant au paramètre u sur 4 contours horizontaux. Cela vous donnera 4 points de contrôle pour l'interpolation cubique finale dans la direction verticale et v comme paramètre. La coordonnée résultante est la position de votre pixel source.

Pour plus d'informations voir:

Dans le cas où vous ne disposez pas d'une grille d'utiliser toute information qui peut être utilisé comme un . Par exemple des lignes de texte peuvent être considérées comme un contour pour cela ...

+0

Je reviendrai avec n'importe quelle question dans 2 jours, ceci est beaucoup de choses pour moi donc supporter avec moi. –

+0

J'avais déjà posé cette question et personne ne pouvait y répondre. Ce n'est pas anodin, je prendrais 6 mois de cours et je me sentirais à l'aise. –

+0

Je suis un développeur web, si vous avez écrit un livre dessus, je l'achète. Quelque chose qui prend le programmeur débutant dans l'anglais simple aux concepts avancés dans le traitement d'image comme ceci. –