如何解决分割过程中“索引超出矩阵维度”的问题(Matlab)
Posted
技术标签:
【中文标题】如何解决分割过程中“索引超出矩阵维度”的问题(Matlab)【英文标题】:How to solve "Index exceeds matrix dimension" in segmentation process (Matlab) 【发布时间】:2016-08-01 00:32:00 【问题描述】:我已经修改了分段过程的代码。但我收到“索引超出矩阵维度”错误。代码如下。
for z = 1: 300
name1 = strcat ('data (',int2str(z),').png');
name2 = strcat ('D:\1. Thesis FINISH!!!\Data set\0 Isolated Dataset\Advertising Bold 14\source\', name1);
a = imread (name2);
myFolder = 'D:\1. Thesis FINISH!!!\Data set\0 Segmented Character\coba';
%% Binarization %%
level = graythresh (a);
b = im2bw (a, level);
%% Complement %%
c = imcomplement (b);
%% PadArray %%
i=padarray(c,[0 10]);
%% Vertical Projecttion for Character Segmentation
verticalProjection = sum(i, 1);
set(gcf, 'Name', 'Segmentation Trial', 'NumberTitle', 'Off')
subplot(2,2,1);imshow(i);
subplot(2,2,3);
plot(verticalProjection, 'b-');
grid on;
% *Defining the threshold to determine baseline area* %
threshold=max(verticalProjection)/3;
% threshold=min(verticalProjection)/3;
% threshold = 5; % Threshold >0 used to detect the baseline of cursive characters
thresholdedProjection=verticalProjection > threshold;
count=0;
startingColumnsIndex=0;
for j =1:length(thresholdedProjection)
if thresholdedProjection(j)
if(count>0)
startingColumnsIndex=startingColumnsIndex+1;
startingColumns(startingColumnsIndex)= j-floor(count/2);
count=0;
end
else
count=count+1;
end
end
endingColumns=[startingColumns(2:end)-1 j-floor(count/2)];
% *Extract each region, result of segmentation process* %
y=1;
for k = 1 : length(startingColumns)
% Get sub image of just one character
subImage = i(:, startingColumns(k):endingColumns(k));
% im = subImage;
s = subImage;
% Normalization using algorithm 2 %
p = normalization2 (s);
subplot(2,2,2);
imagesc (p);
axis equal off;
pause (1);
% figure,
imshow (p);
% Morphological Operation - Thinning %
t = bwmorph(p,'thin',Inf);
end
% savename = char (strcat (myFolder, name1));
imwrite (t, fullfile (myFolder, sprintf ('data.%d.png', y)));
y = y+1;
end;
我有 300 个单词的图像数据,我需要将所有图像数据分割成字符图像,并将它们保存为每个分割字符的不同文件。我需要按顺序保存。
我已经尝试改变了
subImage = i(:, startingColumns(k):endingColumns(k));
到
subImage = i( startingColumns(k):endingColumns(k),:);
但是还是不行。我不知道代码有什么问题。谁能解释一下并提供帮助?
【问题讨论】:
你在哪一行得到错误? 嗨,特洛伊,||索引超出矩阵维度。 ||段错误(第 64 行)|| subImage = i(:, startingColumns(k):endingColumns(k)); 【参考方案1】:您可能希望在第 64 行更改 endingColumns(k)
中的 k
。从代码来看,startingColumns
的元素数量似乎与 endingColumns
不同。
【讨论】:
是的,我认为是。这就是为什么它没有帮助。 ||那么,您认为我应该在代码中进行哪些更改以解决错误?k
不应超过 startingColumns
的 end
。尝试添加这样的条件。
endingColumns=[startingColumns(2:end)-1 j-floor(count/2)];
与startingColumns
具有相同数量的元素。不是吗? endingColumns
具有来自 (1:end-1) 的值,与 startingColumns
具有来自 (2:end) 和 endingColumns(end) =j-floor(count/2)
的值相同。那么元素的数量不一样吗?
是吗?在这个模拟中,我检查了工作区,endingColumns value = [30,42,58,76,62] ||而startingColumns value = [7,31,43,59,77,64],它没有给出相同数量的元素。
我已经得到了答案,并且分割已经运行良好。我只是添加了startingColumns = [];初始化startingColumns。 ||我想分享一下,以防万一有人遇到同样的问题。 ||谢谢大家...以上是关于如何解决分割过程中“索引超出矩阵维度”的问题(Matlab)的主要内容,如果未能解决你的问题,请参考以下文章