Funzione in Matlab

Darèios89
Vorrei scrivere una funzione che applica un filtro mediano ad un' immagine ma ho dei problemi:

function [B]=mediano(A,m,n)
B=zeros(m,n);
for i=2:m-1
    for j=2:n-1
        vett=[A(i,j-1),A(i,j+1),A(i-1,j),A(i+1,j),A(i-1,j-1),A(i-1,j+1),A(i+1,j-1),A(i+1,j+1)];
        vett=sort(vett);
        lenght=size(vett,2);
        B(i,j)=vett(ceil(lenght/2));
        
    end
end



end


Non gli piace l' istruzione
B=zeros(m,n);


Ma come faccio ad avere un' altra matrice e crearla con quelle dimensioni se così non posso?

Non funziona nemmeno così:

function [B]=mediano(A)
B=zeros(size(A));

Risposte
Rggb1
Che intendi con "non gli piace", che errore ottieni?

Darèios89
Mi dice sempre:

Input argument "A" is undefined.

michealorion
prova così:

function [B]=mediano(A) 

[m,n] = size(A);
B=zeros(m,n); 


Darèios89
No non va......il codice così diventa:

function [B]=funzionemediano(A) 
[m,n] = size(A); 
B=zeros(m,n); 
for i=2:m-1
    for j=2:n-1
        vett=[A(i,j-1),A(i,j+1),A(i-1,j),A(i+1,j),A(i-1,j-1),A(i-1,j+1),A(i+1,j-1),A(i+1,j+1)];
        vett=sort(vett);
        lenght=size(vett,2);
        B(i,j)=vett(ceil(lenght/2));
        
    end
end
end



L'errore è:
??? Input argument "A" is undefined.

Error in ==> funzionemediano at 2
[m,n] = size(A);
 


Ma insomma perchè non posso lavorare e non capisce che si tratta di una matrice..:(

michealorion
mi fai vedere come dichiari la matrice A? l'errore è li per forza

Darèios89
Non la dichiaro......scusa è una funzione, quindi il file viene salvato come funzione, quello che ho postato è un unico file salvato come funzione:

function [B]=funzionemediano(A) 
[m,n] = size(A); 
B=zeros(m,n); 
for i=2:m-1
    for j=2:n-1
        vett=[A(i,j-1),A(i,j+1),A(i-1,j),A(i+1,j),A(i-1,j-1),A(i-1,j+1),A(i+1,j-1),A(i+1,j+1)];
        vett=sort(vett);
        lenght=size(vett,2);
        B(i,j)=vett(ceil(lenght/2));
        
    end
end
end


michealorion
si ok mi sono spiegato male...volevo dire quando invochi la funzione su matlab farai:

funzionemediano(A) ,ma prima devi dichiarare la matrice A come parametro da passare alla funzione ok?

in questo modo per esempio A=[1:2:7;4:2:10;7:2:13] questa è una 3x3 per esempio.

ecco secondo me l'errore sta li.

Darèios89
Ok ora va bene, niente è che mi fissavo ad eseguire la funzione, e pensavo fosse un errore di sintassi, invece testando il prog funziona:

clear all;
close all;

A=double(imread('lena.jpg'));
B=funzionemediano(A);
figure,
subplot(1,2,1), imshow(uint8(A),[]),title('Originale');
subplot(1,2,2), imshow(uint8(B),[]),title('Filtro mediano');


Grazie comunque :)

michealorion
sicuramente il problema sta li...
A=double(imread('lena.jpg'));

una prova che potresti fare è vedere come ti viene fuori A, su matlab scrivi quella riga e vedi che matrice ti viene fuori.

devo scappare...se non risolvi ti aiuto domani

buon lavoro

Darèios89
No no non hai capito, il problema l' ho risolto, è che io eseguivo la funzione e pensavo che ci fossero problemi di sintassi, non avevo eseguito il Main per così dire, quindi ora ho provato e non dà problemi.

michealorion
ah scusami ho letto in fretta... bene meglio cosi!!!

buon lavoro

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.