Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [Java Matlab] Immagini

  1. #1
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149

    [Java Matlab] Immagini

    ciao,
    è un problema un pò specifico quindi non so se potete aiutarmi...ma sono fiducioso

    allora ho un progetto java che interagisce tramite il JavaBuilder con delle funzioni create in matlab che elaborano delle immagini.

    Ho un problema di ritorno dell'immagine. Mi spiego meglio:
    Ho fatto una funzione che esegue il falso colore dell'immagine passata (imfalsecolor.m).
    elaborando le immagini in matlab ho questo risultato


    che è corretto ed è quello che vorrei ottenere anche in java ma ottengo questo


    e non riesco a capire perchè le immagini siano così diverse dato che utilizzo la stessa funzione.

    in java le immagini sono gestite dalla funzione getBufferedImage

    ho provato a fare una semplice funzione che prende in input una immagine e la restituisce come output (imgetout.m) e funziona correttamente...

    un pò di codici:
    * Matlab: imgetout.m (prende e restituisce immagine)
    Codice PHP:
    function [out] = imgetout(in)
        
    out in;
    end 
    * Matlab: imfalsecolor.m (crea l'immagine in falso colore)
    Codice PHP:
    function [out] = imfalsecolor(im_normalim_iruvtype)
        
    im_iruv_grey rgb2gray(im_iruv);
        
        [
    red green blue] = imsplitrgb(im_normal);
        
        if 
    strcmp(type'ir') == 1
            out
    (:,:,1) = im_iruv_grey;
            
    out(:,:,2) = red;  
            
    out(:,:,3) = green;
        elseif 
    strcmp(type'uv') == 1
            out
    (:,:,1) = green;       
            
    out(:,:,2) = blue;         
            
    out(:,:,3) = im_iruv_grey
        else
            
    display('ERROR: Incorrect transformation type.');
            
    out NaN;
        
    end
    end 
    * Java: getBufferedImage(...) (converte immagine-oggetto di matlab in una BufferedImage)
    Codice PHP:
    public static BufferedImage getBufferedImage(Object[] arg) {
        
    BufferedImage out Images.renderArrayData((MWNumericArrayarg[0]);
        return 
    out;

    spero possiate aiutarmi.
    grazie in anticipo
    "Se in un primo momento
    l'idea non è assurda,
    allora non c'è nessuna speranza
    che si realizzi."
    - Albert Einstein -

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    il codice Java non dice niente.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it L'avatar di elilo
    Registrato dal
    Aug 2007
    Messaggi
    149
    ok, qualche funzione in più

    Images e MWNumericArray fanno parte del JavaBuilder messo a disposizione da Mathworks

    per richiamare la funzione matlab uso questo
    Codice PHP:
    public BufferedImage toIRFalseColor(BufferedImage imgVisBufferedImage imgIrthrows MWException {
        
    MWNumericArray mwnaVis BufferedImage2MWArray(imgVis);
        
    MWNumericArray mwnaIr BufferedImage2MWArray(imgIr);
        
        
    Object[] out mfalsecolor.toFalseColor(1mwnaVismwnaIr"ir");
        
    BufferedImage ret JMI.getBufferedImage(out);
        
        return 
    ret;

    Codice PHP:
    private MWNumericArray BufferedImage2MWArray(BufferedImage img) {
        
    // preallocate array
        
    int[] prePixelsData = new int[img.getHeight()*img.getWidth()*3];
            
        
    // move all image pixels to array
        
    int[] pixelsData img.getData().getPixels(00img.getWidth(), img.getHeight(), prePixelsData);
            
        
    int[][][] vImg = new int[img.getHeight()][img.getWidth()][3];
            
        
    // repackage as a 3D array (MATLAB image format)
        
    int h=0w=0;
        for(
    int k=0k<pixelsData.lengthk+=3) {
            
    vImg[h][w][0] = pixelsData[k];
            
    vImg[h][w][1] = pixelsData[k+1];
            
    vImg[h][w][2] = pixelsData[k+2];
            
            
    w++;
            if(
    img.getWidth() == 0) {
                
    w=0;
                
    h++;
            }
        }
            
        
    // output 3D array [H][W][3]
        
    return new MWNumericArray(vImgMWClassID.INT8);

    "Se in un primo momento
    l'idea non è assurda,
    allora non c'è nessuna speranza
    che si realizzi."
    - Albert Einstein -

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.