2016-08-11 13 views
-1

Я смотрел в Интернете, а также смотрел здесь (stackoverflow) и не мог найти хороший ответ о том, как реализовать добавление белого гауссовского шума в мой объект qimage. или если есть существующая функция, которую я могу использовать?Добавление белого гауссовского шума с использованием Qt

любые предложения? Thx заранее

+1

Вы проверили [этот вопрос] (http://stackoverflow.com/questions/32889309/adding-gaussian-noise)? – BeyelerStudios

+1

Вы отметили это с помощью qt и qimage. Могу ли я спросить, что вы думаете об этом, по сравнению с другими контейнерами для пиксельных изображений? Вы явно смотрите на части qt, которые могут это сделать? – Aziuth

+0

Сначала, если есть что-то в qt-инструментах, которые могут сделать это, что было бы замечательно. Во-вторых, я столкнулся с решениями, которые на языках, которые я не понимаю, поэтому я ничего не могу понять от них. –

ответ

0

Следующий код помог мне много:

#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); 
}