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

13 Ansichten (letzte 30 Tage)
non
non am 21 Okt. 2023
Kommentiert: non am 22 Okt. 2023
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 Kommentare
Atsushi Ueno
Atsushi Ueno am 21 Okt. 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 am 21 Okt. 2023
saveas() は表示されたfigureの保存に使います。
ボーダーや、colorbarが表示されていればそれごと保存されますので、イメージ部分より大きくなります。
Uenoさんが示されたとおり、イメージ行列のみの保存にはimwrite()を使ってください。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Hiroshi Iwamura
Hiroshi Iwamura am 21 Okt. 2023
Verschoben: Atsushi Ueno am 21 Okt. 2023
非圧縮で保存したい場合は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 Kommentare
Hiroshi Iwamura
Hiroshi Iwamura am 21 Okt. 2023
ああ、回答とコメントを特に気にせず書いてました。 (^-^;
お手数お掛けしました。
non
non am 22 Okt. 2023
Hiroshi Iwamura様・Atsushi Ueno
早速のご回答をありがとうございます。疑問は解決いたしました。
自身の目的には、saveas関数ではなく、imwrite関数を使うべきだというご指摘、大変参考になりました。また、ファイルの保存形式が、使い分けるべきだという点も、大変勉強になりました。ありがとうございました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu イメージ finden Sie in Help Center und File Exchange

Produkte


Version

R2021b

Community Treasure Hunt

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

Start Hunting!