[Digital image processing & Matlab]
Ciao a tutti! Volevo farvi una serie di domande che dipendono però dalla prima che vi farò:
Matlab come rappresenta le immagini in scala di grigi? Praticamente passandogli una immagine in scala di grigi, essa è rappresentata da una matrice con certi valori, a cosa corrispondono questi valori? Non credo siano le intensità dei pixel
grazie in anticipo
Matlab come rappresenta le immagini in scala di grigi? Praticamente passandogli una immagine in scala di grigi, essa è rappresentata da una matrice con certi valori, a cosa corrispondono questi valori? Non credo siano le intensità dei pixel

grazie in anticipo
Risposte
Ciao,
non so risponderti riguardo Matlab propriamente, perchè utilizzo delle librerie in C++ per elaborare immagini, ma vediamo se posso aiutarti.
Hai provato a stampare il contenuto di una cella? sono interi, float? la matrice è in dimensioni di pixel (es. 1024col 768righe) oppure ha un'altra misura?
PS: è una discussione di Informatica secondo me.
non so risponderti riguardo Matlab propriamente, perchè utilizzo delle librerie in C++ per elaborare immagini, ma vediamo se posso aiutarti.
Hai provato a stampare il contenuto di una cella? sono interi, float? la matrice è in dimensioni di pixel (es. 1024col 768righe) oppure ha un'altra misura?
PS: è una discussione di Informatica secondo me.
Ok la matrice ha la stessa grandezza dell'immagine in pixel, quindi forse sono veramente l'intensità dei pixel
comunque sono numeri interi i valori della matrice e vanno da un minino pari a 0 ad un massimo pari a 255. Ho controllato nelle proprietà dell'immagine (che è .tif per la cronaca), e l'immagine ha una profondità in bit pari a 8, il che mi fa riflettere appunto 
edit: l'immagine è 512x512


edit: l'immagine è 512x512
"Blackorgasm":
Ok la matrice ha la stessa grandezza dell'immagine in pixel, quindi forse sono veramente l'intensità dei pixelcomunque sono numeri interi i valori della matrice e vanno da un minino pari a 0 ad un massimo pari a 255. Ho controllato nelle proprietà dell'immagine (che è .tif per la cronaca), e l'immagine ha una profondità in bit pari a 8, il che mi fa riflettere appunto
non può esser altro che l'intensità...8 bit son 255 valori.
Per il tif vuol dire che è un'immagine lossless.
Perfetto
adesso viene il bello, cioè devo implementare il filtro bilaterale.
Ho già implementato la maschera di smoothing guassiana, solo che questa maschera non deve alterare i contorni delle figure nell'immagine. Quindi secondo quello che abbiamo detto i contorni dovrebbero corrispondere a forti differenze di valore di componenti adiacenti della matrice giusto? Il problema è che io uso la funzione "filter2" per implementare il filtraggio in maniera automatica, però non posso in qualche modo "bloccarla" quando il valore centrale della maschera si trova su un pixel di bordo
dovrei implementare il filtraggio in maniera ricorsiva non ottimizzata (cicli for per intendersi), che mi sembra appunto un disastro dal punto di vista computazionale. Qualcuno ha un'idea migliore?

Ho già implementato la maschera di smoothing guassiana, solo che questa maschera non deve alterare i contorni delle figure nell'immagine. Quindi secondo quello che abbiamo detto i contorni dovrebbero corrispondere a forti differenze di valore di componenti adiacenti della matrice giusto? Il problema è che io uso la funzione "filter2" per implementare il filtraggio in maniera automatica, però non posso in qualche modo "bloccarla" quando il valore centrale della maschera si trova su un pixel di bordo


Che tipo di immagini sono, che soggetti? Lo sfondo è monocromo? I soggetti rispetto allo sfondo hanno una netta differenza di colore (contrasto rispetto la scala di grigi)? Sono immagini quasi perfette perciò senza difetti di blurring, sharp, ghost, noise ....
urca quante cose
metto le mani avanti: questo lavoro lo devo fare per la tesina triennale, senza aver fatto nessun corso di elaborazione di immagini (che avrò all'ultimo anno della specialistica), quindi sto pian piano accumulando informazioni a destra e sinistra
per questo sono un po' impacciato.
Allora questa immagine è suddivisa in varie zone, alcune tutte nere o tutte bianche, altre con varie tonalità di grigio, ed altre che sfumano da grigio chiaro a grigio scuro e così via..ed ovviamente hanno forme sia regolari che irregolari (alcune zone sono triangolari, altre una sorta di puzzle ecc..). Questa immagine me l'ha data il prof appunto per testare se l'algoritmo funziona in maniera corretta (perché poi la tesina continua con l'applicazione ad immagini all'infrarosso credo, ancora era da stabilire)


Allora questa immagine è suddivisa in varie zone, alcune tutte nere o tutte bianche, altre con varie tonalità di grigio, ed altre che sfumano da grigio chiaro a grigio scuro e così via..ed ovviamente hanno forme sia regolari che irregolari (alcune zone sono triangolari, altre una sorta di puzzle ecc..). Questa immagine me l'ha data il prof appunto per testare se l'algoritmo funziona in maniera corretta (perché poi la tesina continua con l'applicazione ad immagini all'infrarosso credo, ancora era da stabilire)
è percaso questa o simile




sono riuscito a caricarla

Ciao,
scusa il ritardo...
bene l'immagine è statica.
questo dipende dalle proprietà dell'immagine e dai parametri dell'algoritmo.
certo.
mmm questo è troppo legato all'implementazione di filter2() di matlab. Dovresti implementarla te e fare le dovute modifiche che vuoi.
In alternativa si possono percorrere altre strade penso.
Ma prima dimmi una cosa:
intendi il focus? O proprio l'algoritmo che applica lo smoothing?
scusa il ritardo...
bene l'immagine è statica.
"Blackorgasm":
Perfettoadesso viene il bello, cioè devo implementare il filtro bilaterale.
Ho già implementato la maschera di smoothing guassiana, solo che questa maschera non deve alterare i contorni delle figure nell'immagine.
questo dipende dalle proprietà dell'immagine e dai parametri dell'algoritmo.
Quindi secondo quello che abbiamo detto i contorni dovrebbero corrispondere a forti differenze di valore di componenti adiacenti della matrice giusto?
certo.
Il problema è che io uso la funzione "filter2" per implementare il filtraggio in maniera automatica, però non posso in qualche modo "bloccarla" quando il valore centrale della maschera si trova su un pixel di bordodovrei implementare il filtraggio in maniera ricorsiva non ottimizzata (cicli for per intendersi), che mi sembra appunto un disastro dal punto di vista computazionale. Qualcuno ha un'idea migliore?
mmm questo è troppo legato all'implementazione di filter2() di matlab. Dovresti implementarla te e fare le dovute modifiche che vuoi.
In alternativa si possono percorrere altre strade penso.
Ma prima dimmi una cosa:
la maschera di smoothing guassiana
intendi il focus? O proprio l'algoritmo che applica lo smoothing?
Non ti preoccupare per il ritardo
ti ringrazio per l'aiuto che mi dai
. Allora, intendo il focus; praticamente per ora ho creato una funzione che in ingresso prende l'immagine, la grandezza della maschera e la deviazione standard della gaussiana, ed in uscita restituisce l'immagine filtrata. Il filtraggio lo faccio appunto con filter2, che ora vorrei togliere per inserire il codice che mi permette di mantenere i bordi. Ho seguito questa strada per vedere se creavo in maniera corretta la maschera



Up!
"Blackorgasm":
che ora vorrei togliere per inserire il codice che mi permette di mantenere i bordi.
forse mi son perso qualcosa, intendi il codice simil filter2() modificato?
Cmq fammi vedere il risultato di filter2() con i parametri attuali che hai inserito.
esatto dico quello 
l'immagine filtrata con parametri N=9 (grandezza maschera) e stds=5 (deviazione standard gaussiana) è questa:
[img]http://i.imgur.com/FVJsb.jpg?1[/img]
metto anche il codice della funzione fatto fino ad ora:

l'immagine filtrata con parametri N=9 (grandezza maschera) e stds=5 (deviazione standard gaussiana) è questa:
[img]http://i.imgur.com/FVJsb.jpg?1[/img]
metto anche il codice della funzione fatto fino ad ora:
function [ image_out,K ] = bilateral( image_in,N,stds ) A=double(image_in); z=-(N-1)/2:(N-1)/2; [x,y]=meshgrid(z); arg=-(x.^2+y.^2)/(2*stds^2); K=exp(arg); % normalizzazione s=sum(K(:)); if s~=0 gauss=K/s; end image_out=uint8(filter2(gauss,A)); end
grazie.
mmm che schifezzuola. Hai provato ad aumentare la maschera mantendendo la deviazione fissa?
Rissumendo: quello che vuoi fare è fare un blurring della superficie di ogni oggetto e separare nettamente i bordi, oppure vuoi fare anche un blurring sui bordi più leggero da armonizzare il tutto?
mmm che schifezzuola. Hai provato ad aumentare la maschera mantendendo la deviazione fissa?
Rissumendo: quello che vuoi fare è fare un blurring della superficie di ogni oggetto e separare nettamente i bordi, oppure vuoi fare anche un blurring sui bordi più leggero da armonizzare il tutto?
Si ho fatto varie prove: deviazione fissa ed incremento della maschera e viceversa, aumento (e decremento) contemporaneo della maschera e della deviazione. Si, il mio obiettivo è fare blurring mantenendo nettamente i bordi. A questo punto come mi hai detto voglio provare a modificare la filter2, eventualmente posto qualche problema se lo incontro 
ps: ma schifezzuola perché non dovrebbe venire così?

ps: ma schifezzuola perché non dovrebbe venire così?
Non so se ti può essere di aiuto ma potresti prendere qualche spunto dal loro edge-directed reconstruction filter.
"Blackorgasm":
Si, il mio obiettivo è fare blurring mantenendo nettamente i bordi.
bene.
Un'idea è che potresti suddividere la figura con un edge-detector (canny, susan, ...) ed utilizzare il risultato come una maschera di taglio.
Ogni suddivisione la dividi in alcune sub-image a seconda del blurring che tu sita cercando.
Come vedi ci sono diverse sfumature, puoi utilizzare una sezione più chiara con quella vicina più scura per un blurring più adatto per quella superficie (si amalgamano meglio).
Un'altra idea (sempre con l'edge detector) è fare un blurring globale (come ha fatto), ma aggiungere in sovraimmagine la maschera di taglio dei bordi così hai la suddivisione netta...
A questo punto come mi hai detto voglio provare a modificare la filter2, eventualmente posto qualche problema se lo incontro
era solo una proposta, sarebbe da studiare a dovere e non è così facile a mio parere.
ps: ma schifezzuola perché non dovrebbe venire così?
mi aspetterei un risultato più armonioso, questo è proprio sfocato.
@vict85: grazie gli darò sicuramente un'occhiata 
@hamming_burst: grazie di tutto l'aiuto che mi hai dato fino ad ora
provo a fare qualcosa e nell'eventualità posto i problemi quiì

@hamming_burst: grazie di tutto l'aiuto che mi hai dato fino ad ora

