2016-01-14 5 views
1

Я хочу сохранить изображение в файл после imshow(im,[]); для его отображения позже в графическом интерфейсе. Я пытаюсь использовать следующий код, но он не работает.Сохранить изображение из imshow

New= imshow(uint8(MHI{t}),[]); 
imwrite(New,'TMHI.jpg','jpg') 

Любая помощь будет оценена по достоинству. Спасибо.

+0

Попробуйте 'imwrite (uint8 (MHI {t}), 'TMHI.jpg', 'jpg')'. 'imshow' не делает enything для самих данных. ваша переменная 'New' - это только фигурный дескриптор. – Adiel

+0

Мне нужно поставить '[]' иначе изображение не будет отображаться правильно. Но когда я делаю 'imwrite (uint8 (MHI {t}, []), 'TMHI.jpg', 'jpg')' Я получил ошибку. –

+0

Какое сообщение об ошибке? – Daniel

ответ

4

imshow функция используется только для показать изображение в MATLAB. Если вы хотите сохранить его, вам совсем не нужен imshow. И: значение (New), возвращаемое imshow(), является ручкой для фигуры. Вам нужен этот дескриптор, если вы хотите изменить способ отображения фигуры на экране.

Чтобы записать образ на диск, вам нужна только функция imwrite, которая имеет следующий синтаксис:

imwrite(A,filename) 

где A является массивом изображения. Если имя файла заканчивается .jpg, то по умолчанию MATLAB создаст образ JPEG, поэтому вам не нужно указывать его. (Но, конечно, вы все еще можете.)

Но перед сохранением: у вас есть проблема с нормализацией изображения. MATLAB предполагает, что изображение double масштабируется до [0,1] и что изображение uint8 масштабируется до [0,255]. С imshow(im,[]) вы переопределите эти значения по умолчанию и сделайте MATLAB для вычисления новых значений. При сохранении вы столкнетесь с такой же проблемой. Решение - правильно нормализовать изображение. Это можно сделать, используя функцию im2uint8, которая масштабирует ввод до максимального значения 255 и преобразует его в uint8. Обратите внимание, что вы должны удалить минимальное значение вручную, если это необходимо:

newImage = im2uint8(MHI{t} - min(MHI{t}(:))); 
imwrite(newImage,'TMHI.jpg') 
+0

Спасибо за объяснение! оценили! –

+0

Спасибо за перевод моей лени на объясненный ответ и добавив полезную информацию, +1 :) – Adiel

+0

Это не работает для меня, посмотрите мой ответ – Pedro77

2

В случае, если вы действительно нужно сохранить содержимое отображаемой фигуры в MATLAB (иногда также полезно при использовании imagesc для отображения поскольку у него есть разумная логика для правильного масштабирования диапазонов значений), вас может заинтересовать savefig и saveas, который позволяет сохранять содержимое фигуры. Также можно сохранить графики или рисунки с подобными подобъектами.

В этом случае, вы бы использовать что-то вроде:

F = imshow(uint8(MHI{t}),[]); 
saveas('MHI.png'); 

В случае, если вы на самом деле просто нужно сохранить изображение, сохраненное в МГИ {T}, ответ hbaderts «ы это путь ...

+0

Спасибо, проблема, с которой я столкнулся при сохранении фигуры, что она очень большая белая границы. Поэтому, когда я показываю его в графическом интерфейсе, это не выглядит так хорошо. –

0

Просто используйте свою функцию NormalizeImage и сохранить изображение Normaly:

img = NormalizeImage(imgDouble); 
imwrite(img ,'MyImage.png'); 

Моя NormalizeImage функция:

function img8bpp = NormalizeImage(imgDouble) 

minImgDouble = min(imgDouble(:)); 

factor = (255-0)/(max(imgDouble(:)) - minImgDouble); 

%img8bppB = im2uint8(imgDouble-minImgDouble); 

img8bpp = uint8((imgDouble-minImgDouble).*factor); 

%im2uint8 does not work, duno y 
%imgDif = img8bppB - img8bpp; 

end