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

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

% // 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, остальные сохраняются как слово6.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