1

Ich habe bereits einen Code für den Segmentierungsprozess geändert. Der Code ist wie folgt:So speichern Sie das exakte Bild des Segmentierungsergebnisses (Segmentierung mit der vertikalen Projektionsmethode)?

% Preprocessing + Segmentation (VP with secondary element) 
% // Original Code of Vertical Projection for Segmentation by Soumyadeep Sinha // 
% // Modified by Ana Ainul S. : [email protected], Last modified : 14/07/16 // 
% Saving each single segmented character as one file 

function [ss] = segment (a) 
myFolder = 'D:\1. Thesis FINISH!!!\Data set'; 

%% Binarization %% 
level = graythresh (a); 
b = im2bw (a, level); 
%% Complement % 
c = imcomplement (b); 
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; 
t = verticalProjection; 
t(t==0) = inf; 
mayukh=min(t) 
% 0 where there is background, 1 where there are letters 
letterLocations = verticalProjection > mayukh; 
% Find Rising and falling edges 
d = diff(letterLocations); 
startingColumns = find(d>0); 
endingColumns = find(d<0); 

% Extract each region 
y=1; 
for k = 1 : length(startingColumns) 
    % Get sub image of just one character... 
    subImage = i(:, startingColumns(k):endingColumns(k)); 
    s = subImage; 
    figure, imshow (s); 

    % Save each segmented characters % 
    [L,num] = bwlabel(s); 
    for z = 1 : num 
    bw= ismember(L, z); 
    % Construct filename for this particular image. 
    baseFileName = sprintf('data1.%d.png', y); 
    y=y+1; 
    % Prepend the folder to make the full file name. 
    fullFileName = fullfile(myFolder, baseFileName); 
    % Do the write to disk. 
    imwrite(bw, fullFileName); 
    end 
end; 
ss = (s); 

Es gab ein gutes Ergebnis, aber ich habe einige Schwierigkeiten, wenn ich es als eine für jede segmentierte Bild einer Datei speichern müssen.

enter image description here

segmentierte Zeichen ausgeführt.

Es gibt mir ein anderes Ergebnis, wenn ich es speichere.

enter image description here

Das Sekundärelement, das mit dem Hauptkörper des Charakters zu vereinigen sein sollte getrennt wurde, wenn ich versuche, es zu retten. Ich habe versucht, den Code zu ändern, bekam aber immer noch keine Lösung. Ich muss genau die gleichen Bilder speichern, die auf dem Programm angezeigt wurden.

Jede Hilfe, würde sehr geschätzt werden.

Vielen Dank.

+0

Sie finden könnte [diese Antwort] (http://stackoverflow.com/a/37938764/1714410) bezogen. – Shai

Antwort

1

Sie haben zwei verschiedene Verfahren für die Zeichen im Code Segmentieren:
ist die Schleife for k = 1 : length(startingColumns) wo Sie richtig Segment durch Spalten,
und eine zweite unterschiedliche Segmentierung nach angeschlossenen Komponenten (bwlabel) oben auf dem vorheriger.

Wenn ich Ihre Bedürfnisse richtig verstehe, brauchen Sie nicht die zweite bwlabel Verarbeitung jedes Zeichens.

for k = 1 : length(startingColumns) 
    % Get sub image of just one character... 
    subImage = i(:, startingColumns(k):endingColumns(k)); 
    s = subImage; 
    figure, imshow (s); 
    imwrite(s, fullfile(baseFolder, sprintf('data.%d.png', k))); 
end 

PS,
Viel Glück mit Ihrer Arbeit;)

+1

Es funktioniert, vielen Dank für die Erklärung. Es hilft sehr. und Viel Glück auch, für was auch immer Sie jetzt tun. @ Shai –