Esercizio Matlab immagini
Ciao 
Vorrei capire come affrontare questo quesito, ho un'immagine che presenta un istogramma sbilanciato sui pixel scuri, in pratica mancano totalmente i pixel con un valore di grigio superiore a M. In Matlab devo trovare il valore M e generare un offset additivo dell'immagine, mostrando la nuova immagine ottenuta ed il suo negativo.
Vi ringrazio!

Vorrei capire come affrontare questo quesito, ho un'immagine che presenta un istogramma sbilanciato sui pixel scuri, in pratica mancano totalmente i pixel con un valore di grigio superiore a M. In Matlab devo trovare il valore M e generare un offset additivo dell'immagine, mostrando la nuova immagine ottenuta ed il suo negativo.

Vi ringrazio!
Risposte
In cosa stai incontrando difficoltà?
non sò proprio come approcciare
Hai capito il testo dell'esercizio? Sai cos'è un istogramma e che rapporto ha con l'immagine? Conosci Matlab? Hai mai usato matlab per fare una qualche operazione su delle immagini?
A me sembra sinceramente che sia tutto abbastanza chiaro (a parte con quale regola debba essere scelto l'offset - ma immagino che l'obiettivo sia quello di bilanciare chiari e scuri). Hai idea ad esempio come trovare M?
A me sembra sinceramente che sia tutto abbastanza chiaro (a parte con quale regola debba essere scelto l'offset - ma immagino che l'obiettivo sia quello di bilanciare chiari e scuri). Hai idea ad esempio come trovare M?
"apatriarca":
Hai capito il testo dell'esercizio? Sai cos'è un istogramma e che rapporto ha con l'immagine? Conosci Matlab? Hai mai usato matlab per fare una qualche operazione su delle immagini?
A me sembra sinceramente che sia tutto abbastanza chiaro (a parte con quale regola debba essere scelto l'offset - ma immagino che l'obiettivo sia quello di bilanciare chiari e scuri). Hai idea ad esempio come trovare M?
Ciao
l'istogramma fornisce una rappresentazione sintetica del numero di pixel per livello di grigio se non erro, il comando matlab è imhist(immagine). Ho svolto qualche operazione, filtro di smoothing, trasfomata di fourier 2d, rotazione etc... ma poca roba.
L'istogramma associa ad ogni livello di grigio la frequenza con cui è presente nell'immagine (cioè il numero di pixel con quel valore diviso per il numero di pixel totali). Se l'istogramma mostra che non ci sono valori al di sopra di M, vuol dire che M è il massimo tra i valori presenti all'interno dell'immagine. Puoi quindi trovare M semplicemente usando la funzione max. Ti ricordo che una immagine in matlab è semplicemente una matrice.
quindi
x = imread('immagine.jpg');
M = max(x);
% rimappo valori tra 0 e M portandoli tra 0 e 255
x = x/M*255;
% i valori superiori a M saranno diventati maggiori di 255 e li riporto a 255
idx = find( x >255);
x(idx) = 255;
p.s. per il negativo posso usare questa funzione?
neg = imcomplement(x)
grazie ancora
x = imread('immagine.jpg');
M = max(x);
% rimappo valori tra 0 e M portandoli tra 0 e 255
x = x/M*255;
% i valori superiori a M saranno diventati maggiori di 255 e li riporto a 255
idx = find( x >255);
x(idx) = 255;
p.s. per il negativo posso usare questa funzione?
neg = imcomplement(x)
grazie ancora
Per trovare il massimo non basta scrivere max(x) ma devi usare max(max(x)) oppure max(x(:)) perché max calcola il massimo per ogni colonna quando lavora su matrici bidimensionali come le immagini.. Per il negativo sinceramente non ricordo cosa faceva quella funzione ma immagino possa andare bene..