基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx

上传人:b****5 文档编号:16256445 上传时间:2022-11-22 格式:DOCX 页数:10 大小:128.18KB
下载 相关 举报
基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx_第1页
第1页 / 共10页
基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx_第2页
第2页 / 共10页
基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx_第3页
第3页 / 共10页
基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx_第4页
第4页 / 共10页
基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx

《基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx》由会员分享,可在线阅读,更多相关《基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

基于数字图像处理技术的答题卡识别方法图像处理课程练习文档格式.docx

注意到答题卡在采集图像的过程中由于各种原因可能会产生图像倾斜、水平或垂直错位,要进行正确识别首先必须对其进行校正,再依据像素

检索技术进行识别。

二、总体方案设计

说明系统运行环境,编程软件平台,编码算法原理,算法流程图设计

本系统运行在当今主流的Windows7系统,使用较新的MATLAB2012b进行设计。

在进行旋转校正时,先使用Hough变换检测出答题卡边缘直线,调用lines函数的参数得到倾斜角度并进行旋转变换从而消除答题卡倾斜状态。

将扫描部分分为

7个扫描区域,分别使用像素检索技术,对各个检索区域内的灰度值进行累加,并对累加和进行阈值判定,从而得出检索区域颜色,完成判定。

最后再与标准答案进行比对,得出成绩。

流程图:

分别依次统计各大扫描区域内各个检测区域的灰度值

阈值判定,得出所检测区域颜色并赋值

1

与标准答案比

成绩

匕对算出

结束

三、程序设计

clc;

clear;

close;

A=imread('

原图.jpg'

);

%读取图像

imshow(A),title('

原图'

gray=rgb2gray(A);

bw=edge(gray,'

canny'

%canny算子边缘检测得到二值边缘图像[h,t,r]=hough(bw,'

RhoResolution'

0.5,'

ThetaResolution'

0.5);

%Ho

ugh变换

figure,imshow(imadjust(mat2gray(h)),'

XData'

t,'

YData'

r,'

lnitialMagnification'

'

fit'

),title('

Hough变换矩阵'

%显示Hough变换矩阵

xlabel('

\theta'

),ylabel('

\rho'

axison,axisnormal,holdon;

P=houghpeaks(h,2);

x=t(P(:

2));

y=r(P(:

1));

plot(x,y,'

s'

color'

r'

),title('

'

%获取并标出参数平面的峰值点

lines=houghlines(bw,t,r,P,'

FillGap'

5,'

Minlength'

7);

%检测图像中的直线段figure,imshow(gray);

holdon;

max_len=0;

fori=1:

length(lines)

xy=[lines(i).point1;

lines(i).point2];

plot(xy(:

1),xy(:

2),'

LineWidth'

2,'

Color'

g'

%用绿色线段标注直线段plot(xy(:

1),xy(1,2),'

x'

LineWidth'

y'

1),xy(2,2),'

%标注直线段端点

end

x=lines.theta;

%由与图像边缘平行的直线段的斜率得到整个图像旋转的角度

B=imrotate(gray,x);

%图像修正figure,imshow(B),title('

旋转后图像'

T=graythresh(B);

%使用OTSU方法获得阀值Tresult=im2bw(B,T);

%二值化图像figure,imshow(result),title('

二值化后结果'

%扫描区域:

在本程序中,有7个扫描区域,分别对应题号为

1-5,6-10,11-15,16-20,21-25,26-30,31-35这几个区域

n=52;

m=244;

%首先测得答题区域第一题A选项左上角的坐标(52,244)s=60;

t=90;

%s为上下两个扫描区域的距离,t为左右两个扫描区域的距离。

P=4;

Q=5;

%P为字母项的个数(这里有ABCD共有4项),Q为每个小区域选项数。

interval_length=14;

%左右相邻两题填涂区域左边线的距离

interval_width=9;

%上下相邻两题填涂区域上边线的距离

length=11;

%填涂区域的长度

width=6;

%填涂区域的宽度

a2=zeros(4,5);

%初始化灰度值统计矩阵

%第1-5题区域的检测

forP=1:

4

forQ=1:

5

%m=244;

%第1-5题区域的检测的起始坐标(即第一题A选项左上角的坐标)

a仁result(m+(P-1)*(interval_width+1):

m+(P-1)*(interval_width+1)+width,n+(Q-1)*(interval_length+1):

n+(Q-1)*(interval_length+1)+length);

-%得到矩形区域内各像素的灰度值

sum仁sum(sum(a1));

%计算统计的矩形区域内像素灰度值之和a2(P,Q)=sum1;

%多次循环后得到20个统计区域的灰度值,并依次放在a2矩阵中

a2(a2<

80)=1;

a2(a2>

=81)=0;

%对灰度值统计矩阵里的数值进行处理,大于某一阀值的值赋1,

其余的赋0。

%在此程序中,涂黑则相应数值为1。

result1_5=a2;

%存储1-5题的结果

%第6-10题区域的检测

a仁result(m+s*1+(P-1)*(interval_width+1):

m+s*1+(P-1)*(interval_width+1)+width,n+(Q-1)*(interval」ength+1):

n+(Q-1)*(interval」ength+1)+length);

a2(P,Q)=sum1;

result6_10=a2;

%存储6-10题的结果

%第11-15题区域的检测

a仁result(m+(P-1)*(interval_width+1):

m+(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):

n+t*1+(Q-1)*(interval_length+1)+length);

sum1=sum(sum(a1));

result11_15=a2;

%存储11-15题的结果

%第16-20题区域的检测

a仁result(m+s*1+(P-1)*(interval_width+1):

m+s*1+(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):

a2(P,Q)=sum1;

endend

result16_20=a2;

%存储16-20题的结果

%第21-25题区域的检测

a仁result(m+s*2+(P-1)*(interval_width+1):

m+s*2+(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):

result21_25=a2;

%存储21-25题的结果

%第26-30题区域的检测

a1=result(m+s*3+(P-1)*(interval_width+1):

m+s*3+(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):

result26_30=a2;

%存储26-30题的结果

%第31-35题区域的检测

a仁result(m+s*4+(P-1)*(interval_width+1):

m+s*4+(P-1)*(interval_width+1)+width,n+t*1+(Q-1)*(interval_length+1):

result31_35=a2;

%存储31-35题的结果

answer=[result1_5,result6_10,result11_15,result16_20,result21_25,result26_30,result

31_35];

%将所检测的7个区域的结果汇总

dlmwrite('

Result.txt'

answer);

%以txt文本的形式输出结果矩阵

disp(answer);

%在command窗口实时显示结果

%附加一个统计错误的并显示分数的部分,假定正确答案是35个C

T=zeros(4,35);

%初始化矩阵

T(1,:

)=1;

%设定正确答案的参数

mark仁answer-T;

wrongx=sum(mark1~=0);

%当结果选错时,每一列将分别多一个1与-1。

选择正确时,此列都是0。

A=sum(sum(wrongx));

%统计非零的结果。

wrong=A/2;

%由于-1与1是成对出现的,所以需要将上一步所得结果除以2.

score=35-wrong;

%算出结果

fprintf('

选择题得分为%d'

score);

%在command窗口输出成绩

四、模块测试与分析

1、首先进行Hough变换,得到Hough变换矩阵如下所述(见图1)

-600

-400

-200

200

400

600

图1

可以观察到2个峰值。

2、使用Houghlines函数检测直线,得到如下结果(见图2)

图2

并使用lines.theta语句得到直线角度,即为图像倾斜角度。

x=lines.thetax=4

3、修正图像(如图3所示)

旋转后图像

图3

这时观察到倾斜的图像已经得到改正。

4、在二值化后使用像素检索技术对灰度值进行统计。

分为7个扫描区域,如图

4中7个方框所示。

五、测试与调试过程

这次实验遇到的第一个问题是如何由Hough变换得到直线角度。

这个是教材上

没有的。

网上提示说是调用lines函数,但没有说怎么调用。

后来才从一篇Hough变换的文章中知道是lines.theta,类似于C#的调用方法。

还有就是在本次设计中我第一次是将旋转部分和灰度值统计部分分开写成2个m文件的,然后再直接

合并,结果发现有误。

经过检查后发现matlab在读取图片时会在原图片外加一

圈白色“幕布”,导致原图片的长与宽发生变化,使原图片中的坐标也发生变化。

因此最后还得重新修改相关参数。

六、结果与心得体会

扫描矩阵为,注意观察其中1出现的位置,和答题卡中填涂区域完全一致,所以

可知此方法成功的进行地对答题卡进行J识别。

Columns1through9

Columns10through18

 

Columns19through27

Columns28through35

输出结果为得分为4分,与预期值也相符(假定正确答案是35个A)

本论文使用图像处理技术以MATLAB为工具成功实现了对答题卡填涂区域的识别,具有一定的实用价值。

图像处理课程是一门实践性很强的课程,通过这次课

程设计我对图像处理的基本思路有了基本的认识。

在这次设计中,我的最大收获

是做任何东西都必须苦心钻研,积极查找资料。

欢迎下载

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1