条纹图像的特征检测方法与程序设计Word文档下载推荐.docx
《条纹图像的特征检测方法与程序设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《条纹图像的特征检测方法与程序设计Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
(毫米/像素)的标定,即对每个像素代表的实物尺寸的测定,则可以得到线径的实际尺寸
:
3、实验指标及要求
自行设计图像处理程序和算法,实现给定条纹图像中的条纹中心线和条纹宽度的检测,并以像素为单位给出宽度检测结果。
4、实验设备
PC计算机,MATLAB程序开发软件,PHOTOSHOP图像处理软件,被处理的数字图像文件等。
5、实验及结果分析
(1)叙述实验设计过程中需要考虑的图像处理步骤;
解:
读取待处理图像;
对图像进行中值滤波处理;
采用最大类间方差法选取一个合理的二值化分割阈值;
按照阈值进行二值化处理;
闭运算处理;
统计每一行含有目标对象的像素数目,并出其平均值,得到以像素为单位的条纹宽度检测结果;
找到目标图像每一行的中心位置,将其连接起来,即得到了条纹中心线。
(2)简述在所设计的程序实现中所采用的图像处理算法及依据;
中值滤波:
消除图像中含有的噪声点,对噪声信号进行了有效的抑制;
最大类间方差法:
方差是表征数据分布不均衡性的统计量,通过阈值对目标和背景进行了分割,通过循环使得两类数据间的方差越大越好,把该结果对应的阈值作为最佳阈值;
二值化处理:
通过二值化处理,使图像的像素只有0和1,便于后续的处理;
闭运算:
选取了一个结构元素,进行闭运算处理,目的是填充目标内小空洞、连接断开的近邻目标、平滑边界;
宽度检测:
统计每行含有目标对象的像素数目,并求出其平均值,即得到了以像素为单位的条纹宽度检测结果;
条纹中心线:
找到目标图像中每一行的中心位置,将其连接起来,即得到了条纹中心线。
(3)写出提取图像中条纹中心线检测的程序流程和程序代码;
条纹中心线检测的程序代码:
%---Executesonbuttonpressinpushbutton5.
functionpushbutton5_Callback(hObject,eventdata,handles)
aa=handles.aa;
[m,n]=size(aa);
fori=1:
m%逐行扫描
z0=find(aa(i,:
)==0);
k=length(z0);
fz(i)=z0
(1);
%找出目标对象每行的第一个元素的坐标
lz(i)=z0(k);
%找出目标对象每行的最后一个元素的坐标
y=round((lz+fz)/2);
%求每行第一个和最后一个元素坐标平均值,即得到每行的中心位置
end
x=1:
m;
plot(y,x,'
r'
'
LineWidth'
1)%画出中心线
axes(handles.axes3);
图1:
条纹中心线检测的程序流程图图2:
条纹宽度的程序流程图
(4)写出检测图像中条纹宽度的程序流程和程序代码;
条纹宽度的程序代码
%---Executesonbuttonpressinpushbutton4.
functionpushbutton4_Callback(hObject,eventdata,handles)
one_count=sum(aa,2);
%统计图像背景中每行所包含的像素数目
zero_count=size(aa,2)-one_count;
%计算统计出目标图像中每行所包含的像素数目
handles.zero=zero_count;
dia=mean(zero_count);
%计算像素平均值,得到以像素为单位的条纹宽度检测结果
dstr=['
检测结果:
'
num2str(dia)'
pixels'
];
%将检测结果在GUI中显示出来
set(handles.text3,'
String'
dstr);
guidata(hObject,handles);
(5)给出以像素为单位的条纹宽度检测结果,用不同的颜色标记出条纹中心线。
(见图3)
图3:
检测结果及中心线
6、实验总结与体会
(1)分析总结实现工业目标对象特征检测的基本图像处理环节;
首先,读取观察图像,判断图像的质量;
然后,在对图像滤波处理和图像增强,使图像噪声得到抑制,对比度增强;
选取合适的方法,进行二值化处理;
去除伪目标,通过贴标签的方法区分不同的目标对象;
最后,对目标对象进行检测处理,获取我们想要的特征。
(2)分析并提出提高条纹宽度检测精度的方法(至少一种方法);
①图像进行锐化处理,使目标图像的边界信息突出,避免其在滤波时损失部分信息
②采用区域提取的方法,将研究的目标图像从图像中分割出来,进行宽度检测,这样就会避免对不是目标对象的像素点进行统计了,提高了检测的精度。
(3)分析并绘出工业图像检测应用系统的基本组成系统框图。
(见图4)
图4:
工业图像检测应用系统基本组成
7、参考文献
[1]章毓晋编著.图象分析与处理.北京:
清华大学出版社,1999年
[2]何锦平.基于小波分辨的图像增强及其应用研究[D].西北工业大学硕士学位论文,2003.4
[3]孔祥刚,诸静.基于PCI总线和DSP芯片的图像处理平台的硬件设计[J].电子技术应用,2003(12):
70~73
[4]孙小鹏,孔玲君.基于图像处理的数字印刷线条质量检测方法研究[J].包装工程,2013年7期
[5]闫敬文,《数字图像处理MATLAB版》,国防工业出版社,2007.2
8、程序代码及程序流程图
functionvarargout=exp5(varargin)
gui_Singleton=1;
gui_State=struct('
gui_Name'
mfilename,...
'
gui_Singleton'
gui_Singleton,...
gui_OpeningFcn'
@exp5_OpeningFcn,...
gui_OutputFcn'
@exp5_OutputFcn,...
gui_LayoutFcn'
[],...
gui_Callback'
[]);
ifnargin&
&
ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
functionexp5_OpeningFcn(hObject,eventdata,handles,varargin)
handles.output=hObject;
functionvarargout=exp5_OutputFcn(hObject,eventdata,handles)
varargout{1}=handles.output;
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)
a=imread('
line2.bmp'
);
axes(handles.axes1);
imshow(a);
handles.a=a;
%---Executesonbuttonpressinpushbutton2.
functionpushbutton2_Callback(hObject,eventdata,handles)
a=handles.a;
a=a(:
:
1);
J=medfilt2(a);
axes(handles.axes2);
imshow(J);
handles.J=J;
%---Executesonbuttonpressinpushbutton3.
functionpushbutton3_Callback(hObject,eventdata,handles)
J=handles.J;
bw=im2bw(J,graythresh(J));
bw=bwareaopen(bw,100);
imshow(bw);
se=strel('
square'
10);
aa=imclose(bw,se);
imshow(aa);
holdon
handles.aa=aa;
m
1)
%---Executesonbuttonpressinpushbutton6.
functionpushbutton6_Callback(hObject,eventdata,handles)
close;
图5:
程序流程图