附录4.8
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 计算每一个中文子图中心点的位置,1个子图最多3个有效字 % 参数:
% data 图像RGB数据 % 返回值:
% arr 每一个子图有效字的中心点位置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function arr = calCircle(data)
%记录每一个图片的黑色 ud = zeros(209,180) ;
%结果,因为一个子图最多有3个 arr = zeros(209,3);
%按行遍历,记录每一行是否有黑色 for i = 1:209 for x = 1:180 for y = 1:72
if data{i}(x,y) ~= 255 %当前行有黑色 ud(i,x) = 1; break; end end end end
%记录超过36个像素的字的中心位置,存入数组 for num = 1:209 co = 0; count = 0; for i = 1:179
%如果连续小于36则清零
if count < 36 && ud(num,i+1) ~= 1 count = 0; end
%大于36则记录中心位置
if count >= 36 && ud(num,i+1) ~= 1 co = co+1;
arr(num,co) = i - count/2; count = 0; end
%如果连续则计数器+1
if ud(num,i) == 1 && ud(num,i+1) == 1 count = count + 1; end
29
end end
附录4.9
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 计算每一个英文子图中英文所在四线三格中间格子的位置 % 参数:
% data 图像RGB数据 % 返回值:
% arr 每一个子图英文所在四线三格中间格子的位置 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function arr = calEngCircle(data)
%记录每一个图片的黑色 ud = zeros(209,180) ;
%结果,因为一个子图最多有3个英文字符 arr = zeros(209,3);
%按行遍历,记录每一行是否有黑色 for i = 1:209 for x = 1:180 count = 0; for y = 1:72
if data{i}(x,y) ~= 255 %当前行有黑色 count = count + 1; end end
ud(i,x) = count; end end
%记录超过36个像素的字的中心位置,存入数组 for num = 1:209
co = 0; %记录第几个字母 count = 0; %记录黑色个数 sum = 0;
for i = 1:179
if ud(num,i) > 12 && ud(num,i+1) > 12 sum = sum + ud(num,i); count = count + 1; end
%遇到23个以上黑色的时候
if ud(num,i+1) <= 12 && count >= 23 %记录
co = co + 1;
arr(num,co) = i - count / 2;
%清零
30
sum = 0; count = 0; end
%如果下一个为白色且没有连续23个黑色,则清零 if ud(num,i+1) <= 12 && count < 23 sum = 0; count = 0; end end
if co == 0 ud(num,:) end end
附件4.10
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 已知最左列的情况下求同一行的数据 % 参数:
% data 图像RGB数据
% arr 子图像的中心点数组
% leftArray 最左列的坐标 1x11的数组 % 返回值
% Array 返回无序的行
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function Array = sameRow(data,arr,leftArray)
%控制变量 n1= 0; n2= 0; n3= 0; n4= 0; n5= 0; n6= 0; n7= 0; n8= 0; n9= 0; n10= 0; n11= 0;
%使每一行的每一个分别减最左列的,如果相差小于3,则代表是同一行 for i = 1:209 flag = 0; for j = 1:3 for k = 1:3
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(1),k))<3 || (n1> 1 && abs(arr(i,j) - arr(Array(1,n1),k))<3))
31
n1 = n1 + 1; Array(1,n1) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(2),k))<3 || (n2> 1 && abs(arr(i,j) - arr(Array(2,n2),k))<3)) n2 = n2 + 1; Array(2,n2) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(3),k))<3 || (n3> 1 && abs(arr(i,j) - arr(Array(3,n3),k))<3)) n3 = n3 + 1; Array(3,n3) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(4),k))<3 || (n4> 1 && abs(arr(i,j) - arr(Array(4,n4),k))<3)) n4 = n4 + 1; Array(4,n4) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(5),k))<3 || (n5> 1 && abs(arr(i,j) - arr(Array(5,n5),k))<3)) n5 = n5 + 1; Array(5,n5) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(6),k))<3 || (n6> 1 && abs(arr(i,j) - arr(Array(6,n6),k))<3)) n6 = n6 + 1; Array(6,n6) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(7),k))<3|| (n7> 1 && abs(arr(i,j) - arr(Array(7,n7),k))<3)) n7 = n7 + 1; Array(7,n7) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(8),k))<3 || (n8> 1 && abs(arr(i,j) - arr(Array(8,n8),k))<3)) n8 = n8 + 1;
32
Array(8,n8) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(9),k))<3 || (n9> 1 && abs(arr(i,j) - arr(Array(9,n9),k))<3)) n9 = n9 + 1; Array(9,n9) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(10),k))<3 || (n10> 1 && abs(arr(i,j) - arr(Array(10,n10),k))<3)) n10 = n10 + 1; Array(10,n10) = i; flag = 1; break; end
if arr(i,j)~= 0 && (abs(arr(i,j) - arr(leftArray(11),k))<3 || (n11> 1 && abs(arr(i,j) - arr(Array(11,n11),k))<3)) n11 = n11 + 1; Array(11,n11) = i; flag = 1; break; end end
if flag == 1 break; end end end
附件4.11
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 根据左右方向的最佳匹配顺序输出备选图像供人工干预 % 提供的图像编号从1开始 % 参数:
% data 图像RGB数据 % l 向左的最佳匹配 % r 向右的最佳匹配
% num 待输出的图像编号,从1开始
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function DrawH(data,l,r,num)
l1 = [data{l{num}(209)},data{num}]; l2 = [data{l{num}(208)},data{num}]; l3 = [data{l{num}(207)},data{num}];
r1 = [data{num},data{r{num}(209)}]; r2 = [data{num},data{r{num}(208)}];
33
r3 = [data{num},data{r{num}(207)}];
subplot(2,3,1),imshow(l1),title(l{num}(209)); subplot(2,3,2),imshow(l2),title(l{num}(208)); subplot(2,3,3),imshow(l3),title(l{num}(207)) subplot(2,3,4),imshow(r1),title(r{num}(209)) subplot(2,3,5),imshow(r2),title(r{num}(208)) subplot(2,3,6),imshow(r3),title(r{num}(207))
附件4.12
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 根据上下方向的最佳匹配顺序输出备选图像供人工干预 % 提供的图像编号从1开始 % 参数:
% data 图像RGB数据 % u 向上的最佳匹配 % d 向下的最佳匹配
% num 待输出的图像编号,从1开始
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function DrawV(data,u,d,num)
u1 = [data{u{num}(209)};data{num}]; u2 = [data{u{num}(208)};data{num}]; u3 = [data{u{num}(207)};data{num}];
d1 = [data{num};data{d{num}(209)}]; d2 = [data{num};data{d{num}(208)}]; d3 = [data{num};data{d{num}(207)}];
subplot(1,6,1),imshow(u1),title(u{num}(209)) subplot(1,6,2),imshow(u2),title(u{num}(208)) subplot(1,6,3),imshow(u3),title(u{num}(207)) subplot(1,6,4),imshow(d1),title(d{num}(209)) subplot(1,6,5),imshow(d2),title(d{num}(208)) subplot(1,6,6),imshow(d3),title(d{num}(207))
34