滑动窗口算法检测某些数字

时间:2017-04-26 15:13:41

标签: matlab

我有一个项目来检测吉他谱表中的数字(坐标位置和数字)。这是一个表格的例子:

Guitar Tablature

首先,我做了一些预处理。

第二步是细分。此步骤目标是删除行,获取数字并存储每个数字的坐标。

我认为如果我实现滑动窗口算法,它将很容易检测到它们。

我已经尝试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

1 个答案:

答案 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

enter image description here