2017-05-16 7 views
0

J'ai écrit ce code:utilisateur invite à sélectionner l'image à partir du dossier dans l'interface graphique Matlab pour calculer PSNR et MSE

InputImage=imread('ground truth 1.jpg'); 
ReconstructedImage=imread('final1.jpg'); 
n=size(InputImage); 
M=n(1); 
N=n(2); 
MSE = sum(sum((InputImage-ReconstructedImage).^2))/(M*N); 
PSNR = 10*log10(256*256/MSE); 
fprintf('\nMSE: %7.2f ', MSE); 
fprintf('\nPSNR: %9.7f dB', PSNR); 

Comment puis-je modifier le codage pour demander à l'utilisateur de sélectionner une image pour InputImage et OutputImage de un fichier? Je l'ai essayé quelque chose comme ça avant

[InFile, InPath] = uigetfile('*.jpg', 'Import image file:'); 
if ~ischar(InFile) 
    disp('User aborted file import'); 
    return; 
end 
[OutFile, OutPath] = uigetfile('*.jpg', 'Export image file:', InPath); 
if ~ischar(OutFile) 
    disp('User aborted file export'); 
    return; 
end 
InFile = fullfile(InPath, InFile); 
OutFile = fullfile(OutPath, OutFile); 

mais je suis arrivé une erreur:

Matirx dimension not agree error 

Répondre

1

Ce code fonctionne très bien.

[InFile, InPath] = uigetfile('*.jpg', 'Import image file:'); 
if ~ischar(InFile) 
    disp('User aborted file import'); 
    return; 
end 

[OutFile, OutPath] = uigetfile('*.jpg', 'Export image file:', InPath); 
if ~ischar(OutFile) 
    disp('User aborted file export'); 
    return; 
end 
InFile = fullfile(InPath, InFile); 
OutFile = fullfile(OutPath, OutFile); 

InputImage=imread(InFile); 
ReconstructedImage=imread(OutFile); 
n=size(InputImage); 
M=n(1); 
N=n(2); 
MSE = sum(sum((InputImage-ReconstructedImage).^2))/(M*N); 
PSNR = 10*log10(256*256/MSE); 
fprintf('\nMSE: %7.2f ', MSE); 
fprintf('\nPSNR: %9.7f dB', PSNR); 

Assurez-vous que la taille de InputImage et ReconstructedImage sont les mêmes.

+0

Pour votre information, les deux fichiers sont disponibles dans le dossier. Quand je cours le codage sans inviter l'entrée d'utilisateur, cela fonctionne très bien. Mais après que je modifie le codage pour inviter à l'entrée de l'utilisateur, il donne une dimension de la matrice non d'accord d'erreur. Toute solution à cela? – jolene

+0

Cette erreur est montrer à quelle ligne du code posté ci-dessus? –

+0

Si l'erreur est montrée dans 'MSE = somme (((InputImage-ReconstructedImage).^2))/(M * N);' alors c'est parce que, la dimension de matrice de 'InputImage' et' ReconstructedImage' sont différentes. Regardez dans l'espace de travail matlab pour confirmer. –