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 :)
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
'Höhe',' Breite', 'yAchse' und die Größe von' linePatch'? – bushmills
@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 :) –