2016-08-01 39 views
-1

我修改了我的分割過程的代碼。但是我得到了「索引超出矩陣維度」的錯誤。代碼如下。如何解決分割過程中的「索引超過矩陣維」(Matlab)

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),:); 

但它仍然沒有奏效。我不知道代碼有什麼問題。任何人都可以請解釋和幫助?

+0

你在哪一行得到錯誤? – Salman

+0

特洛伊,|| 索引超出矩陣尺寸。 ||段(第64行)||中的錯誤子圖像= i(:, startingColumns(k):endingColumns(k)); –

回答

1

你可能想改變kendingColumns(k)線64從代碼它似乎並不像startingColumns具有相同數量的元素endingColumns的。

+0

是的,我認爲是的。這就是爲什麼它沒有幫助。 ||那麼,您認爲我應該在代碼中更改哪些內容來解決錯誤? –

+1

'k'不應該超過'startsColumns'的'end'。嘗試添加一個這樣的條件。 – Salman

+0

'endingColumns = [startingColumns(2:end)-1 j-floor(count/2)];'它具有與'startsColumns'相同數量的元素。這不正確嗎? 'endingColumns'與(1:end-1)具有相同的值,因爲「startingColumns」具有來自(2:結束)和'endingColumns(end)= j-floor(count/2)'的值。那麼元素的數量是不是相同? –

相關問題