目录
前言
课题背景和意义
实现技术思路
一、 硬币检测方法
1.1 规格、变形监测
1.2 变色检测
二、 数据集
三、实验及结果分析
3.1 实验环境搭建
3.2 模型训练
最后
前言
📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。
🚀对毕设有任何疑问都可以问学长哦!
选题指导:
最新最全计算机专业毕设选题精选推荐汇总
大家好,这里是海浪学长毕设专题,本次分享的课题是
🎯基于机器学习的硬币检测识别系统
课题背景和意义
在许多应用场景中,如自动售货机、自助收银系统和货币处理等,准确地检测和识别硬币是至关重要的任务。在自动售货机和自助收银系统中,硬币检测识别系统可以帮助自动识别不同面额的硬币,实现自动计算和找零,提高交易的效率和准确性。在货币处理和银行业务中,系统可以用于硬币分类和计数,加快现金处理的速度和精度。此外,该系统还可以在货币流通监控和反假币识别中发挥重要作用。
实现技术思路
一、 硬币检测方法
1.1 规格、变形监测
双峰法是一种简单的图像二值化方法,用于计算分割阈值。它基于灰度图像的灰度直方图,通过计算直方图中双峰之间的最小值来确定二值化的阈值。在最理想的情况下,灰度直方图呈现出明显的双峰分布,其中两个峰顶对应的灰度值分别为Zi和Zj。此时,最佳的二值化阈值即位于(Zi, Zj)区域内最低点对应的灰度值。双峰法通常适用于前景和背景之间有明显差异,并且在直方图中它们的分布区域没有重叠的图像。
数学形态学是图像分析的一个分支,其原理是利用非线性算子对目标形态进行操作。相比基于卷积的线性算子,数学形态学在很大程度上表现更出色。形态学运算经常被用于图像分析的预处理阶段,模糊图像中目标边缘的增强,以及前景和背景的分割等任务。
在二值图像中,假设目标区域为黑色像素,而白色像素为背景。形态学操作Ψ(X)是由图像X和结构元素B之间的运算定义的。结构元素B是一个关于局部原点O的邻域,可以采用不同形状的结构元素,如图中所示。形态学操作Ψ(X)实际上是使用结构元素B规律地扫描整个图像,将处理后的结果保存到输出图像的当前像素位置。
膨胀和腐蚀是形态学变换的两个基本操作。通过这两个基本变换,可以衍生出开运算、闭运算和形状分解等更多的形态学运算。膨胀和腐蚀并不可逆,即在对图像进行一次膨胀操作后,再进行一次膨胀操作得到的图像与原始图像不同。开运算和闭运算是膨胀和腐蚀的结合使用,先腐蚀后膨胀的操作称为开运算,通常用于消除图像中的细小部分。相反地,先膨胀后腐蚀的操作称为闭运算,通常用于连接相邻区域,填补图像中的小孔洞。
相关代码示例:
# 读取图像
image = cv2.imread("image.jpg", 0) # 以灰度模式读取图像
# 定义结构元素(内核)
kernel = np.ones((5, 5), np.uint8) # 5x5的正方形结构元素
# 膨胀操作
dilated = cv2.dilate(image, kernel, iterations=1)
# 腐蚀操作
eroded = cv2.erode(image, kernel, iterations=1)
# 开运算
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
# 闭运算
closing = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernel)
# 显示结果图像
cv2.imshow("Original", image)
cv2.imshow("Dilated", dilated)
cv2.imshow("Eroded", eroded)
cv2.imshow("Opening", opening)
1.2 变色检测
颜色空间,也称为彩色模型,是计算机系统中用于表示现实世界各种颜色的模型。它通过一种量化标准来描述和分析计算机图像中的颜色信息。颜色空间本质上是坐标系统和子空间的描述。常用的颜色空间包括RGB、CMYK、CIE-Lab和HSV等。
HSV颜色模型中,色调分量呈圆形,不同的数值大小代表不同的颜色。饱和度分量通过圆锥的宽度来表示,越接近临界值1,颜色的纯度越高。当饱和度为0时,颜色变为白色或黑色。明度分量通过圆锥的高度来表示,当明度为0时,颜色为黑色,当明度为1时,颜色为白色。
相关代码示例:
# 读取图像
image = cv2.imread("image.jpg") # 读取图像
# 将图像转换为HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# 获取图像的高度和宽度
height, width, _ = image.shape
# 创建一个空白图像用于显示HSV颜色模型
hsv_color_model = np.zeros((height, width, 3), dtype=np.uint8)
# 遍历图像的每个像素
for y in range(height):
for x in range(width):
# 获取当前像素的HSV值
hue = hsv_image[y, x, 0]
saturation = hsv_image[y, x, 1]
value = hsv_image[y, x, 2]
# 计算在HSV颜色模型中的坐标
radius = int(saturation * width / 2)
angle = int(hue * 360 / 180)
x_model = int(radius * np.cos(np.deg2rad(angle))) + width // 2
y_model = int(radius * np.sin(np.deg2rad(angle))) + height // 2
# 设置HSV颜色模型中的像素值
hsv_color_model[y_model, x_model, :] = [hue, saturation, value]
# 将HSV颜色模型转换回BGR颜色空间
bgr_color_model = cv2.cvtColor(hsv_color_model, cv2.COLOR_HSV2BGR)
# 显示原始图像和HSV颜色模型图像
cv2.imshow("Original", image)
二、 数据集
在通过硬币图像采集设备获取的图像中,不同币种的硬币在尺寸大小上有所不同,因此它们在图像中的位置也会有所变化。因此,在进行后续的硬币检测和缺陷识别之前,首先需要从图像中提取完整的硬币目标。对采集到的图像进行矩形区域的裁剪,该矩形区域包含了所有可能出现硬币的位置。由于硬币正面在正背光照射下的图像由同一台相机采集,因此正面和反面图像的矩形裁剪区域位置相同。
相关代码示例:
# 读取图像
image = cv2.imread("image.jpg")
# 定义矩形区域的位置和大小
x = 100 # 矩形左上角的x坐标
y = 100 # 矩形左上角的y坐标
width = 400 # 矩形的宽度
height = 300 # 矩形的高度
# 裁剪矩形区域
cropped_image = image[y:y+height, x:x+width]
# 显示裁剪后的图像
cv2.imshow("Cropped Image", cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
三、实验及结果分析
3.1 实验环境搭建
开发环境中使用的CPU是AMD的1800X 3.6GHz,配备了两根8GB频率为3000MHz的海盗船内存条。在这样的配置下,硬币检测的运行速度能够达到毫秒级别。对于正常合格的硬币,平均检测速度为20ms,而对于缺陷区域较大的硬币,平均检测速度为100ms。经过测试,平均检测速度为50ms,这已经满足了实时检测的要求。综上所述,该开发环境能够在合理的时间内进行硬币检测。
3.2 模型训练
硬币图像处理的流程包括从采集图像中提取硬币目标的步骤。首先,通过矩形区域裁剪将包含所有可能硬币位置的区域提取出来。然后,通过观察和统计硬币的灰度直方图,利用双峰法计算二值化的分割阈值,将正常区域和缺陷区域分离。接下来,利用形态学操作测量硬币的厚度,并进行硬币的变色检测。最后,对检测到的缺陷种类进行整合,并对硬币图像中相应的区域进行标注和划分,以进一步的分析和处理。
相关代码示例:
# 读取图像
image = cv2.imread("image.jpg", 0) # 以灰度模式读取图像
# 定义矩形区域的位置和大小
x = 100 # 矩形左上角的x坐标
y = 100 # 矩形左上角的y坐标
width = 400 # 矩形的宽度
height = 300 # 矩形的高度
# 裁剪矩形区域
cropped_image = image[y:y+height, x:x+width]
# 计算二值化的分割阈值
histogram = cv2.calcHist([cropped_image], [0], None, [256], [0, 256])
histogram = np.squeeze(histogram)
peaks, _ = cv2.findPeaks(histogram, minDistance=20, minProminence=50)
threshold = int(np.mean(peaks))
# 对图像进行二值化处理
_, binary_image = cv2.threshold(cropped_image, threshold, 255, cv2.THRESH_BINARY_INV)
硬币在正面光照条件下,磨损或污渍等缺陷区域与正常硬币表面的像素值差异较大。通过观察和统计不同硬币的灰度直方图,可以将缺陷区域与正常区域近似划分为两个峰顶。因此,考虑使用双峰法来计算二值化的分割阈值。另外,可以运用形态学操作测量硬币的厚度,并通过对硬币图像颜色空间的转换完成硬币的变色检测。最后,对检测到的缺陷种类进行整合,并在硬币图像上标注和划分相应的区域。
系统对硬币的合格检测准确率达到了99.8%,对各类缺陷识别的准确率均达到90%以上,平均检测速度在50ms左右,能够满足实时检测的要求。
最后
我是海浪学长,创作不易,欢迎点赞、关注、收藏。文章来源:https://www.toymoban.com/news/detail-829339.html
毕设帮助,疑难解答,欢迎打扰!文章来源地址https://www.toymoban.com/news/detail-829339.html
到了这里,关于毕业设计:基于机器学习的硬币检测识别系统 人工智能 YOLO 计算机视觉的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!