View Full Version : Invertire istogramma in Matlab
Miriamast
25-03-2017, 11:28
Buongiorno,
per favore con quali istruzioni è possibile in Matlab invertire un'immagine in modo che il seguente istogramma abbia, rispetto al centro, l'andamento di destra a sinistra e il viceversa:
https://s10.postimg.org/c98tfgr6t/ist_VH_out.jpg (https://postimg.org/image/c98tfgr6t/)
Spero che qualcuno mi aiuti, grazie in anticipo
Miriamast
26-03-2017, 12:11
plot(fliplr(x),y)
dove x e y sono ottenuti dal comando:
[x,y] = hist(...)
Grazie ma con queste istruzioni si ottiene il negativo dell'immagine originale?
Miriamast
26-03-2017, 19:14
ottieni l'immagine scambiata rispetto all'asse delle X:
se x = [0 1 2]
e y = [1 2 3]
plottera' (0,1), (1,2), (2,3)
mentre fliplr(x) = [2 1 0]
plottera' (0,3), (1,2), (2,1)
Ma io ho solo un immagine, non 2 vettori, come faccio ad usare queste istruzioni? Per intenderci dopo aver scritto Im = imread('Fiore.jpg'); cosa devo fare? Grazie
wingman87
27-03-2017, 10:16
Se la matrice letta è di uint8 basta fare
255-Im
Se invece è di double
1-Im
Per scegliere quale istruzione usare puoi identificare il tipo della matrice oppure convertirla direttamente a uno dei due tipi con im2uint8 o im2double
http://it.mathworks.com/help/images/ref/im2uint8.html;jsessionid=f0b5fa7ec8ae74b285615af58751
http://it.mathworks.com/help/matlab/ref/im2double.html
wingman87
29-03-2017, 09:01
ah, per immagine intendo un .fig. Se hai un qualsiasi formato immagine (.png, .jpg etc) non ci puoi fare niente, mi sembrava superfluo specificarlo, ma non si sa mai...
Mi sa che uno di noi non ha capito la richiesta. Io ho capito che Miriamast vuole creare un negativo dell'immagine, invertendo conseguentemente l'istogramma. Per far ciò sono sufficienti 3 istruzioni:
Im = imread('Fiore.jpg');
Im = im2double(Im);
Im = 1-Im;
wingman87
29-03-2017, 12:32
Non è insensato, potrebbe essere uno dei primi esercizi di un corso di elaborazione delle immagini.
Comunque sì, il codice che ho postato crea il negativo dell'immagine, non è un hack, è uno dei modi per farlo. L'istogramma dell'immagine risultante è invertito rispetto a quello di partenza.
wingman87
29-03-2017, 14:31
Sì inverte solamente i colori ma di conseguenza l'istogramma viene invertito rispetto al centro: il nero diventa bianco e viceversa e via così. Suppongo che l'istogramma l'abbia costruito con imhist
https://it.mathworks.com/help/images/ref/imhist.html
Nell'istogramma sull'asse x hai i colori, sull'asse y la frequenza. Invertendo tutti i colori dell'immagine si inverte anche l'istogramma.
Tra l'altro vedendo meglio l'immagine postata noto che sull'asse x ci sono valori interi, quindi il codice diventa
Im = imread('Fiore.jpg');
Im = im2uint8(Im);
Im = 255-Im;
wingman87
30-03-2017, 07:30
Non devi confrontare l'immagine iniziale e quella finale. Devi confrontare l'istogramma dell'immagine iniziale con quello dell'immagine finale. I due istogrammi saranno uno l'inverso dell'altro
Inviato dal mio F5121 utilizzando Tapatalk
wingman87
30-03-2017, 10:07
L'ho scritto poco più su:
Suppongo che l'istogramma l'abbia costruito con imhist
https://it.mathworks.com/help/images/ref/imhist.html
Nell'istogramma sull'asse x hai i colori, sull'asse y la frequenza. Invertendo tutti i colori dell'immagine si inverte anche l'istogramma.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.