Write compared images not figures?!
8 views (last 30 days)
Show older comments
Hi. How can I write as images not figures?
I mean imagine I have image1, processed it and now it is image2. Now I want to show both of them in the same figure (or image). I use subplot or imshowpair to do so, but the problem is here:
If I want to save this final compared image, I have to use printf or saveas which both only save as JPEG and also changes the image size and info. What I want is saving it as an image (like the original ones.) I cannot use imwrite now! it gives empty figure!
Can anybody help me? Thanks so much! Steven
0 Comments
Accepted Answer
Walter Roberson
on 13 Dec 2013
saveas(FigureNumber, 'Filename.bmp', 'bmp')
for example.
You can print() to a graphics file; see the list in http://www.mathworks.com/help/matlab/ref/print.html . For JPEG, TIFF and PNG, you can also use the -r flag to specify the resolution. For example,
print(FigureNumber, '-dpng', 'Filename.png', '-r0')
Also search down in the documentation for the section "Printing Figures at Screen Size"
In order to imwrite() you need a single data matrix to write. You could construct that matrix by using, for example,
[firstImage, SecondImage]
or
[h, w, p] = size(firstImage);
if isdouble(firstImage)
fillval = 1;
else
fillval = 255;
end
spacer = ones(h, 50, p) * fillval; %a buffer of 50 pixels whitespace between the two
NewMatrix = [firstImage, spacer, SecondImage];
imwrite(NewMatrix, 'filename.png', 'png');
More Answers (1)
Steven
on 13 Dec 2013
Edited: Steven
on 13 Dec 2013
2 Comments
Walter Roberson
on 13 Dec 2013
If your data is "logical" then the code can be simplified to
%a buffer of 50 pixels whitespace between the two
NewMatrix = [firstImage, true(size(firstImage,1), 50), SecondImage];
imwrite(NewMatrix, 'filename.png', 'png');
The code I had before should have used
if ~isinteger(firstImage)
fillval = 1;
else
fillval = 255;
end
This code is a bit of a simplification, but reflects the fact that for images that are of datatype single() or double() or logical(), the maximum ("brightest") value is 1, but for uint8 images, the maximum is 255. It is incomplete because it does not bother with uint16, which would use 65535.
Note: if you want the border between them to be dark instead of bright, use 0 as the fillval .
See Also
Categories
Find more on Convert Image Type in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!