Modificare immagine per ricavarne un particolare istogramma

di il
21 risposte

Modificare immagine per ricavarne un particolare istogramma

Salve,

per una data immagine dovrei ricavarne un istogramma in cui il livello minimo stia a 0, quello massimo a 255 e che tra minimo e massimo il tutto sia scalato linearmente ovvero l'istogramma finale dovrà essere tipo questo spalmato su tutti i 255 livelli di grigio:


Grazie in anticipo a chi mi aiuterà

21 Risposte

  • Re: Modificare immagine per ricavarne un particolare istogramma

    Tu hai un'immagine. Di questa vuoi modificarne l'istogramma giusto? Suppongo che la tua immagine sia in bianco e nero.
    Innanzitutto devi calcolarti il min(A ), dove A è l'immagine, dopo devi traslare A del minimo, che in questa maniera sarà 0. Per riscalare i valori devi semplicemente porre A = max (A)/255*A. Dove adesso A è la matrice traslata del minimo. Visualizza l'istogramma con
    imhist(A)

    La seconda richiesta è più complicata e necessita di molta più teoria, posso suggerirti un paio di libri.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


    Tu hai un'immagine. Di questa vuoi modificarne l'istogramma giusto? Suppongo che la tua immagine sia in bianco e nero.
    Innanzitutto devi calcolarti il min(A ), dove A è l'immagine, dopo devi traslare A del minimo, che in questa maniera sarà 0. Per riscalare i valori devi semplicemente porre A = max (A)/255*A. Dove adesso A è la matrice traslata del minimo. Visualizza l'istogramma con
    imhist(A)

    La seconda richiesta è più complicata e necessita di molta più teoria, posso suggerirti un paio di libri.
    Grazie, ma io ignoro le istruzioni matlab per fare ciò che mi ha suggerito, il mio problema è soprattutto questo perchè un poco di teoria sulla quantizzazione lineare per il secondo punto la conosco.

    A me basterebbe conoscere il codice giusto per risolvere il tutto che poi mi andrei a cercare e studiare, il contrario mi sta richiedendo tanto tempo che non ho, perciò chiedo nei forum.

    Spero possa aiutarmi ancora.
  • Re: Modificare immagine per ricavarne un particolare istogramma

     A = imread('NomeFile.formato');
    m = min(A);
    A = A - m;
    A = 255/max(A)*A;
    inhist(A);
    
    il libro che ti consiglio si chiama "digital Image processing" di Woods e Gonzales, la seconda edizione ha come sottotitolo "usino Matlab", infatti sono già presenti i codici da implementare e ogni cosa da scrivere paragrafo per paragrafo.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


     A = imread('NomeFile.formato');
    m = min(A);
    A = A - m;
    A = 255/max(A)*A;
    inhist (A);
    
    il libro che ti consiglio si chiama "digital Image processing" di Woods e Gonzales, la seconda edizione ha come sottotitolo "usino Matlab", infatti sono già presenti i codici da implementare e ogni cosa da scrivere paragrafo per paragrafo.
    Grazie della risposta ma mi da sempre errore, ho provato sia così:


    che così:


    ps: il libro che mi ha gentilmente suggerito è in inglese giusto? in rete sembra ci sia.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Devi togliere gli spazi, ricopia il codice che ho modificato nella risposta precedente.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


    Devi togliere gli spazi, ricopia il codice che ho modificato nella risposta precedente.
    Pur ricopiando il codice senza spazi lo stesso mi da errore:


    Mi scusi ma a lei va bene invece?

    Ancora grazie.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    L'immagine è in bianco e nero? Che dimensione ha la matrice Im? Se è nxmx3 è un'immagine a colori, anche se lei la vede in bianco e nero. Per renderla in bianco e nero deve scrivere
     Im = rgb2gray(Im);
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


    L'immagine è in bianco e nero? Che dimensione ha la matrice Im? Se è nxmx3 è un'immagine a colori, anche se lei la vede in bianco e nero. Per renderla in bianco e nero deve scrivere
     Im = rgb2gray(Im);
    Si, ma lo stesso quel codice genera errore, ci avevo già provato prima, a lei va bene?



    Grazie per l'aiuto.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Sì, ho fatto un errore io purtroppo.
    
     A = imread('NomeFile.formato');
    A = rgb2gray(A);
    m = min(min(A));
    A = A - m;
    A = 255/max(max(A))*A;
    inhist (A);
    
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


    Sì, ho fatto un errore io purtroppo.
    
     A = imread('NomeFile.formato');
    A = rgb2gray(A);
    m = min(min(A));
    A = A - m;
    A = 255/max(max(A))*A;
    inhist (A);
    
    Si, grazie, adesso il codice funziona ma in verità l'immagine originale è rimasta quasi identica.

    A me interesserebbe avere alla fine un immagine più scura di quella iniziale, per intenderci fare in modo che questo istogramma relativo all'immagine iniziale


    diventi simile a questo di un'altra immagine molto più scura


    Poichè rendere lineare tra min e max è complicato mi chiedevo se esiste un'instruzione diretta in matlab che almeno permetta di "invertire" un'immagine in modo che il suo istogramma abbia, rispetto al centro, l'andamento di destra a sinistra e viceversa così renderei sicuro l'immagine iniziale più scura.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Col codice che ti ho suggerito hai ottenuto semplicemente che il massimo sia 255 e il minimo sia 0. Invertire l'istogramma dal centro equivale a fare il negativo dell'immagine, in matlab si usa la funzione imcomplement.
    Ti ripeto però che per aggiustamenti migliori devi studiare. La rielaborazione delle immagini digitali dipende molto dal problema.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


    Col codice che ti ho suggerito hai ottenuto semplicemente che il massimo sia 255 e il minimo sia 0. Invertire l'istogramma dal centro equivale a fare il negativo dell'immagine, in matlab si usa la funzione imcomplement.
    Ti ripeto però che per aggiustamenti migliori devi studiare. La rielaborazione delle immagini digitali dipende molto dal problema.
    Grazie mille per la gentilezza e disponibilità.

    Si, sto leggendo moltissimo in rete ma non trovo nulla riguardo il discorso di fare in modo che tra minimo e massimo il tutto sia scalato linearmente. Inoltre mi chiedo anche se alla fine si otterebbe davvero un'immagine molto più scura dell'originale, lei cosa ne pensa?

    Di sicuro il comando complement non rende più scura l'immagine originale visto che fornisce semplicemente il negativo quindi ho sbagliato a citarlo.

    Comunque per rendere più scura questa immagine ho già usato il comando imadjust(Im, stretchlim(Im), []) ed eseguito l'equalizzazione ma senza nessun risultato accettabile.

    Insomma ci lavoro su già da quasi 3 settimane, purtroppo non penso che conti solo lo studio ma anche le capacità individuali, oltre che l'esperienza, perciò mi sono rivolta ai forum, quasi per disperazione .

    Buona serata.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Il capitolo 3 del libro che ti ho suggerito parla esclusivamente di come modificare l'intensità dell'immagina partendo dall'istogramma. Fornisce il codice e tutta la base teorica per modificarla come meglio si preferisce. Viene introdotta anche la logica fuzzy e le funzioni per modificarla. Cercare in rete senza sapere cosa cercare non è d'aiuto, leggere un libro sull'argomento invece aiuta moltissimo. Quindi ti ripeto di cercarlo e di leggerlo.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


    Il capitolo 3 del libro che ti ho suggerito parla esclusivamente di come modificare l'intensità dell'immagina partendo dall'istogramma. Fornisce il codice e tutta la base teorica per modificarla come meglio si preferisce. Viene introdotta anche la logica fuzzy e le funzioni per modificarla. Cercare in rete senza sapere cosa cercare non è d'aiuto, leggere un libro sull'argomento invece aiuta moltissimo. Quindi ti ripeto di cercarlo e di leggerlo.
    Buona domenica, le ho mandato prima un msg privato ma penso di aver trovato il libro di cui parla.

    Ho provato ad usare le tecniche fuzzy come nell'esempio della figura 3.28 a pag 157 del libro ma penso di sbagliare qualcosa, il matlab mi restituisce già alla prima istruzione un' errore:


    La verità è che la variabile z così come il resto dell'istruzione non è facile capire da dove derivano e come impostarle, il tutto è estremamente complicato.
Devi accedere o registrarti per scrivere nel forum
21 risposte