Save file.bmp from a matrix.

Dear all,
I am quite new in Matlab and I am eperiencing some issue by saving a matrix as an image.
I have a matrix (202 x 134 double) composed of 0 and 1. I want to generate a black and white image from that.
If used: imshow(mymat), and I save the file from that it is perfect; but I have to save images within a loop.
I tried to use:
imwrite(mymat,sprintf('FIG%d.bmp',z1))%,'Quality',100)
But the quality of the image is very very low as you can see from the attached pictured.
I tried also to use:
image = mat2gray(mymat,[0 1]);
imwrite(image,sprintf('FIG%d.bmp',z1))
But I get the same result.
Thanks in advance.

4 Comments

202x134 is a fairly low resolution already, but the file you uploaded is 67x101.
Can you confirm that size(mymat) returns [202 134]?
I would suggest avoiding image as a variable name, as that is already a base Matlab function/class.
Yes sorry I made a mistake, size(mymat) is [101 67].
Thanks for your suggestion, I did it but the result is still the same.
I attach here the Matlab script, too. Do you have some suggestions to solve this? Maybe a different way to save the figure such as with saveas? But since I have only a matrix and not a figure I don't know how to implement it.
How did you get the idea you have a 202x134 matrix? Nothing so far indicates that. Using a different function will not fix anything if your input data is not what you expect.
Michele Vanini
Michele Vanini on 19 Apr 2021
Edited: Michele Vanini on 19 Apr 2021
Because in the script above I changed the value of d from 1 to 0.5 and obtained a 202x134 matrix. With d = 1 I obtain a 101x67 matrix which is the one used to generate the image.

Sign in to comment.

 Accepted Answer

In your code, you save the image as JPEG - that's probably why it's blurry. Never use JPG for image analysis.
%save image as jpeg
imwrite(image_rotated,sprintf('FIG%d.jpeg',z1),'Quality',100); % will create FIG1, FIG2,...
Cast it to uint8 and Save it as PNG and it should be fine.
% Save image as PNG.
baseFileName = sprintf('FIG%d.PNG', z1);
fullFileName = fullfile(pwd, baseFileName);
fprintf('Saving image file : "%s".\n', fullFileName);
imwrite(uint8(image_rotated), fullFileName); % Will create FIG1, FIG2,...
fprintf('Success! Done saving image file.\n')
The saved/recalled image will be the same size as image_rotated.
Dont' use image as the name of a variable since that's the name of a built-in function.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!