How to convert images to vectors

How can I convert my images with size 120 160 1 888 to vectors ?
where 120* 160 is the size of each gray scale image, 1 is the number of channels, 888 is the number of images
so the output will be matrix and each column in the matrix is an image, I should end up with 888 vectors each vector is image

 Accepted Answer

From what I have understood -
%Random input
in = rand(120,160,1,888);
s = size(in);
%Convert the input to a cell vector
out = mat2cell(in,s(1),s(2),s(3),ones(1,s(4)));
size(out)
ans = 1×4
1 1 1 888
%Modify the size of the output
out = squeeze(out)
out = 888×1 cell array
{120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double} {120×160 double}

6 Comments

M
M on 17 Oct 2023
Edited: M on 17 Oct 2023
@Dyuman Joshi, Nope, I want to reshape each image 120*160 to a vector
The output will be 19200*888
By doing that I will not loss any information right?
"By doing that I will not loss any information right? "
No
"The output will be 19200*888"
In that case, use reshape
%Random input
in = rand(120,160,1,888);
s = size(in)
s = 1×4
120 160 1 888
out = reshape(in,s(1)*s(2)*s(3),s(4));
size(out)
ans = 1×2
19200 888
@Dyuman Joshi these numbers are not fixed, I want something general
@M, I have edited my response, please check above.
in = rand(120,160,1,888);
s = size(in);
out = cell2mat(squeeze(cellfun(@(P) P(:), num2cell(in, 2),'uniform', 0)));
whos out
Name Size Bytes Class Attributes out 19200x888 136396800 double

Sign in to comment.

More Answers (0)

Categories

Find more on Convert Image Type in Help Center and File Exchange

Asked:

M
M
on 17 Oct 2023

Commented:

on 17 Oct 2023

Community Treasure Hunt

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

Start Hunting!