2015-06-10 12 views
5

Ho un'immagine I che è di tipo double. Voglio convertire l'immagine da double a uint8. Ho provato con entrambi:Come convertire l'immagine da doppio a uint8 in matlab?

  1. I=uint8(I)
  2. I=im2uint8(I).

Quando utilizzo il comando imshow(I), ottengo solo un'immagine nera e nient'altro. Che cosa sto facendo di sbagliato?

+0

'I = im2uint8 (I)' dovrebbe funzionare ... Quali dati sono contenuti nell'immagine dell'utente? puoi mettere un esempio con una matrice 4x4 che riproduce questo errore? Hai provato a fare 'imshow (I, [])'? Se il rimage è doppio con valori da 0-1, puoi fare 'I = uint8 (I * 255);' –

+0

Nota: Dovrebbe essere 'im2uint8', non' img2uint8' – hbaderts

+0

@AnderBiguri signore, nella [domanda] (http://stackoverflow.com/questions/30755905/how-to-superimpose-double-type-image-on-uint8-type-image-using-matlab), l'immagine 'phase_only' è di tipo' double' ma non riuscivo a vedere l'immagine 1. convertendo usando il comando 'im2uint8' e 2.questo' imshow (I) ' – devraj

risposta

6

La funzione im2uint8 presuppone che l'immagine double sia ridimensionata all'intervallo [0,1]. Se l'immagine ha valori superiori a 1 o inferiori a 0, questi valori verranno tagliati. Vedere il seguente esempio:

im2uint8([-1 0 0.5 1 2]) 
ans = 
    0 0 128 255 255 

La soluzione è in scala dell'immagine in ingresso per [0,1] sottraendo il valore minimo e dividendo per la gamma totale:

I = (I - min(I(:)))/(max(I(:)) - min(I(:))); 
I = im2uint8(I); 
imshow(I); 
+0

sì funziona. Ma perché sto ottenendo risultati diversi con il tuo codice precedente e 'imshow (I, [])'? – devraj

+0

'imshow (I, [])' dove 'I' è l'immagine' double' originale, non graduata dovrebbe (e fa) produrre lo stesso risultato di normalizzazione, convertendo in 'uint8' come descritto nella mia risposta. Sei sicuro di aver chiamato 'imshow (I, [])' sull'immagine originale? – hbaderts

+0

sì signore, nella [domanda] (http://stackoverflow.com/questions/30755905/how-to-superimpose-double-type-image-on-uint8-type-image-using-matlab) the 'phase_only' l'immagine per il tuo codice e 'imshow (I, [])' sono diversi. – devraj