元の行列と同じサイズ​でjpeg画像を保存​することはできますか​?

test(214×407×3 uint8)をimshowで表示して、同じサイズ(214×407)の画像を保存することは可能ですか?
下記のコードでは、保存した画像が334×636で、元の行列と異なってしまいました。また、余白はなしで保存したいです。保存後に、画像を呼び出して、元とサイズ・値が同じ行列を得たいです。
何かご存じのことありましたら、ご教示いただきたいです。よろしくお願いいたします。
fig=figure;
imshow(test,'Border','tight');
path_jpeg = 'C:\Users\...\';
filename_jpeg = [path_jpeg,num2str(i)];
saveas(fig,filename_jpeg,'jpeg')

2 comentarios

Atsushi Ueno
Atsushi Ueno el 21 de Oct. de 2023
「なぜ質問の方法では目的通りにならないのか」原因が分かったら回答に記入致します。
目的に対して imwrite 関数を使うのがベストな手段です。サイズが一致する事は確認しました。JPEG形式は非可逆圧縮データなので元のイメージデータと完全に一致しませんでした。
load('test.mat');
path_jpeg = '.';
filename_jpeg = [path_jpeg,filesep,num2str(1),'.jpeg'];
imwrite(test,filename_jpeg,'jpeg');
test2 = imread(filename_jpeg); % saveas 関数ではなくimwrite 関数を使う
size(test) == size(test2) % イメージデータのサイズは一致した
ans = 1×3 logical array
1 1 1
imshow(double(test == test2)); % 見た目は同じだが、イメージデータは完全に一致しない
Hiroshi Iwamura
Hiroshi Iwamura el 21 de Oct. de 2023
saveas() は表示されたfigureの保存に使います。
ボーダーや、colorbarが表示されていればそれごと保存されますので、イメージ部分より大きくなります。
Uenoさんが示されたとおり、イメージ行列のみの保存にはimwrite()を使ってください。

Iniciar sesión para comentar.

 Respuesta aceptada

Hiroshi Iwamura
Hiroshi Iwamura el 21 de Oct. de 2023
Movida: Atsushi Ueno el 21 de Oct. de 2023

2 votos

非圧縮で保存したい場合はtifを使うなどします。
jpg等のロスレスモードも指定できますが、一般的なビューアーではサポートされていないこともあります。
load('test.mat');
imwrite(test,"image.tif",'tif')
I2 = imread("image.tif");
max(abs(test-I2),[],'all')
ans = uint8 0
imwrite(test,"image.jpg",Mode="lossless")
I3 = imread("image.jpg");
max(abs(test-I3),[],'all')
ans = uint8 0
データ自体の保存目的であれば、画像データとして保存する必要はないかとは思いますが。

3 comentarios

Atsushi Ueno
Atsushi Ueno el 21 de Oct. de 2023
これはもう回答になってますよ。
load('test.mat');
% fig=figure; % 画像データを直に保存する為figureは不要
% imshow(test,'Border','tight');
path_jpeg = 'C:\Users\...\';
filename_jpeg = [path_jpeg,num2str(i)];
imwrite(test,"image.tif",'tif'); % saveas(fig,filename_jpeg,'jpeg')
% imwrite(test,"image.jpg",Mode="lossless") % ロスレス(可逆)圧縮も可
Hiroshi Iwamura
Hiroshi Iwamura el 21 de Oct. de 2023
ああ、回答とコメントを特に気にせず書いてました。 (^-^;
お手数お掛けしました。
non
non el 22 de Oct. de 2023
Hiroshi Iwamura様・Atsushi Ueno
早速のご回答をありがとうございます。疑問は解決いたしました。
自身の目的には、saveas関数ではなく、imwrite関数を使うべきだというご指摘、大変参考になりました。また、ファイルの保存形式が、使い分けるべきだという点も、大変勉強になりました。ありがとうございました。

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Productos

Versión

R2021b

Preguntada:

non
el 21 de Oct. de 2023

Comentada:

non
el 22 de Oct. de 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!