Сегментиране, прочетено изображение на дума отдясно наляво

Код за сегментиране:

% // Original Code by Soumyadeep Sinha 
% Modified by Ana with several modification //
% Saving each  single segmented character as one file 

function [s] = seg (a)
myFolder = 'D:\1. Thesis FINISH!!!\Data set\trial';
% a = imread ('adv1.png');

% Binarization %
level = graythresh (a);
bw = im2bw (a, level);

% Complement %
b = imcomplement (bw);

% Morphological Operation - Dilation %
% se = strel('rectangle', [1 2]);
% r = imdilate(b, se); 

r=padarray(b,[0 10]);

% % Morphological Operation - Dilation %
se = strel('rectangle', [1 2]);
i = imerode(r, se); 

%VP
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)); 
   % im = subImage;
   s = subImage;
   % figure, imshow (s);

   % Normalization %
   [p] =  pad (s); 

   % Morphological Operation - Thinning %
   im = bwmorph(p,'thin',Inf);

% Save %
[L,num] = bwlabel(im);
for z= 1 : num
    bw= ismember( L, z);
    % Construct filename for this particular image.
    baseFileName = sprintf('word6a.%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);
    subplot(2,2,4);
    pause(1);
    imshow(bw);
end
% y=y+1;
end;
s = (im);

Оригинално изображение: изображение на дума

изход за сегментиране: записан резултат от сегментиране

Направих сегментиране за изолиран символ, за да направя OCR. Работи добре, но искам изходът от сегментирането да е подреден в последователност не отляво надясно, а отдясно наляво, както четем арабски думи.

Ако работи, въведете описание на изображението тук ще бъде запазен като word6.1.png , въведете описание на изображението тук запазено като word6.2.png, останалите запазени като word6.3.png

Не знам какво да направя с кода, за да го накарам да прочете думата отдясно наляво.

Всяка помощ ще бъде много ценена.


person Ana Ain    schedule 17.02.2016    source източник
comment
Би ли било възможно да обърнете входа отляво надясно, напр. използвайки fliplr, стартирайте алгоритъма отляво надясно и след това обърнете отново изхода?   -  person mikkola    schedule 17.02.2016


Отговори (1)


Ако прочетох кода ви правилно, следните промени в секцията %Save% трябва да свършат работа:

% Save %
[L,num] = bwlabel(im);
for z= 1 : num
    bw= ismember( L, z);
    % Construct filename for this particular image.
    baseFileName = sprintf('word6a.%d.png', num-z+1);  %% <--- just make the numbering start backwards
    y=y+1;
    % Prepend the folder to make the full file name.
    fullFileName = fullfile(myFolder, baseFileName);
    % Do the write to disk.
    imwrite(bw, fullFileName);
    subplot(2,2,4);
    pause(1);
    imshow(bw);
end

Освен това, увеличения от y може да не са необходими повече.

person windrunn3r.1990    schedule 17.02.2016
comment
благодаря ви, но това прави резултата просто заседнал в едно файлово изображение, сегментираният резултат трябва да бъде записан в различни файлови изображения за всеки сегментиран знак. - person Ana Ain; 20.02.2016