MATLAB Answers

# "Index exceeds matrix dimensions" error during performing RGB channel separation

2 views (last 30 days)
rakib mostafiz on 24 Jul 2021
Commented: Simon Chan on 25 Jul 2021
The purpose of my code is -
1. scan all image from a folder
2. calculate entropy for each of RGB channel
3. export data to a xlsx file
my code :
folder = 'F:\images\';
filePattern = fullfile(folder, '*.png');
myFiles = dir(filePattern); % the folder inwhich ur images exists
for k = 1 : length(myFiles)
fullFileName = fullfile(folder, myFiles(k).name);
I= fullFileName;
Red = I(:,:,1);
Green = I(:,:,2);
Blue = I(:,:,3);
%I = I(:); % Vectorization of RGB values
p = imhist(Red); % Histogram
p(p == 0) = [ ];% remove zero entries in p
p = p ./ numel(I); % normalize p so that sum(p) is one.
Er(k) = round(-sum(p.*log2(p)),3);
p = imhist(Blue); % Histogram
p(p == 0) = [ ];% remove zero entries in p
p = p ./ numel(I); % normalize p so that sum(p) is one.
Eb(k) = round(-sum(p.*log2(p)),3);
xlswrite('myfile.xlsx', [Er(k),Eb(k)], 'Sheet 1');
end
But i am getting following error:
Index exceeds matrix dimensions.
Error in test1 (line 9)
Green = I(:,:,2);
I couldn't solve this problem. Can anyone help me please?
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

Simon Chan on 25 Jul 2021
According to your code shown above, variable I is only a file name in the beginning of the for loop.
Have you do imread or some other command to read the images?
for k = 1 : length(myFiles)
fullFileName = fullfile(folder, myFiles(k).name);
I= imread(fullFileName); % I added imread
Red = I(:,:,1);
Green = I(:,:,2);
Blue = I(:,:,3);
##### 4 CommentsShowHide 3 older comments
Simon Chan on 25 Jul 2021
Doing transpose:
xlswrite('myfile.xlsx', [Er',Eb'], 'Sheet 1');
or
writematrix([Er',Eb'],'myfile.xlsx');

Sign in to comment.

### More Answers (1)

Yongjian Feng on 24 Jul 2021
Most likely your image is just a grey scale one. Only one channel.
##### 1 CommentShowHide None
rakib mostafiz on 24 Jul 2021
Those image are colorful. Moreover, if i perform this operation on a single image rather than looping out all image from folder, it works just fine! But when i try to read each image and perform this operation, it showing that error. I really dont understand the problem here

Sign in to comment.

R2015b

### Community Treasure Hunt

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

Start Hunting!