在matlab中拆分行和列

时间:2014-12-21 10:46:30

标签: matlab image-processing computer-vision image-segmentation

我有这张图片(附件),我想分段数量栏和价格列,但我不知道怎么样?!以及用什么功能帮我做到这一点?!

任何帮助都将不胜感激。谢谢

1 个答案:

答案 0 :(得分:3)

利用输入图像的常规结构,您可以执行以下操作:

img = imread('http://i.stack.imgur.com/SuKT2.jpg'); %//read image
bw = sum(img,3) < 10;  %//convert to binary mask

沿着行的像素总和显示文本行(正空白由空格分隔)

lines = bwlabel( sum( bw,2) > 1 ); %// label each line
lbw = bsxfun( @times, single(bw), lines ); %// label each line in the mask

现在我们可以忽略前8行(标题)和最后两个页脚

sbw = lbw > 8 & lbw < max(lines)- 2; %// select only the relevant lines

我们可以将文本分成列,假设间隙大至少为15像素

col = bwlabel( imfilter( single(sum(sbw,1) < 1), ones(1,15)/15, 'symmetric', 'same' ) < .9 );

计算两列选定行的边界框

st = regionprops( bsxfun(@times, sbw, col ), 'BoundingBox' );

可视化生成的边界框

figure;imshow( img, 'border','tight' );hold on; 
rectangle('Position', st(1).BoundingBox, 'EdgeColor','r','LineWidth',2);
rectangle('Position', st(2).BoundingBox, 'EdgeColor','r','LineWidth',2);    

导致

enter image description here

考虑到边界框,裁剪是相当直接的

col1 = imcrop( img, st(1).BoundingBox ); %// crop the description of the products
col2 = imcrop( img, st(2).BoundingBox ); %// crop the prices