Предложите пользователю выбрать изображение из папки в графическом интерфейсе MATLAB для расчета PSNR и 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);

Как изменить кодировку, чтобы предложить пользователю выбрать изображение для InputImage и OutputImage из папки? Я пробовал что-то подобное раньше

[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);

но я получил ошибку:

Matirx dimension not agree error

person jolene    schedule 16.05.2017    source источник


Ответы (1)


Этот код будет работать нормально.

[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);

Убедитесь, что размеры InputImage и ReconstructedImage одинаковы.

person Rijul Sudhir    schedule 16.05.2017
comment
к вашему сведению, оба файла доступны в папке. Когда я запускаю код без запроса ввода пользователя, он работает нормально. Но после того, как я изменю кодировку, чтобы запросить ввод данных пользователем, она выдает ошибку размера матрицы, не согласующуюся с ней. Любое решение для этого? - person jolene; 16.05.2017
comment
Эта ошибка отображается в какой строке приведенного выше кода? - person Rijul Sudhir; 16.05.2017
comment
Если ошибка отображается в MSE = sum(sum((InputImage-ReconstructedImage).^2))/(M*N);, это связано с тем, что размерность матрицы InputImage и ReconstructedImage различна. Посмотрите в рабочей области Matlab, чтобы подтвердить. - person Rijul Sudhir; 16.05.2017
comment
Теперь код работает нормально. И еще один момент: как отобразить эти значения PSNR и MSE в «тексте редактирования» в графическом интерфейсе MATLAB? - person jolene; 16.05.2017
comment
set(handles.edit1, 'string', MSE);, где edit1 — имя тега редактируемого текста - person Rijul Sudhir; 16.05.2017
comment
что, если я хочу отобразить PSNR в одном тексте редактирования и MSE в другом тексте редактирования? Я использую ту же кодировку? - person jolene; 16.05.2017
comment
каждый текст редактирования имеет уникальное имя тега. Если имя тега MSE — edit1, а имя тега PSNR — edit2. Затем set(handles.edit1, 'string', MSE); set(handles.edit2, 'string', PSNR); - person Rijul Sudhir; 16.05.2017
comment
В графическом редакторе Matlab нажмите на edit text, и имя тега отобразится в левом нижнем углу. Что-то вроде Tag: edit1 - person Rijul Sudhir; 16.05.2017
comment
Спасибо большое за вашу помощь. Все работает именно так, как я хотел. Благодарность - person jolene; 17.05.2017