1 引言

最近有小伙伴咨询如何用传统方法进行多个石头检测分割算法, 原文如下所示:

嗯嗯,碰巧让我这个问题,然而我碰巧学过图像处理的一些简单知识.
我们都知道使用opencv可以快速进行图像的基本操作,那么我们就来尝试解决这个问题吧.

2 解决方法

2.1 二值化

传统图像分割,一般就是采用阈值分割的方法来区分前景物体和背景,这里使用全局阈值分割的方法来进行处理,方法如下:

img_file = "./sample.jpeg"
img1 = cv2.imread(img_file)
img  = cv2.resize(img1,(640,400))
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
retval, bin_img = cv2.threshold(gray_img, 120, 255, cv2.THRESH_BINARY )

运行后的效果如下:

上图中,左侧为原图,右侧为二值化后的结果图.

2.2 去燥

观测上图,可以发现二值化后的图像还有很多噪声,这里采用3X3中值滤波的方法进行去燥,代码如下:

img_median = cv2.medianBlur(bin_img, 3)

运行效果如下:

左侧为3X3去燥前的二值图,右侧为使用3X3模板去燥后的结果图,可以看出很多零散的孤立点都被滤除.

2.3 腐蚀

二值图像的腐蚀操作为将图像中的前景物体白色部分进行缩减细化,其运行结果图比原图的高亮区域更小,我们这里选用3X3的十字形kernel进行腐蚀操作.

代码如下:

kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))
erosion_img = cv2.erode(img_median, kernel, iterations=2)

结果如下:

上图中左侧为 iterations=1的腐蚀结果图,表示只进行1次腐蚀操作;右侧为iterations=2的腐蚀结果图,表示连续进行2次腐蚀操作. 可以看出经过腐蚀操作后,前景物体分割的更开了.

2.4 膨胀

图像膨胀是腐蚀操作的逆操作,类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大,线条变粗了.
我们观察腐蚀后的图像,发现很多区域内会有一些空洞点,这时我们需要膨胀操作,来消除这些空洞点,
代码如下:

dilatation_type = cv2.MORPH_ELLIPSE
dilatation_size = 1
element = cv2.getStructuringElement(dilatation_type, (2 * dilatation_size + 1, 2 * dilatation_size + 1),(dilatation_size, dilatation_size))
dilate_img = cv2.dilate(erosion_img, element,iterations=3)

运行结果如下:

上图为 采用3X3椭圆kernel进行3次膨胀后的结果图

2.5 查找轮廓

观察膨胀后的图像,可以看出石头已经被我们分成一个个连续的独立的封闭区域,这时我们可以使用opencv的findContours函数来寻找对应区域的外轮廓,代码如下:

contours, hierarchy = cv2.findContours(dilate_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
out_img = img.copy()
for contour in contours:cv2.drawContours(out_img, [contour, ], -1, (255 ,0, 255), 2)  # pink

结果如下:

2.6 面积过滤

观察上图,我们的输出会有一些错检,我们可以添加一些过滤条件,来进行过滤,有很多面积很小的区域被错分割出来,这里采用面积来滤除部分错检,代码如下:

for contour in contours:area = cv2.contourArea(contour)k = cv2.isContourConvex(contour)if  area>150:cv2.drawContours(img, [contour, ], -1, (0, 0, 255), 2)  # red

结果如下:

左侧为滤除前的结果图,右侧为使用面积过滤后的结果图.

3 总结

本文采用传统图像处理方法,对石头图像进行了简单图像处理,可以得到分割出来的多个石头的外轮廓和面积,最终效果如下:

虽然还有一些错检和漏检,但是本文主要用于探讨传统图像处理的一些常用方法,
上述方案仅供学习交流使用,如有更好的策略,欢迎随时交流.

关注公众号《AI算法之道》,获取更多AI算法资讯。

注: 关注公众号,后台回复 石头 , 可获取完整代码

如何使用传统图像处理方法进行石头检测相关推荐

  1. 关于利用传统图像处理方法进行瑕疵检测的总结

    以iPhone背壳为例,进行瑕疵检测 传统算法方向的选择 瑕疵检测关注的两个问题 瑕疵的标注 瑕疵的量化 历程 1.图像去噪->灰度化->二值化 2.图像去噪->灰度化->ca ...

  2. 如何使用传统图像处理方法进行大米的计数和长轴方向标记

    1 引言 最近使用传统方法进行石头检测和圆的检测的文章,受到了大家一致的好评. 嗯嗯,应该是一致的好评! 今天我们来研究一个新的方向,如何使用传统方法来进行大米的分割计数和大米长轴方向的标记? 如上图 ...

  3. 传统图像处理之随机脉冲噪声检测(二)

    文章目录 前言 一.什么是平坦区和粗糙区? 二.如何确定阈值? 1.首先需要明白一件事 一副的图片的阈值并不是一尘不变的 2.计算阈值 1.平坦区与粗糙区区分计算 噪声污染程度估算 总结 这里是接着我 ...

  4. 【图像识别】基于传统图像处理实现路面裂缝检测识别系统设计matlab代码

    1 简介 公路在使用过程中会受到各种车辆的反复磨损以及各种其他因素影响,最终路面就会出现严重影响公路正常运行的破损.现行的主要路面破损检测方式是人工检测,这种检测方式不仅耗费大量的人力物力,而且速度极 ...

  5. 【图像识别】基于传统图像处理实现路面裂缝检测识别系统matlab设计

    1 简介 随着公路与铁路事业的飞速发展,各类车辆和里程的增加,铁路的一次次提速,都对路面产生了巨大的压力.不论是公路路面还是铁路路面,路面裂纹都能随处可见,由路面裂纹造成的交通事故时有发生.研究路面裂 ...

  6. 二维码研究综述--传统图像处理方法

    1 北京交通大学电子信息工程学院–陈后金教授 1.1 基本信息 题目:<Data Matrix二维条码图像识别的算法研究与实现> 学生:李雅静 2009年6月 1.2 摘要 问题:实际采集 ...

  7. 传统图像处理之皮肤区域检测

    能够从别人的角度来看待这个世界,是一种极其珍贵的体验. ---- 高铭<天才在左,疯子在右> 目录 1.RGB空间 代码: 效果: 2.Ycrcb空间 代码: 效果: 3.Ycrcb空间+ ...

  8. 传统图像处理之随机脉冲噪声检测

    我这里参考论文:随机值脉冲噪声检测系统的局部一致性指数方案 文章目录 前言 一.什么是噪声检测? 二.LCI值的定义 1.噪声像素与干净像素的特点 2.如何确定LCI的值 总结 前言 本博客主要讲述如 ...

  9. 详解车道线检测算法之传统图像处理

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 / 导读 / 车道线检测算法分为传统图像处理方法和深度学习方法.本文详细介绍用传统图像处理方法来解决车 ...

最新文章

  1. Matlab 图像处理相关函数命令大全
  2. 类的大小,虚函数,继承
  3. 一步步学习SPD2010--第七章节--使用BCS业务连接服务
  4. Scrum 项目4.0--软件工程
  5. redis 缓存过期默认时间_redis缓存过期机制
  6. 【面向对象】类的本质
  7. 腾讯优图升级为计算机视觉研发中心,与《科学》宣布战略合作
  8. 火狐浏览器走局域网中的代理ip
  9. HDU 4762 Cut the Cake
  10. C语言编程入门——程序练习(下)
  11. bin文件如何编辑_如何将PS中图片模糊文字(位图)转换为AI的高清矢量图和CDR文件相关编辑?...
  12. 汉字编码及区位码查询算法
  13. 高频电子线路复习笔记(2)——高频电路基础
  14. android模拟器对比,哪个安卓模拟器好用 电脑玩手游助手模拟器权威对比
  15. 打开 IBM Rational Rose Enterprise Edition 报错的处理
  16. 318公路是中国最长最美国道,沿途风景绝佳,进藏必去的最佳路线
  17. 支付宝PM告诉你,互联网产品经理的工作职责有哪些?
  18. matlab怎样画一个立方体,matlab画立方体
  19. js 数据类型之字符串
  20. Arouter 跳转失败activityResumeTrigger: not whiteListed

热门文章

  1. 游戏:Flappy Bird[飞行的鸟](C++)1.1
  2. 炒菜机器人的弊端_体验官|炒菜机器人真的实用吗
  3. 极客时间《从零开始学大数据》学习总结
  4. Flutter 新闻客户端 - 17 headless strapi centos 发布部署 + jmeter 压测
  5. Windows 7 系统屏幕切换
  6. linux删除目录非空,rmdir命令 – 删除空目录
  7. 在Linux上建立自己的求生之路Steam组服务器
  8. 批量友情链接监控检测查询工具
  9. qemu运行minix
  10. 上周技术关注:流氓软件及反流氓软件的技术分析