Clear Filters
Clear Filters

Display multiple images on single axes

17 views (last 30 days)
my gui contains a push button to load an rgb image and an axes to display it and another axes to display r g and b planes separately. how can i display these planes at the same time on a single axes ??

Accepted Answer

Image Analyst
Image Analyst on 24 Jun 2012
Try this demo:
% Read in a standard MATLAB color demo image.
folder = fullfile(matlabroot, '\toolbox\images\imdemos');
baseFileName = 'peppers.png';
fullFileName = fullfile(folder, baseFileName);
% Get the full filename, with path prepended.
fullFileName = fullfile(folder, baseFileName);
if ~exist(fullFileName, 'file')
% Didn't find it there. Check the search path for it.
fullFileName = baseFileName; % No path this time.
if ~exist(fullFileName, 'file')
% Still didn't find it. Alert user.
errorMessage = sprintf('Error: %s does not exist.', fullFileName);
uiwait(warndlg(errorMessage));
return;
end
end
rgbImage = imread(fullFileName);
% Extract the individual red, green, and blue color channels.
redChannel = rgbImage(:, :, 1);
greenChannel = rgbImage(:, :, 2);
blueChannel = rgbImage(:, :, 3);
[rows columns numberOfColorChannels] = size(rgbImage);
% Make black strips to space them apart
widthOfStrip = 20;
verticalStrip = zeros(rows, widthOfStrip, 'uint8');
horizontalStrip = zeros(widthOfStrip, 2*columns + widthOfStrip, 'uint8');
% Make into color so we can stitch.
horizontalStrip = cat(3, horizontalStrip, horizontalStrip, horizontalStrip);
verticalStrip = cat(3, verticalStrip, verticalStrip, verticalStrip);
% Stitch together
outputImage = [rgbImage, verticalStrip, redChannel; horizontalStrip; greenChannel, verticalStrip, blueChannel];
imshow(outputImage);
  4 Comments
Subhadeep Koley
Subhadeep Koley on 23 Aug 2019
The code is giving the following error.
Error using horzcat
Dimensions of arrays being concatenated are not consistent.
Error in image_demo (line 31)
outputImage = [rgbImage, verticalStrip, redChannel; horizontalStrip; greenChannel,
verticalStrip, blueChannel];
Walter Roberson
Walter Roberson on 26 Aug 2019
z = 0 * rgbImage; %same size and type but all 0
redChannel = z;
redChannel(:,:,1) = rgbImage(:, :, 1);
greenChannel = z;
greenChannel(:,:,2) = rgbImage(:, :, 2);
blueChannel = z;
blueChannel(:,:,3) = rgbImage(:, :, 3);

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 24 Jun 2012
If you use image() [or imagesc()] to display an image, you can specify the data coordinates to associate with the center of the lower-left pixel and the center of the upper-right pixel.
  2 Comments
Rao
Rao on 24 Jun 2012
I=imread('peppers.ppm');
axes(handles.axes1)
imshow(I);
axes(handles.axes2);
imshow(uint8(I(:,:,1)));
imshow(uint8(I(:,:,2)));
imshow(uint8(I(:,:,3)));
this is the callback for push button can you please write code to display the the r g and b planes in axes2
Walter Roberson
Walter Roberson on 24 Jun 2012
Sorry, imshow() does not document the positioning meaning of its XData and YData parameters, so even if I had access to MATLAB to test now, it might change in any release.
I recommend that you instead use a routine whose positioning meanings are documented, image(). See the XData and YData property descriptions at http://www.mathworks.com/help/techdoc/ref/image_props.html

Sign in to comment.

Categories

Find more on Visual Exploration 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!