如何解决分割过程中“索引超出矩阵维度”的问题(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 不应超过 startingColumnsend。尝试添加这样的条件。 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)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MatLAB 脚本从表中构建数组?

opencv-阈值分割

c#大文件分割过程

如何获取超像素分割后的每个小块

AR(I)MA时间序列建模过程——步骤和python代码

如何确定AR(p)MA(q)模型中的p和q的值?