Write compared images not figures?!

4 次查看(过去 30 天)
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

采纳的回答

Walter Roberson
Walter Roberson 2013-12-13
You can specify the format in saveas(); see http://www.mathworks.com/help/matlab/ref/saveas.html
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');
  1 个评论
Steven
Steven 2013-12-13
编辑:Steven 2013-12-13
Thanks! Could you please answer my next question below? Thanks!

请先登录,再进行评论。

更多回答(1 个)

Steven
Steven 2013-12-13
编辑:Steven 2013-12-13
Thanks Walter! Clever idea!
That is great! May I ask:
  1. I do not understand the use o if condition? what does this isdouble do?
  2. If my images are all binary, shall I still use it?
  3. For me, MATLAB gives an error and says
Undefined function 'isdouble' for input arguments of type 'logical'.
what shall I do so?
Shall I always say use fillval=1 or fillval=255?
Thanks do mush again.
Steven
  2 个评论
Walter Roberson
Walter Roberson 2013-12-13
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 .

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Convert Image Type 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by