Deviazione Standard
Salve,
vi espongo il mio problema:
ho un array di 256 elementi (rappresentano i valori RGB di un istogramma esempio: il valore array[0] mi indica quante volte il pixel 0 è ripetuto nell'istogramma R, G o B)
comunque, in pratica devo determinare la Deviazione Standard come fa Gimp o Photoshop in java.
Ho provato diverse formule ma il risultato si discosta da quello dato da questi due programmi di Foto, qualcuno sarebbe così gentile da postarmi la formula corretta per calcolare questa Deviazione Standard??
grazie
vi espongo il mio problema:
ho un array di 256 elementi (rappresentano i valori RGB di un istogramma esempio: il valore array[0] mi indica quante volte il pixel 0 è ripetuto nell'istogramma R, G o B)
comunque, in pratica devo determinare la Deviazione Standard come fa Gimp o Photoshop in java.
Ho provato diverse formule ma il risultato si discosta da quello dato da questi due programmi di Foto, qualcuno sarebbe così gentile da postarmi la formula corretta per calcolare questa Deviazione Standard??
grazie
Risposte
La deviazione standard è pari alla radice quadrata della somma dei quadrati delle differenze tra quantità per livello e media.
Prova questa formula!
Ciao!
Prova questa formula!
Ciao!
Il mio prof ci aggiungeva sempre : "La radice quadrata POSITIVA del..."
La deviazione standard è pari alla radice quadrata della somma dei quadrati delle differenze tra quantità per livello e media.
Credo ci manca un fattore di normalizzazione che è pari alla grandezza del array. 255
ok, provo e vi faccio sapere...
grazie
grazie
Ho provato ad applicare la formula ma vengono risultati troppo grandi, come è possibile??
ho sbagliato qualcosa, vi posto la formula applicata
(math.pow è il quadrato, mentre math.sqrt è la radice quadrata...)
for (int i=0; i<256; i++)
{
DeviazionetempR+=Math.pow((IstoRed*i-MediaR),2);
DeviazionetempG+=Math.pow(((IstoGreen*i)-MediaG),2);
DeviazionetempB+=Math.pow(((IstoBlue*i)-MediaB),2);
}
DeviazioneStandardR=Math.sqrt(DeviazionetempR/256);
DeviazioneStandardG=Math.sqrt(DeviazionetempG/256);
DeviazioneStandardB=Math.sqrt(DeviazionetempB/256);
ho sbagliato qualcosa, vi posto la formula applicata
(math.pow è il quadrato, mentre math.sqrt è la radice quadrata...)
for (int i=0; i<256; i++)
{
DeviazionetempR+=Math.pow((IstoRed*i-MediaR),2);
DeviazionetempG+=Math.pow(((IstoGreen*i)-MediaG),2);
DeviazionetempB+=Math.pow(((IstoBlue*i)-MediaB),2);
}
DeviazioneStandardR=Math.sqrt(DeviazionetempR/256);
DeviazioneStandardG=Math.sqrt(DeviazionetempG/256);
DeviazioneStandardB=Math.sqrt(DeviazionetempB/256);
Se posti tutto il codice è meglio. Comunque le tre medie come le hai calcolate?
io posto anche l'altra parte di codice, comunque non c'entra niente perchè si riferisce alla media che è sicuramente giusta in quanto è lo stesso valore dato da photoshop o gimp
for (int i=0; i<256; i++)
{
MediatempR+=IstoRed*i;
MediatempG+=IstoGreen*i;
MediatempB+=IstoBlue*i;
}
//metodo utilizzato per determinare la Media
//(somma Quantità x Livello / numero totale dei pixel)
MediaR=MediatempR/Totale;
MediaG=MediatempG/Totale;
MediaB=MediatempB/Totale;
//radice quadrata della somma dei quadrati delle differenze tra Quantità x Livello e media
for (int i=0; i<256; i++)
{
DeviazionetempR+=Math.pow((IstoRed*i)-MediaR),2);
DeviazionetempG+=Math.pow(((IstoGreen*i)-MediaG),2);
DeviazionetempB+=Math.pow(((IstoBlue*i)-MediaB),2);
}
DeviazioneStandardR=Math.sqrt(DeviazionetempR/256);
DeviazioneStandardG=Math.sqrt(DeviazionetempG/256);
DeviazioneStandardB=Math.sqrt(DeviazionetempB/256);
ci sarà, forse, un errore nella formula perchè vengono risultati astronomici
Deviazione R 56376.66266996772
Deviazione G 185933.16454879567
Deviazione B 157843.60258122225
for (int i=0; i<256; i++)
{
MediatempR+=IstoRed*i;
MediatempG+=IstoGreen*i;
MediatempB+=IstoBlue*i;
}
//metodo utilizzato per determinare la Media
//(somma Quantità x Livello / numero totale dei pixel)
MediaR=MediatempR/Totale;
MediaG=MediatempG/Totale;
MediaB=MediatempB/Totale;
//radice quadrata della somma dei quadrati delle differenze tra Quantità x Livello e media
for (int i=0; i<256; i++)
{
DeviazionetempR+=Math.pow((IstoRed*i)-MediaR),2);
DeviazionetempG+=Math.pow(((IstoGreen*i)-MediaG),2);
DeviazionetempB+=Math.pow(((IstoBlue*i)-MediaB),2);
}
DeviazioneStandardR=Math.sqrt(DeviazionetempR/256);
DeviazioneStandardG=Math.sqrt(DeviazionetempG/256);
DeviazioneStandardB=Math.sqrt(DeviazionetempB/256);
ci sarà, forse, un errore nella formula perchè vengono risultati astronomici
Deviazione R 56376.66266996772
Deviazione G 185933.16454879567
Deviazione B 157843.60258122225
"pippuzzo80":
//radice quadrata della somma dei quadrati delle differenze tra Quantità x Livello e media
for (int i=0; i<256; i++)
{
DeviazionetempR+=Math.pow((IstoRed*i)-MediaR),2);
DeviazionetempG+=Math.pow(((IstoGreen*i)-MediaG),2);
DeviazionetempB+=Math.pow(((IstoBlue*i)-MediaB),2);
}
Non mi è chiaro perchè moltiplichi ciascun elemento dei vettori per il proprio indice.
perchè nella formula scritta sopra recita: differenze tra Quantità x Livello e media
comunque ho anche provato a toglierlo il risultato sono questi valore:
Deviazione Standard R: 586.0909853745022
Deviazione Standard G: 726.5127611796387
Deviazione Standard B 620.566268917065
Quando invece con Gimp o Photoshop mi da questi risultati:
Deviazione Standard R: 49.3
Deviazione Standard G: 86,9
Deviazione Standard B 96,6
ma come è possibile tutta questa differenza??
comunque ho anche provato a toglierlo il risultato sono questi valore:
Deviazione Standard R: 586.0909853745022
Deviazione Standard G: 726.5127611796387
Deviazione Standard B 620.566268917065
Quando invece con Gimp o Photoshop mi da questi risultati:
Deviazione Standard R: 49.3
Deviazione Standard G: 86,9
Deviazione Standard B 96,6
ma come è possibile tutta questa differenza??
Prova a togliere i prodotti con l'indice i; non mi pare che, calcolando una deviazione standard, si debba fare questo prodotto.
"pippuzzo80":
perchè nella formula scritta sopra recita: differenze tra Quantità x Livello e media
comunque ho anche provato a toglierlo il risultato sono questi valore:
Deviazione Standard R: 586.0909853745022
Deviazione Standard G: 726.5127611796387
Deviazione Standard B 620.566268917065
Quando invece con Gimp o Photoshop mi da questi risultati:
Deviazione Standard R: 49.3
Deviazione Standard G: 86,9
Deviazione Standard B 96,6
ma come è possibile tutta questa differenza??
scusa forse non hai letto.... ma ho provato a toglierli ed il risultato è quello scritto sopra...
la cosa strana è che ho trovato in internet diverse formule è tutte si allineano con i valori trovati sopra (586,726,620) ma secondo voi sono dei risultati plausibili oppure sono troppo elevati??? ma allora Gimp o photoshop come cavolo ottiene quei risultati??
Sorry.
Comunque, vedo che lo stesso prodotto appare in precedenza, calcolando la media.
Comunque, vedo che lo stesso prodotto appare in precedenza, calcolando la media.
Il calcolo della media è corretto in quanto si allinea con quello dato da GIMP o photoshop...
Prova ...
scusa prova cosa??

Calcolare la media senza i famigerati prodotti.
ho provato... sempre valori molto alti...
Non so cosa consigliarti: mi pare, a questo punto, che non si tratti del semplice calcolo di una media e di una deviazione standard.
Un'ultima cosa. Vedo delle variabili non inizializzate: le tre Mediatemp, Totale e le tre DeviazioneStandard. Possono indurre errori; inizializzale a 0, tranne Totale, se già non è stato fatto altrove.
questo è solo una parte del codice, ovviamente le variabili sono state inizializzate prima...
grazie comunque dell'aiuto...
grazie comunque dell'aiuto...