Algoritmo per filtro gaussiano[cpp]

Qui vengono spostati discussioni e messaggi ritenuti inadeguati per il contenuto o la forma con cui sono stati espressi.
Scrivi risposta
FRALLALERO
Prode Principiante
Messaggi: 11
Iscrizione: giovedì 3 marzo 2016, 15:28
Sesso: Maschile

Algoritmo per filtro gaussiano[cpp]

Messaggio da FRALLALERO »

Salve a tutti, sto cercando di implementare uno script dove,data in ingresso un immagine PGM vi si applica un filtro.
In sostanza devo fare una convoluzione per righe e poi per colonne della matrice che contiene i dati del PGM con un kernel particolare ( 0.061 0.242 0.383 0.242 0.061).

Sto cercando di implementarlo ma trovo molte difficoltà nel gestire copie degli elementi e poi rimettere il tutto in un PGM.

finora ho scritto questo , ma credo che vada rifatto da 0.
Grazie per l'eventuale aiuto

Codice: Seleziona tutto

 void PGMFile::gaussianFilter(){

Vec flt(5);                                        //dichiaro Vettore
flt.setElement(0,0.061);         
flt.setElement(1,0.242);
flt.setElement(2,0.383);
flt.setElement(3,0.242);
flt.setElement(4,0.061);

Vec tmp(320),conv(325);

int righe=(325);
int colonne=(245);

Mat Copia(righe,colonne);          //invoco costruttore per Mat risultante, con dimensioni maggiorate a causa della conv

 


for(int r=0 ; r< rows_ ;  r++){                    //iterativamente copio le righe del file pgm in un vettore tmp,faccio la convoluzione

for (int c=0 ; c< cols_ ; c++){                                  
     tmp.data[c]=data_[r*c];
     for (int i=0;i<cols_;i++)
     double d=tmp[i];
       for(int j=0;j<5;j++)
        copia.dataRows[i+j]->data[c]+=d*flt[j];  }}       //assegno il vettore convoluzione alla matrice copia  

/*---porzione per stampare risultato--------*/
const char *filename="filterresult.pgm";

 FILE *fd = fopen ( filename, "w" );

  // Can't open the file
  if ( fd == NULL )
    return false;
  
  // Write the header
  fprintf(fd,"P2\n");
  fprintf(fd,"# This is a comment\n");
  fprintf(fd,"%d %d\n", cols_, rows_ );
  fprintf(fd,"255\n");
  // Write each pixel value
  unsigned int data_size = rows_*cols_;
  for( int i = 0; i < data_size; i++ )
      fprintf(fd,"%d\n",data_[i]);


return Copia;}  
Avatar utente
giulux
Amministratore
Amministratore
Messaggi: 25440
Iscrizione: domenica 10 gennaio 2010, 12:17
Desktop: ubuntu 18.04
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Sesso: Maschile
Località: Roma

Re: Algoritmo per filtro gaussiano[cpp]

Messaggio da giulux »

Quando capita di duplicare le discussioni cliccare sul tasto ! a destra del post per segnalarlo, senza aspettare che lo faccia qualche altro utente o passi per caso qualcuno dello staff e se ne accorga.
Grazie.
"Non è una segno di buona salute l'essere ben adattato ad una società malata". (Jiddu Krishnarmurti)
Scrivi risposta

Ritorna a “Quarantena”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti