Der folgende Code hat mir geholfen, eine Menge:
#include <stdlib.h>
#include <math.h>
#include <time.h>
float gauss_rand(float mean,float stdev)
{
int i;
const int ORDER=2*12; /* 12,24,36 etc. due to del^2/12 */
const double dev_norm=1.4142136; /* sqrt(ORDER/12) */
double rndno;
rndno=-(ORDER>>1);
for(i=0;i<ORDER;i++) {
rndno+=(double)(rand()/(RAND_MAX+1.0));
}
rndno*=stdev/dev_norm;
rndno+=mean;
return((float)rndno);
}
void add_gaussian_noise(float **orig,int Ni,int Nj,float **noisy,float mean,float stdev)
{
int i,j;
static int kilroy=0;
unsigned int seed;
if(!kilroy) {
kilroy=1;
seed=(unsigned)time(NULL);
// uncomment for the same noise process
// seed=0;
srand(seed);
}
for(i=0;i<Ni;i++)
for(j=0;j<Nj;j++)
noisy[i][j]=orig[i][j]+gauss_rand(mean,stdev);
}
Haben Sie überprüfen [diese Frage] (http://stackoverflow.com/questions/32889309/adding-gaussian-noise)? – BeyelerStudios
Sie haben dies mit qt und qimage beschriftet. Darf ich fragen, was Sie im Vergleich zu anderen Containern für Pixelbilder von anderen unterscheiden? Suchst du explizit nach Teilen von qt, die das können? – Aziuth
Zuerst, wenn es etwas in Qt-Tools gibt, die es tun können, wäre das wunderbar. Zweitens habe ich Lösungen gefunden, die in Sprachen, die ich nicht verstehe, so dass ich nichts von ihnen verstehen kann. –