MATLAB: I have this error msg (Matrix index is out of range for deletion. Error in tray1 (line 31) x1(:,rows) = []; ) what is the problem ???

digital image processingimage analysisimage processing

[rows, columns] = size(x1); for col = 1 : columns sum = 0; for row = 1 : rows % Now get the mean over all values in this column. columnMeans(col) = sum / rows; if columnMeans(col)> avgcut columnMeans(col)< avgcut x1(:,col) = []; end end end

Best Answer

You are deleting columns of your matrix x1 in the loop, so its size has changed (moreover, you skip some columns).
To avoid this, you can store the index of the column you want to delete in the loop and delete them only when the loop is finished:
colToDelete = [];
[rows, columns] = size(x1);
for col = 1 : columns
sum = 0;
for row = 1 : rows % Now get the mean over all values in this column.
columnMeans(col) = sum / rows;
if columnMeans(col)> avgcut || columnMeans(col)< avgcut
colToDelete = [colToDelete,col];
end
end
end
x1(:,colToDelete) = [];