필터 지우기
필터 지우기

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

조회 수: 9 (최근 30일)
non
non 2023년 10월 21일
댓글: non 2023년 10월 22일
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
Atsushi Ueno
Atsushi Ueno 2023년 10월 21일
「なぜ質問の方法では目的通りにならないのか」原因が分かったら回答に記入致します。
目的に対して 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 2023년 10월 21일
saveas() は表示されたfigureの保存に使います。
ボーダーや、colorbarが表示されていればそれごと保存されますので、イメージ部分より大きくなります。
Uenoさんが示されたとおり、イメージ行列のみの保存にはimwrite()を使ってください。

댓글을 달려면 로그인하십시오.

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Convert Image Type에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!