2016-09-12 3 views
0

Code:Word-Segmentierung in MATLAB

img = imread ('G:\Stuff\RP\Database\0001_4.jpg'); 
%imshow(img); 

bin_img = imcomplement(im2bw(img, 0.8)); %Binarizing 
%figure; 
%imshow(bin_img); 

bin_img = bwareaopen(bin_img, 50); %for removing dots and commas 

%%%%%%%% Line Segmentation %%%%%%%% 
dbw_img = imdilate(bin_img, strel('line', 100, 0));%Dilating 
[L, N]=bwlabel(dbw_img); %finding connected components 
bbox = regionprops(L, 'BoundingBox'); 
lineSlopeMatrix=[N 0]; 
for i=1:N %must run for all the lines in an image 
    bBox=bbox(i).BoundingBox; 
    x=bBox(1)+0.5; 
    y=bBox(2)+0.5; 
    w=bBox(3); 
    h=bBox(4); 
    linePatch=bin_img(y:y+h,:); %Extracting line 
    figure,imshow(linePatch) % Prints lines 

    words_img = imdilate(linePatch, strel('line', 40, 0));%Dilating 
    [R, C]=bwlabel(words_img); %finding connected components i.e. Words 
    bounding = regionprops(R, 'BoundingBox'); 
    for j=1:C %nmust run for the words in a line 
     bdBox=bounding(j).BoundingBox; 
     xAxis=bdBox(1)+0.5; 
     yAxis=bdBox(2)+0.5; 
     width=bdBox(3); 
     height=bdBox(4); 
     %   [row col]=size(linePatch) 
     %   yAxis,yAxis+height,xAxis,xAxis+width 
     Patch=linePatch(yAxis:yAxis+height,xAxis:xAxis+width); 
     %Extracting Patch of Words 

     figure,imshow(Patch) %Prints words 
     Patch=[]; 
    end 
    linePatch=[]; 
end 

Ausgabe: mir zuerst eine Linie vom Eingangsbild Segmentieren dann die Worte aus dieser Linie zu extrahieren. Meine algo Segmente die Wörter richtig aus ersten Zeile (aus dem Eingangsbild, mit diesem Post angebracht ist), dann ist es auch Segmente das erste Wort von der zweiten Linie, als es mir die folgende Störung gibt:

??? Index exceeds matrix dimensions. 

Error in ==> test_words_lines at 33 
    Patch=linePatch(yAxis:yAxis+height,xAxis:xAxis+width); 

ich verstanden habe der Fehler leicht, die Abmessungen der Matrix geprüft, sie scheinen gut oder vielleicht kann ich das Problem nicht finden ..

sehen sie die Bilder angehängt: Segmentation of Words from Line 1 // Segmentation of Words from Line 2

Bitte sagen Sie mir die richtige Ursache für diesen Fehler und schlagen Sie eine Lösung vor. Thanks :)

+0

versuchen Sie, den Debugger zu verwenden und bei der Zeile 'Patch = linePatch (yAchsen: yAchse + Höhe, xAchse: xAchse + Breite) 'zu stoppen. überprüfe die Werte von 'xAxis, yAxis, etc.'. Sind sie größer als die Größe Ihrer Matrix 'linePatch'? – bushmills

+0

'Höhe',' Breite', 'yAchse' und die Größe von' linePatch'? – bushmills

+0

@bushmills Ich habe den Break-Point mit der Bedingung 'i == 2 && j == 2' hinzugefügt und herausgefunden, dass der Wert von' xAxis' 280 ist, 'yAchse' 104,' Breite' 45, 'Höhe' ist 5 .. während der 'linePatch' ist 108 * 2465. Nun, 'yAchse + Höhe' = 104 + 5 = 109 was größer ist als keine der Zeilen, 108 .. aber das macht keinen Sinn .. Bedeutet nicht' size (linePatch) = 108 * 2465' 108 Zeilen und 2465 Spalten? und die 'xAxis' und' yAxis' Werte geben die Pixelzahl an? Vielen Dank im Voraus :) –

Antwort

0

finden Sie in der folgenden Dokumentation für die Funktion regionprops, Sie verwenden:

http://de.mathworks.com/help/images/ref/regionprops.html#inputarg_properties

hier Sie in der Beschreibung der Eigenschaft Bounding Box, dass die Rückgabewerte (Ihr xAchse ein yAchse) lesen Geben Sie die obere linke Ecke der Bounding Box in der Form [xyz ...] an. So hinzufügen die height, um die Bounding Box zu bekommen ist falsch. Sie müssen die height subtrahieren.

+0

Ich weiß, welche Region Requisiten tut. Ich habe die gleiche Methode (Addition von Höhe und yAxis) vor .. Immer noch, habe ich versucht, Subtraktion und es gibt leere Bilder und nach einer Weile den gleichen Fehler .. –

+0

Bitte zeigen Sie uns die Codezeile, wo Sie Subtraktion versucht . Sieht so aus: 'Patch = linePatch (yAxis-height: yAxis, xAxis: xAxis + width);' Sonst wäre es schwer, es sei denn, wir können dein Problem reproduzieren. – bushmills