How to display an image's matrix in MATLAB? - matlab

How can we display an image's matrix in MATLAB?
I have read the image using imread and have converted it into binary image. How do I see an image's matrix?

If you want to see the actual matrix, use disp(I) where I is the image. If you want to view it as an image, use imagesc(I) or imshow(I).

Related

How to use transformation T from histeq in Matlab?

The documentation of histeq in Matlab says:
[___,T] = histeq(___) also returns the transformation T that maps the gray component of the input grayscale image or colormap to the gray component of the output grayscale image or colormap.
How do I apply this transformation T to another image (not the image that I put into histeq)?
The input to histeq was a greyscale image, the output T is a 1×256 double vector.
The following line from histeq.m might be the solution:
builtin("_grayxformmex", new_image, T);

Convolving an image with a mask displays an all white image

Very new to MatLab, just figuring some things out and had a question. I am basically trying to filter/blur an image using conv2() but I am getting an all white image when I am using imshow()
I am reading the image in with
testImage = imread('test.bmp');
This is a uint8 image of a grayscale.
I am trying to convolve the image with a 4 x 4 matrix.
fourByFour = ones(4);
When I actually execute, I am getting all white with imshow()
convolvedImage = conv2(testImage, fourByFour);
I should expect a filter placed on the image, not an entirely white one.
Any help would be appreciated.
I don't have your test image so I explain on an image. As the definition of conv2 it returns the two-dimensional convolution.
So please look at this little code:
clc;% clear the screen
clear all;% clear everything
close all;% close all figures
test = imread('test.bmp');
% read test image that is .bmp format and size :294x294x3 and uint8.
fourByFour = ones(4); % define 4 * 4 matrix all ones
convolvedImage = conv2(test(:,:,1), fourByFour);
%apply the ones matrix on image but to use conv2 on this image we apply on one of channels
figure, imshow(convolvedImage,[])
This is my command window, out put:
I'm using MAtlab 2017a, and if I use conv2(test, fourByFour); instead of conv2(test(:,:,1), fourByFour); ,the error is :
Error using conv2
N-D arrays are not supported.
So we should attention to class type and dimensions. And one more thing, in your command window please type edit conv2 you can read the details of this function and how to use it, but never edit it:). Thanks
test = imread('test.bmp');
% read test image that is .bmp format and size :294x294x3 and uint8.
fourByFour = ones(4);
% define 4 * 4 matrix all ones
test=rgb2gray(test);
% convert colorimage into gray
convolvedImage = conv2(double(test), double(fourByFour));
%perform the convolution
figure, imshow(convolvedImage,[])
% display the image

im2double yields different results

I am trying to get RGB matrices for an image. When my image is 1200x1600, the following code
I=imread('testme.jpg');
I=im2double(I);
yields a 1200x1600x3 matrix and I can get RGB matrices but when the image is a screenshot of a part of this image, the code below
I=imread('testme_subpic.jpg');
I=im2double(I);
yields 167x228 matrix and I can't get the RGB matrices.
Likely, when I write
I=imread('testme.png');
I=im2double(I);
lines give me a 1200x1600 matrix.
My question is why can't I get a 3-dimensional matrix with the png or the smaller-sized jpg and how do I get it?
It is all about the way the images were saved.
Check wikipedia for some extra info about png pixel formats. To avoid this issue you can try to use MATLAB itself to write your images, that way you have control over pixel formats (imwrite)

MATLAB imshow for 3D color image

I have a medical imaging matrix of size [200x200x200].
In order to display it, I am currently using imshow3D function, which is an excellent tool, built by Maysam Shahedi.
This tool displays the 3D image slice by slice, with mouse based slice browsing
In my current project, I generate an RGB image for each z-layer from the original input image. The output is a 3D color image of size [200x200x200x3] (each layer is now represented by 3 channels).
The imshow3D function works great on grayscale images. Is it possible to use it to display RGB images?
I took a look at this nice imshow3D function from Matlab FileExchange, and it is quite straight-forward to change it to allow working with a stack of RGB images.
The magic part of the function is
imshow(Img(:,:,S))
which displays the slice S of the image Img. We can simply change it to show all 3 channels of image S by changing this to Img(:,:,S,:). The result will be of size 200-by-200-by-1-by-3, while MATLAB expects RGB images to be of size 200-by-200-by-3. Simply squeeze this image to get the correct dimension. This results in:
imshow(squeeze(Img(:,:,S,:))
So to show RGB images, do a search-and-replace inside the function imshow3D, to replace all occurrences of Img(:,:,S) with squeeze(Img(:,:,S,:)) and it works!

Division of a color image into blocks in MATLAB

i have an RGB image of size 256X256.I need to divide this RGB image into blocks of size 32X32.each block must be in turn an RGB image.how can i do this in MATLAB.Please provide me code for this in MATLAB.
You can use mat2cell for this.
out = mat2cell(image,ones(256/32,1)*32,ones(256/32,1)*32,3);
out is a 8-by-8 cell array, with each cell containing a 32-by-32-by-3 RGB image.
You can access the first block as out{1,1}.
EDIT
Changed repmat to ones to make the code faster.