2016-04-05 20 views
1

Komple Segmentasyon kodu: Ben kelime görüntüler için bir karakter segmentasyon işlemi yapmak için matlab çalışma içine görüntüleri yüklediğinizTasarruf Segmentasyon Sonucu - Matlab Arapça OCR

% Preprocessing + Segmentation 
% // Original Code of Segmentation by Soumyadeep Sinha with several modification by Ana// 
% Saving each single segmented character as one file 
    function [s] = seg (a) 

myFolder = 'D:\1. Thesis FINISH!!!\Simulasi I\Segmented Images'; 
% a = imread ('adv1.png'); 

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

% Complement % 
c = imcomplement (b); 

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

i=padarray(r,[0 10]); 
% i=padarray(c,[0 10]); 

% Morphological Operation - Dilation % 
% se = strel('rectangle', [1 2]); 
% se = strel ('square', 1); 
% 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] = normalization (s); 

% se = strel ('square', 1); 
% se = strel('rectangle', [2 1]); 
% im = imdilate(p, se); 

    % 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('data.%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); 
  • . Örn: veri (1) .png, veri (2) .png vb. Bölme işlemi, her parçalanmış karakter için çıktı olarak çoklu görüntü verecektir. Word görüntüleri çeşitli miktarda karakter içerir, bu yüzden çıktı da değişir. Örneğin, görüntü = data (1) .png için bölümlenmiş sonuç çıktısı veri (1) _1.png, veri (1) _2.png, veri (1) _3.png ve veri (2) .png haline gelir. (2) _1.png, veri (2) _2.png vb.

Kelime görüntüleri

enter image description here

Son zamanlarda, elle yaptım, ama veri seti daha büyük olacak ve o kadar tek görüntüleri biri için segmentasyon çalıştırmak için zaman israf. Herhangi bir öneri var mı, basit ve daha etkili hale getirmek için nasıl yapmalıyım? Her parçalanmış karakter için sonucu alın (sırayla).

% Save % 
    [L,num] = bwlabel(im); 
    for z= 1 : num 
    bw= ismember(L, z); 
    % Construct filename for this particular image. 
    % Change basefilename for each word images % 
    baseFileName = sprintf('data (1).%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 

Bu kodu kullandıktan sonra, iyi bir sonuç oluşturmak, ama sadece bir veri için, bir sonraki veri son verilerini değiştirecektir. Bu yüzden, son zamanlarda, her kelime görüntüsü için, bölümlendirme işlemini teker teker yürütür ve uygun bir sonuç elde etmek için bu bölümü değiştiririm. Sprintf ('data (1).% D.png', y) sprintf olmak için ('data (2).% D.png', y); ve bunun gibi. ( ) Umarım, otomatik olarak alabilirim. result

Herhangi bir yardım çok takdir edilecektir.

+0

Sprintf ('data (% d).% D.png', imageIdx, y = y + 1) – BH85

+0

Eğer bir sakınca yoksa, kod hakkında daha fazla bilgi verir misiniz? @ BH85 Sprintf ('veri (% d).% D.png', imageIdx, y = y + 1)? –

+1

klasöründen görüntüler okunuyorsanız: İlk adım dosyaların isimlerini almaktır. İkinci adım, bu dosyalar üzerinde tek tek yinelemektir. genellikle döngü için kullanarak yineliyoruz. Bu for döngüsünün değişkeni resim indeksidir. files_Info = dir ('C: \ ...Görüntülerinizin olduğu yerde); size (files_Info, 1) bu dizindeki dosya sayısıdır ('.' ve '..' dahil olmak üzere). imageIdx = 1 için: size (files_Info, 1), 'olup olmadığını kontrol edin.' ya da '..'; işlem adımı için gidin ..... son – BH85

cevap

1

Arapça benim ana dilim olduğundan bu konuda size yardımcı olacağım. Netleştirerek başlayalım: bazı Arap harfleri bağlı olmayan bölgeler içerir. Bu nedenle, görüntü işleme tekniklerinin kullanılması yeterli olmayacaktır. Birkaç yıl önce, fikrinden yararlanan bir sistem tasarladım: aynı harfle ilgili bölgeler, mektubun üstünde veya altında. Şu adımlar: 1. Resmi ikiliye dönüştürün. 2. Resmi tamamlayın. Metinler beyaz ve arka plan siyah 3'tür. Görüntüyü çok sayıda satırına bölmek için işleyin. Bu, dikey eksene projeksiyon gerçekleştirilerek yapılabilir. Vadiler, çizgiler arasındaki boşluklarla ilgili olacaktır. 4. Her satır çok fazla ilerleyecektir: Bölgeler tespiti. Birbirinin üstünde veya altında tüm bölgeler parçalara ayrılacaktır

Metin "elle yazılmış" kişilerce yazılırsa sorun daha karmaşık hale gelecektir. Sonra bölümlere ayrılmış bölgeleri doğrulamak için bir makine öğrenim çözümüne ihtiyacınız var.