2010-12-03 66 views
0

salut dans mon projet je veux donner un certain nombre d'images fixes dans ces images je devrais prendre des images de brassage en entrée, mais la sortie sera comme images séquentielles, il peut comparer le plus proche voisin en utilisant des méthodes d'interpolation mettre en œuvre que plz dites-moi. J'ai un peu de code me dire comment ça craint.interpolation d'image

public InterpolationMethod method = InterpolationMethod.Bilinear; 
    public int newWidth = 0; 
    public int newHeight = 0; 
    try { 
     this.newWidth = Math.Max(1, Math.Min(5000, int.Parse(widthBox.Text))); 
     this.newHeight = Math.Max(1, Math.Min(5000, int.Parse(heightBox.Text))); 
     this.method = (methodCombo.SelectedIndex == 0) 
     ? InterpolationMethod.NearestNeighbor 
     : (methodCombo.SelectedIndex == 1) 
      ? InterpolationMethod.Bilinear 
      : InterpolationMethod.Bicubic; 
     this.DialogResult = DialogResult.OK; 
     this.Close(); 
    } 
    catch (Exception) 
    { 
     MessageBox.Show(this, "Incorrect values are entered", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

Répondre

0

Commencez par interpoler le plus proche voisin - c'est le plus simple. Fondamentalement, l'approche fonctionne comme ceci:

  • mémoire pour votre Allouer nouvelle image (à moins qu'il a déjà été fait pour vous, évidemment)
  • itérer sur tous les pixels de votre nouvelle image. Vous pouvez le faire de la manière que vous voulez, mais la manière la plus courante est appelée "balayage de balayage" ou "balayage de balayage" - vous lisez d'abord les colonnes, et quand vous arrivez à la dernière colonne, vous descendez une rangée et retourne à la première colonne.
    • À chaque position de pixel (row, col), définissez la position correspondante (row_o, col_o) dans l'ancienne image. Par exemple, si l'ancienne image est la moitié de la taille, alors row_o = row/2 et col_o = col/2. Notez que puisque toutes les positions de pixels sont des entiers, il y aura un certain arrondi. Avec l'interpolation du plus proche voisin, c'est un mal nécessaire et vous ne pouvez pas l'éviter.
    • Prenez la valeur de pixel à la position (row_o, col_o) dans l'ancienne image
    • attribuer cette valeur à la nouvelle image à la position (row, col)

Une fois que vous obtenez que de la manière, les autres approches devraient plus de sens

Scanline traversal.

for (i=0; i < image.height; ++i) 
for (j=0; j < image.width; ++j) 
{ 
    // Do stuff here 
} 

À quoi il ressemble:

alt text