基于C++MFC的活塞环外观表面缺陷机器视觉检测系统

目 录
1 绪论 1
1.1 课题研究背景和意义 1
1.2国内外研究现状和发展 2
1.3研究内容 2
2 活塞环生产过程介绍与缺陷分析 4
2.1活塞环工作原理 4
2.2活塞环的的加工特点 5
2.3活塞环工艺过程介绍 6
2.4活塞环缺陷形成原因 6
3 机器视觉系统的工作原理与组成 8
3.1机器视觉工作原理 8
3.2机器视觉系统组成 8
4 图像处理介绍与缺陷分析 10
4.1对活塞环缺陷特征的简单分析 10
4.2图像二值化 10
4.3图像处理常用方法 11
4.4图像预处理 12
4.4.1图像灰度化 12
4.4.2平滑处理 12
4.4.3图像增强-直方图均衡化(equalizeHist) 14
4.4.4形态学滤波(morphologyEx) 15
4.5图片的裁剪(Rect) 16
4.6图片的混合(addWeighted) 16
4.7缺陷面积的计算(contourArea) 17
4.8图像的遍历算法 17
5 功能模块程序设计与开发 18
5.1图像预处理 18
5.2各功能的实现方法 18
5.2.1轮廓的提取 18
5.2.2图像的裁剪 20
5.2.3掉角的检测及面积测量 21
5.2.4压伤的检测 27
5.3操作界面程序设计 29
5.3.1按钮的实现 30
5.3.2图像的加载 30
6 可行性分析 32
6.1各因素对系统的影响 32
6.1.1社会因素的考虑 32
6.1.2健康因素的考虑 32
6.1.3安全因素的考虑 33
6.1.4文化因素的考虑 33
6.1.5环境因素的考虑 33
6.2复杂环境的预测 33
6.2.1光源 33
6.2.2工业相机的成像方式 34
6.2.3环境条件 35
6.3系统经济性分析 35
6.3.1生产成本 35
6.3.2产生社会价值 36
7 结论 37
参考文献 38
致 谢 39
1.3研究内容
本课题主要研究的内容有活塞环缺陷图像的采集和活塞环的缺陷图像处理,同时也涉及到活塞环工艺和机器视觉检测系统的研究。论文分为六章:
第一章:论述了国内外对于缺陷检测时的一些发展,并简要介绍论文的主要研究内容与研究方案。
第二章:阐述了目前国内外生产活塞环时的特点,与一些常规的加工方法,介绍了它的生产工艺以及缺陷产生的原因和一些避免措施。
第三章:介绍机器视觉识别的工作原理与机器视觉系统识别的组成。
第四章:介绍了活塞环缺陷的数字图像的特征,介绍了一些图像的预处理,介绍了如何遍历所有图像。
第五章:根据设计的程序各模块如何实现进行详细介绍,包括了图像的预处理、轮廓的提取,图像的裁剪、掉角的检测及面积测量、压伤的测量和操作界面的设计与功能实现。
第六章:对设计的产品和程序进行可行性分析,包括了社会、健康、法律、文化、经济以及环境因素的分析
第七章:结论与展望。

3 机器视觉系统的工作原理与组成
3.1机器视觉工作原理
基于机器视觉的产品检测在工业自动化生产中有很多重要的应用[12-13]。机器的视觉系统是利用计算机来替代人眼获取的图像信息,结合程序算法对图像信息进行处理,进行智能控制、检测和测量[14]。机器视觉包含了机械电子、计算机图像处理、控制自动化等方面。随着科技不断地发展,机器视觉的研究与应用迅速发展,对于获取得到地图像数据,已经从简单单一的灰度图像发展成为了具有高分辨率的彩色图像,在到现在的3D成像技术,图像信息从二维数据转变成为三维数据,能获取到人眼能够识别到的全部图像数据,并结合光学仪器和成熟的成像技术,机器视觉能获取肉眼无法完全识别的微小、高速的图像数据。
3.2机器视觉系统组成
机器视觉主要包括视觉引导和视觉检测,活塞环外观缺陷检测属于视觉检测。整个识别系统包括光源、成像布局、工业相机、上位机、执行机构、信息处理。在一定的光源条件和场景布局下,相机能够采集特定的数据信息,其中包括外观轮廓、缺陷信息等有用信息,同时也存在大量无用信息,需要通过光源条件、场景布局来消除,同时也可以通过软件的方式实现采集特定的数据。整个系统工作方式如下:
采用特定的光源,特定的成像布局对采集区进行环境搭建,执行机构通过旋转,活塞环完成一周的数据采集,工业相机采集活塞环表面数据,并将数据上传至上位机,上位机通过OpenCV库对采集图像数据进行处理,从而检测具体的缺陷,最后输出报告。
影响机器视觉性能的因素主要包括以下几个方面[15]:
(1)光源
光源的作用不仅是起到照明作用,其中在检测环节中,能够让缺陷特征更加明显,其次与环境能够有明显的区域差异,本文转载自http://www.biyezuopin.vip/onews.asp?id=14849能够在处理图像中快速提取其轮廓,为之后的图像处理提供便利。
(2)成像布局
检测的东西不同需要的成像布局方式也不尽相同,检测表面缺陷时,可以采用环形光源,检测轮廓时,可以采用底部背光源。

4 图像处理介绍与缺陷分析
4.1对活塞环缺陷特征的简单分析
基体掉角是活塞环中比较明显的缺陷,主要是因为在加工中开口间隙的过程中由于应力集中导致活塞环非去除部分崩裂,形成缺角,进行二值化后可以明显观测出来。
压伤是缺陷中比较难检测的缺陷,主要是因为压伤的形状很小,且颜色和反光性能与活塞环基体的颜色和反光性能十分接近,需要对打光角度和光的亮度要求很高,需要低角度强光照射。
划痕是由于在运输过程中的碰撞,造成表面形成的划痕,为克服在图像获取中光照对图像照射的不均匀,需要对图像进行增强处理[16]。选择直方图均衡化既可以提高图像的对比度,也可以改善图像的视觉效果,达到凸显划痕的目的。


// MFC测试.cpp : 定义应用程序的类行为。
//

#include "stdafx.h"
#include "MFC测试.h"
#include "MFC测试Dlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMFC测试App

BEGIN_MESSAGE_MAP(CMFC测试App, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CMFC测试App 构造

CMFC测试App::CMFC测试App()
{
	// 支持重新启动管理器
	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

	// TODO: 在此处添加构造代码,
	// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的一个 CMFC测试App 对象

CMFC测试App theApp;


// CMFC测试App 初始化

BOOL CMFC测试App::InitInstance()
{
	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
	//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 将它设置为包括所有要在应用程序中使用的
	// 公共控件类。
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// 创建 shell 管理器,以防对话框包含
	// 任何 shell 树视图控件或 shell 列表视图控件。
	CShellManager *pShellManager = new CShellManager;

	// 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题
	CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

	// 标准初始化
	// 如果未使用这些功能并希望减小
	// 最终可执行文件的大小,则应移除下列
	// 不需要的特定初始化例程
	// 更改用于存储设置的注册表项
	// TODO: 应适当修改该字符串,
	// 例如修改为公司或组织名
	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

	CMFC测试Dlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}
	else if (nResponse == -1)
	{
		TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。n");
		TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。n");
	}

	// 删除上面创建的 shell 管理器。
	if (pShellManager != NULL)
	{
		delete pShellManager;
	}

	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
	//  而不是启动应用程序的消息泵。
	return FALSE;
}


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>