Modificare immagine per ricavarne un particolare istogramma

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Modificare immagine per ricavarne un particolare istogramma

    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:
    Immagine
    Gli spazi in Matlab hanno un significato ben preciso, inserirli o non farlo cambia il senso di ciò che si scrive. Nel tuo caso c'è uno spazio tra 0. e 35, a quel punto Matlab dopo il punto si aspetta subito un numero che introduca la parte deciamel, ma ciò non avviene perché il primo carattere che legge è uno spazio.
    Se copi e incolli dal libro ricontrolla sempre perché ci sono spesso errori di spazi e di cambiamenti di carattere durante la copia, questo è dovuto al formato usato dal libro che dovrebbe essere il djvu. Per il resto quella funzione è ottima, e anche le altre definite in quel capitolo. Ti basta provare un po' a cambiare i parametri, e magari riflettere un po' su come agisce ogni funzione, partendo dal grafico.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


    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:
    Immagine
    Gli spazi in Matlab hanno un significato ben preciso, inserirli o non farlo cambia il senso di ciò che si scrive. Nel tuo caso c'è uno spazio tra 0. e 35, a quel punto Matlab dopo il punto si aspetta subito un numero che introduca la parte deciamel, ma ciò non avviene perché il primo carattere che legge è uno spazio.
    Se copi e incolli dal libro ricontrolla sempre perché ci sono spesso errori di spazi e di cambiamenti di carattere durante la copia, questo è dovuto al formato usato dal libro che dovrebbe essere il djvu. Per il resto quella funzione è ottima, e anche le altre definite in quel capitolo. Ti basta provare un po' a cambiare i parametri, e magari riflettere un po' su come agisce ogni funzione, partendo dal grafico.
    Ho letto ora msg privato, grazie, in verità avevo già trovato lo stesso testo in pdf.

    Potreste per favore scrivermi soltanto quali sono le prime istruzioni da inserire per poter usare il codice di pag 156-157 del libro?
    Qualsiasi cosa metto mi da successivamente sempre errore, non ho capito come definire z.

  • Re: Modificare immagine per ricavarne un particolare istogramma

    Dopo che ha creato un nuovo file script che contiene il codice della funzione sigmamf le basta scrivere questo codice.
    
    Im = imread('VH.jpg');
    Im = rgb2gray(Im);
    f = sigmamf(Im,0.35,0.65);
    imshow(f)
    figure(2)
    imhist(f);
    
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


    Dopo che ha creato un nuovo file script che contiene il codice della funzione sigmamf le basta scrivere questo codice.
    
    Im = imread('VH.jpg');
    Im = rgb2gray(Im);
    f = sigmamf(Im,0.35,0.65);
    imshow(f)
    figure(2)
    imhist(f);
    
    Mi scusi ancora per il fastidio che l'arreco, purtroppo non trovo il codice per la funzione sigmamf ovvero sul libro vedo solo questo:


    Dunque per poter usare il codice di pag 156-157 del libro bisogna definire prima tutte le funzioni?

    Ma per rendere un'immagine più scura si può usare quest'altra istruzione?
    https://it.mathworks.com/help/images/ref/imadjust.htm

    Grazie di nuovo.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Mi scusi ancora per il fastidio che l'arreco, purtroppo non trovo il codice per la funzione sigmamf ovvero sul libro vedo solo questo:
    Vuol dire che la funzione sigmamf è definita tramite la funzione "trapezmf", che ha un suo script, anche questo sul libro.
    Dunque per poter usare il codice di pag 156-157 del libro bisogna definire prima tutte le funzioni?

    Ma per rendere un'immagine più scura si può usare quest'altra istruzione?
    https://it.mathworks.com/help/images/ref/imadjust.htm
    Puoi provare, ma come ho già detto, non ci sono metodi universali, dipende tutto dallo scopo e dal risultato che si vuole ottenere.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Saponetta ha scritto:


    Mi scusi ancora per il fastidio che l'arreco, purtroppo non trovo il codice per la funzione sigmamf ovvero sul libro vedo solo questo:
    Vuol dire che la funzione sigmamf è definita tramite la funzione "trapezmf", che ha un suo script, anche questo sul libro.
    Dunque per poter usare il codice di pag 156-157 del libro bisogna definire prima tutte le funzioni?

    Ma per rendere un'immagine più scura si può usare quest'altra istruzione?
    https://it.mathworks.com/help/images/ref/imadjust.htm
    Puoi provare, ma come ho già detto, non ci sono metodi universali, dipende tutto dallo scopo e dal risultato che si vuole ottenere.
    Ok, grazie infinitamente di tutto.

    Purtroppo sto trovando le funzioni fuzzy davvero molto complicate da capire.
    Lo script di trapezmf è a pag 143-144 del libro?

    Può aiutarmi per favore a definire gli script da usare per il codice di pag 156-157 del libro? Non ci riesco proprio.
  • Re: Modificare immagine per ricavarne un particolare istogramma

    Sì, ciononostante provi a fare così come le spiego.
    Definisci la funzione tofloat con questo script
    
    function [out, revertclass] = tofloat(in) 
    %T0FLOAT Convert image to floating point 
    % [OUT, REVERTCLASS] = TOFLOAT(IN) converts the input image IN to 
    % floating-point. If IN is a double or single image, then OUT 
    % equals IN. Otherwise, OUT equals IM2SINGLE(IN). REVERTCLASS is 
    % a function handle that can be used to convert back to the class 
    % of IN. 
    identity = @(x) x; 
    tosingle = @im2single; 
    table = {'uint8', tosingle, @im2uint8 
    'uint16', tosingle, @im2uint16 
    'int16', tosingle, @im2int16 
    'logical', tosingle, @logical 
    'double', identity, identity 
    'single', identity, identity}; 
    classlndex = find(strcmp(class(in), table(:, 1))); 
    if isempty(classlndex) 
    error('Unsupported input image class.'); 
    end 
    out = table{classlndex, 2}(in); 
    revertclass = table{classlndex, 3}; 
    
    Successivamente inserisci queste linee di codice, dove Im è la tua immagine, ma in bianco e nero.
    
    w = [0 1 0; 1 -4, 1; 0 1 0]; 
    f2 = tofloat(Im); 
    g2 = imfilter(f2,w,'replicate');
    g = f2-g2;
    imshow(g)
    
    In questa maniera dovresti avere più dettagli su un'immagine.
    La funzione toflat non fa altro che portare un'immagine a valori double. Il codice dopo applica un filtro 3x3 alla tua immagine, sottraendola vengono meno alcune imperfezioni. Questo perché il filtro mette in luce i contorni, di fatto l'istogramma non viene modificato molto.
Devi accedere o registrarti per scrivere nel forum
21 risposte