我有一个项目来检测吉他谱表中的数字(坐标位置和数字)。这是一个表格的例子:
首先,我做了一些预处理。
第二步是细分。此步骤目标是删除行,获取数字并存储每个数字的坐标。
我认为如果我实现滑动窗口算法,它将很容易检测到它们。
我已经尝试blockproc
,但我不知道如何使用它。任何其他功能建议将不胜感激。
还有一些代码(仅用于以100px显示裁剪的图像):
clc;clear all;`
image = imread('tabTes.png');
imageWidth = size(image, 2);
imageHeight = size(image, 1);
windowWidth = 100;
windowHeight = 100;
for j = 1:imageHeight - windowHeight + 1
for i = 1:imageWidth - windowWidth + 1
SlideWindow = image(j:j + windowHeight - 1, i:i + windowWidth - 1, :);
figure
imshow(SlideWindow);
end
end
答案 0 :(得分:2)
我讨厌这样做,但不能阻止它。
im=imread(..);
% rgb to gray
im2=rgb2gray(im);
% threshold
im_bw=im2<240;
% remove some clutter
im3=imopen(im_bw,ones(2,1));
[x,y]=find(im3);
im4=bwselect(im_bw,y,x,4);
im5 = imclose(im4,strel('disk',5));
im5 = bwmorph(im5,'thicken',2);
% bounding boxes
s=regionprops(im5,'PixelIdxList','Centroid','BoundingBox');
bboxes=cat(1,s.BoundingBox);
Iocr = insertShape(im, 'Rectangle', bboxes,'Color','blue');
figure; imshow(Iocr,[]);
hold all
% use OCR
for i=1:numel(s)
tmp=ceil(s(i).BoundingBox);
tmp=im_bw(tmp(2):tmp(2)+tmp(4),tmp(1):tmp(1)+tmp(3),:);
txt=ocr(tmp,'CharacterSet','0123456789');
text(s(i).Centroid(1),s(i).Centroid(2),txt.Text,'Color','r')
end