自动保存分割结果 - Matlab Arabic OCR
Saving Segmentation Result Automatically - Matlab Arabic 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:. 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);
- 我已经将图像加载到matlab工作区中,对单词图像进行字符分割处理。例如:data(1).png、data(2).png 等等。
- 分割过程,将为每个分割的字符给出多张图像作为输出。文字图像包含不同数量的字符,因此输出也会有所不同。例如 image = data(1).png 的分割结果输出为 data(1)_1.png, data(1)_2.png, data(1)_3.png, data( 2).png变成data(2)_1.png,data(2)_2.png等.
文字图片
最近,我是手动完成的,但是数据集会更大,所以浪费时间来 运行 一张一张地分割图像。
有什么建议,我应该怎么做才能使它简单有效?获取每个分段字符的结果(按顺序)。
% 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
使用这段代码后,创建了一个很好的结果,但是对于一个数据,下一个数据将取代最近的数据。所以,最近,对于每个单词图像,我 运行 一个一个地分割过程并更改这部分以获得合适的结果。把 sprintf('data (1).%d.png', y) 改成 sprintf('data (2).%d.png', y);等等。
% Change basefilename for each word images %
baseFileName = sprintf('data (1).%d.png', y);
y=y+1;
我希望的结果。我希望,我可以自动得到它。
任何帮助将不胜感激。
由于阿拉伯语是我的母语,因此我会在这方面为您提供帮助。
让我首先明确:一些阿拉伯字母包含非连接区域。
因此,仅使用图像处理技术是不够的。
几年前,我设计了一个利用这个想法的系统:与同一个字母相关的区域要么在字母的上方,要么在字母的下方。
步骤:
- 将图像转换为二进制。
- 补充图片。文字为白色,背景为黑色
- 处理图像以将其分成多个
行。
这可以通过在垂直轴上执行投影来完成。山谷将与线条之间的空间相关。
- 每一行都会拼命进行:
区域检测。
彼此上方或下方的所有区域将被分割在一起
如果文字是由人“手写”的,问题会变得更加复杂。
然后你需要一个机器学习解决方案来验证分割区域。
完整的分割代码:
% 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:. 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);
- 我已经将图像加载到matlab工作区中,对单词图像进行字符分割处理。例如:data(1).png、data(2).png 等等。
- 分割过程,将为每个分割的字符给出多张图像作为输出。文字图像包含不同数量的字符,因此输出也会有所不同。例如 image = data(1).png 的分割结果输出为 data(1)_1.png, data(1)_2.png, data(1)_3.png, data( 2).png变成data(2)_1.png,data(2)_2.png等.
文字图片
最近,我是手动完成的,但是数据集会更大,所以浪费时间来 运行 一张一张地分割图像。 有什么建议,我应该怎么做才能使它简单有效?获取每个分段字符的结果(按顺序)。
% 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
使用这段代码后,创建了一个很好的结果,但是对于一个数据,下一个数据将取代最近的数据。所以,最近,对于每个单词图像,我 运行 一个一个地分割过程并更改这部分以获得合适的结果。把 sprintf('data (1).%d.png', y) 改成 sprintf('data (2).%d.png', y);等等。
% Change basefilename for each word images %
baseFileName = sprintf('data (1).%d.png', y);
y=y+1;
我希望的结果。我希望,我可以自动得到它。
任何帮助将不胜感激。
由于阿拉伯语是我的母语,因此我会在这方面为您提供帮助。 让我首先明确:一些阿拉伯字母包含非连接区域。 因此,仅使用图像处理技术是不够的。 几年前,我设计了一个利用这个想法的系统:与同一个字母相关的区域要么在字母的上方,要么在字母的下方。 步骤:
- 将图像转换为二进制。
- 补充图片。文字为白色,背景为黑色
- 处理图像以将其分成多个 行。 这可以通过在垂直轴上执行投影来完成。山谷将与线条之间的空间相关。
- 每一行都会拼命进行: 区域检测。 彼此上方或下方的所有区域将被分割在一起
如果文字是由人“手写”的,问题会变得更加复杂。 然后你需要一个机器学习解决方案来验证分割区域。