2011-04-29 3 views
0
for(int i=0;i<getNumRows();++i) 
{ 
    for(int j=0;j<getNumCols();++j) 
    { 
     int X = hfilter * threebythree(i,j,getData()); 
     int Y = vfilter * threebythree(i,j,getData()); 
     //cout<<X<<","<<Y<<endl; 
    setValue(i,j, sqrt(X*X+Y*Y)); 
    } 
} 
writeToFile(ofilename); 
} 

Image Image::threebythree(int globali,int globalj,int**data){ 
Image neighbor; 
neighbor.setNumRows(3); 
neighbor.setNumCols(3); 
neighbor.AllocateMem(); 
//this algorithm is wrong here, trying to figure out one. 
for(int i=0;i<neighbor.getNumRows();++i) 
{ 
    for(int j=0;j<neighbor.getNumCols();++j) 

ce que je fais ici est que je suis en train de couper une partie de la matrice plus, dans ce cas, ce que les rendements getData(), par exemple, il est 100x100 matrice , Je veux faire face à un voisinage 3x3 autour de chaque pixel de la matrice plus grande à celle nouvellement créée, la condition est que si le voisinage 3x3 sort de la borne dans la matrice 100X100, comme le voisin supérieur des données [0-1] [1] est hors limite, la position correspondante dans la matrice 3x3 est mise à zéro. Comment puis je faire ça?face matrice 3x3 d'un plus grand

+0

Pouvez-vous préciser votre exemple? Il semble que vous nous donniez un code incomplet. Et que voulez-vous dire par "mauvais"? –

+1

Cela est arrivé il n'y a pas si longtemps sur SO. La solution consistait à utiliser une matrice 102x102 dans laquelle les valeurs de bordure sont toutes nulles. Ensuite, vous n'avez pas besoin de code de gestion de bord. – Keith

Répondre

0

Si vous avez la moindre difficulté à créer une classe Image, pourquoi ne pas l'utiliser pour data?

Image Image::threebythree(int globali,int globalj, const Image &data) 
{ 
    Image neighbor; 
    neighbor.setNumRows(3); 
    neighbor.setNumCols(3); 
    neighbor.AllocateMem(); 

    for(int i=0 ; i<=3 ; ++i) 
    for(int j=0 ; j<=3 ; ++j) 
    { 
     if(i+globali-1 >=0 && j+globalj-1 >=0 && 
     i+globali-1 < data.getNumRows() && j+globalj-1 < data.getNumCols()) 
     neighbor[i][j] = data[i+globali-1][j+globalj-1]; 
     else 
     neighbor[i][j] = 0; 
    } 
    return(neighbor); 
} 
Questions connexes