下面是其水平方向按列扫描实现的代码:
1.4 my_calculator:对输入图片进行处理并返回结果图片
观察到测试样例图片的表格外缘都有一定间隔,因此对于输入图片,首先将其二值化,并使用clear_boundary清除
其外缘,保证函数的处理总是对于一个标准的表格进行处理。
然后,对于预处理后的图片,按照10行3列的格式,对图片进行分割,并且将分割后的结果以cell数组的形式存储
[m,n] = size(Im);
% 先去边框,试探空格
exist = [];
for i = 1:n
tmp = find(Im(:,i)== 0);
exist(i) = ~isempty(tmp);
end
% 分块
part = [];sflag = 0;eflag = 0;
for i = 1:length(exist)
if(exist(i)==0 && sflag ==0 && eflag == 0)
continue;
elseif(exist(i)==1 && sflag ==0)
sflag = i;
elseif(exist(i)==0 && sflag ~=0)
part = [part;[sflag,i]];
sflag = 0;
end
end
% 去边框后的图
left = part(1);
right = part(end);
Im = input_image;
RGB = Im;
Im = im2bw(Im); %二值化
Im = clear_boundary(Im); %清除图片边缘,求最小外接矩形
L = size(Im);
[m,n] = size(Im);
%对图片按照方格进行划分
max_row = 10; %行数
max_col = 3; %列数
height = floor(L(1)/max_row); %每个算式方格的高度
width = floor(L(2)/max_col); %每个算式方格的宽度
seg = cell(max_row,max_col); %存储分割后每个位置的算式图片
%分块
for row = 1:max_row
for col = 1:max_col