4、Halcom区域分割和区域边缘膨胀、腐蚀

目录

1、全局阈值分割

2、动态阈值分割

3、其它阈值分割

4、形态学膨胀

5、形态学腐蚀

6、形态学开运算和闭运算


1、全局阈值分割

阈值,字面意思是界限,又叫临界值。是指能够产生的最低值或最高值。在图像处理中它的意思是颜色转换的临界点,该方法只用于二值化的图像中。

阈值分割,指的是按照给定的阈值范围,从图像中将像素点灰度值介于阈值范围内的那些点分割开来。

(图像处理,又称为二值化)

全局阈值分割,是指针对于整张图像给定数值,将像素点从图像中分割开来。

全局阈值的分割关键点,在于阈值的选取。一般是根据图像的特征或者图像的灰度直方图进行的阈值设置。

程序演示:

打开图像,并灰度化

  1. *打开文件、读取图片
  2. dev_open_file_dialog ('read_image', 'default', 'default', Selection)
  3. read_image (Image, Selection)
  4. *灰度转换
  5. rgb1_to_gray (Image, GrayImage)

把图片上,白色的字提取出来。按住Ctrl键,鼠标在文字上,就可以看出当前的灰度值了。(黑白像素0-255。0是全黑、255全白。)

可以看出白色的字灰度值在245左右,阈值分割里面范围可以设置为230-255。

全局阈值分割

  1. *全局阈值分割算子:两个数值:选择分割的图像灰度范围
  2. threshold (GrayImage, Regions, 230, 255)

或者

  1. *全局阈值分割算子:前两个数值:选择分割的图像灰度范围,
  2. *最后一个是要选择的分割的面积(可以将一些点去掉)
  3. fast_threshold (GrayImage, Region, 230, 255, 20)

使用连通域,将每个字符区域分开

  1. *连通域操作
  2. connection (Region, ConnectedRegions)

 

2、动态阈值分割

动态阈值分割指的是:在图像的分割过程中不用人为的去设定阈值,而是根据图像中存在的特征进行分割。

原理:将原图像与处理后的图像作差,然后去计算图像中的亮色区域或者暗色区域。本质相当于对图像灰度直方图的平滑,进而求出图像中的波谷或者波峰。

特点:动态阈值分割具有抗干扰性强、稳定性强的特点,对光照不明显。

两种实现方式的算子:

dyn_threshold(需要和滤波算子结合用)

local_threshold(一步到位)

程序演示:

打开图像,并灰度化

  1. *读取一幅图片
  2. dev_open_file_dialog ('read_image', 'default', 'default', Selection)
  3. read_image (Image, Selection)
  4. *图像灰度转换
  5. rgb1_to_gray (Image, GrayImage)

灰度化处理

方法1,使用dyn_threshold

  1. *中值滤波
  2. median_image (GrayImage, ImageMedian, 'circle', 60, 'mirrored')
  3. *动态阈值分割
  4. dyn_threshold (GrayImage, ImageMedian, RegionDynThresh, 100, 'light')

中值滤波

阈值分割

只显示提取出来的字符区域

方法2,local_threshold

  1. *动态阈值分割------方法2
  2. local_threshold (GrayImage, Region, 'adapted_std_deviation', 'light', [], [])

3、其它阈值分割

除了全局阈值分割、动态阈值分割,Halcon中还提供了很多其他阈值分割,比如自动阈值分割、二值化阈值分割、分水岭阈值分割,不过用的都比较少。就不去讲解了。用的时候网再上查询一下。

4、形态学膨胀

数学形态学,是用集合论方法描述目标集合结构的学科,在集合的基础上,通过物体和结构元素的相互作用运算来得到物体本质的形态。

形态学膨胀,为什么叫形态学膨胀呢?是因为图像处理中膨胀是借鉴了形态学的方法。

膨胀特点和作用:图像分割后,对于填补图像物体的空洞和边缘凹凸具有很好的填充效果。

膨胀类型:根据膨胀结构元的形状,分为圆形膨胀和矩形膨胀。

圆形膨胀:dilation_circle

矩形膨胀:dilation_rectangle1

问1:图像为什么要膨胀操作?

答:图像中的某一个区域经过分割操作,在某些边缘断开形成多个区域,需要膨胀连起来成为一个区域,或者边缘凹凸需要填充。

程序演示:

打开图像,并灰度化

  1. *读取一幅图片
  2. dev_open_file_dialog ('read_image', 'default', 'default', Selection)
  3. read_image (Image, Selection)
  4. *图像灰度转换
  5. rgb1_to_gray (Image, GrayImage)

区域分割,全局阈值分割

  1. *全局阈值分割
  2. threshold (GrayImage, Regions, 128, 255)

为什么要进行形态学膨胀:我们看上图,比如“请”字,偏旁上的点是没有连接起来的,还有“进”,“遇”、“照”、“偿”,都没有连接起来,这样区域分割后,一个字就会分割成多个区域,我们要将它变成一个区域,后面才好对他进行特征识别。

方法1:圆形膨胀

  1. *圆形膨胀(效果好,用的多),填充,参数3:膨胀的圆半径
  2. dilation_circle (Regions, RegionDilation, 3)

矩形膨胀,横向、竖向都可以选择膨胀。本图像,竖向膨胀多一点

  1. *矩形膨胀,填充。矩形可以在横向、纵向都可以膨胀
  2. dilation_rectangle1 (Regions, RegionDilation1, 2, 10)

膨胀后的图像还不能用来做特征分析。

 

5、形态学腐蚀

腐蚀特点:对于去除图像分割后物体的凸出区域以及区域边界的凸区域具有很好的效果。

腐蚀分类:根据腐蚀结构元的,在halcon中分为圆形腐蚀和矩形腐蚀。

问2:图像为什么要腐蚀操作?

答:图像中的某一个区域经过分割操作,本来实际中是多个区域,提取出来的是一个区域,通过腐蚀将边缘连接起来的断开。或者提取出来的区域,边缘凹凸不圆滑,对其腐蚀操作。

erosion_circle:圆形腐蚀

erosion_rectangle1:矩形腐蚀

gray_erosion_rect:灰度图像的腐蚀,扩大暗色背景,腐蚀亮色区域

gray_dilation_rect:灰度图像的膨胀,扩大亮色背景,腐蚀暗色区域

程序演示:

打开图像,并灰度化

  1. *读取一幅图片
  2. dev_open_file_dialog ('read_image', 'default', 'default', Selection)
  3. read_image (Image, Selection)
  4. *图像灰度转换
  5. rgb1_to_gray (Image, GrayImage)
  1. *全局阈值分割
  2. threshold (GrayImage, Regions, 128, 255)

 

方法1,圆形腐蚀

  1. *圆形腐蚀
  2. erosion_circle (Regions, RegionErosion, 2.5)

方法2,矩形腐蚀。可以在横向、竖向选择性的腐蚀。本例在竖向多腐蚀一些。

  1. *矩形腐蚀
  2. erosion_rectangle1 (Regions, RegionErosion1, 1, 10)

灰度图像的腐蚀

  1. *灰度图像的腐蚀
  2. gray_erosion_rect (GrayImage, ImageMin, 6, 6)
  3. *或者
  4. *gray_erosion_shape (GrayImage, ImageMin1, 3, 3, 'octagon')

原灰度图

腐蚀后的灰度图

灰度图像的膨胀

  1. *灰度图像的膨胀,填充
  2. gray_dilation_rect (GrayImage, ImageMax, 11, 11)
  3. *或者
  4. *gray_dilation_shape (ImageMax, ImageMax1, 11, 11, 'octagon')

膨胀和腐蚀的用处,求图像边缘。

方法:先对原图像进行膨胀,再对原图像进行腐蚀。膨胀后的图像区域跟腐蚀后图像的图像作差,算出来的就是图像边缘。

  1. *腐蚀
  2. erosion_circle (Regions, RegionErosion2, 1.5)
  3. *膨胀
  4. dilation_circle (Regions, RegionDilation, 1.5)
  5. *区域作差
  6. difference (RegionDilation, RegionErosion2, RegionDifference)

腐蚀的图像

膨胀的图像

作差,算出来的边缘

 

6、形态学开运算和闭运算

开运算:对区域先进行腐蚀操作,然后再对腐蚀的结果进行膨胀操作。

开运算特点:具有与腐蚀相似的结果,但是能够防止区域腐蚀过度,能够很好的保持区域的形状。

算子:

opening_circle:

opening_rectangle1:

闭运算:对区域先进行膨胀操作,再对膨胀的结果进行腐蚀操作,

闭运算特点:具有膨胀相似的结果,但是能够防止区域膨胀过度,能够很好的保持区域的形状。

算子:
closing_circle

closing_rectangle1

灰度图像的开闭运算:

gray_opening_rect:灰度图像的开运算

gray_closing_rect:灰度图像的闭运算

程序演示:

打开图像,并灰度化

  1. *关闭窗口
  2. dev_close_window ()
  3. *打开窗口
  4. dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
  5. *读取一幅图片
  6. dev_open_file_dialog ('read_image', 'default', 'default', Selection)
  7. read_image (Image, Selection)
  8. *图像灰度转换
  9. rgb1_to_gray (Image, GrayImage)

全局阈值分割

  1. *全局阈值分割
  2. threshold (GrayImage, Regions, 128, 255)

开运算-圆(类似腐蚀)

  1. *开运算
  2. opening_circle (Regions, RegionOpening, 3.5)

开运算-矩形(类似腐蚀)。横向、竖向腐蚀的量可调。本例,横向上腐蚀多一些

opening_rectangle1 (Regions, RegionOpening1, 8, 1)

闭运算-圆(类似膨胀)

closing_circle (Regions, RegionClosing, 2.5)

闭运算-矩形(类似膨胀)横向、竖向腐蚀的量可调。本例,竖向上膨胀多一些

closing_rectangle1 (Regions, RegionClosing1, 1, 5)

灰度图像的开运算(类似灰度图像腐蚀)

gray_opening_rect (GrayImage, ImageOpening, 11, 11)

灰度图像的闭运算(类似灰度图像膨胀)

gray_closing_rect (GrayImage, ImageClosing, 11, 11)

*==========应用举例说明:提取汉字“进”==========*

对灰度图分割出来的字符区域进行连通域操作。

观察发现“进”被分割成了3个区域。别的汉字也不是一个字对应一个区域,此时是没法提取出来的。

connection (Regions, ConnectedRegions)

进行闭运算,再连通域操作

  1. closing_circle (Regions, RegionClosing2, 2.5)
  2. connection (RegionClosing2, ConnectedRegions1)

经过闭运算后,所有的字都连起来成一个区域了。

然后,在“进”字上,画矩形,再鼠标画的矩形生成出来,将“进”字所在的区域提取出来了

  1. *画“进”的矩形区域:鼠标左键在图上画矩形,画好了矩形点鼠标右键即完成操作
  2. draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
  3. *生成矩形区域
  4. gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)

“进”字的矩形区域和闭运算的图像,通过求交集运算(相当于与的关系),提出闭运算后的“进”字

  1. *求交集
  2. intersection (Rectangle, RegionClosing2, RegionIntersection)

将上图求交集出来的区域,再和分割灰度图分割出来的字符区域图像进行求交集

最终提取出原图中的“进”字

  1. *再求一次交集
  2. intersection (RegionIntersection, Regions, RegionIntersection1)

 

(0)

相关推荐

  • 图像处理知多少?准大厂算法工程师30+场秋招后总结的面经问题详解

    作者丨灯会 来源丨极市平台 编辑丨极市平台 极市导读 本篇主要包含了图像滤波.边缘检测相关常考内容等相关面试经验. >>加入极市CV技术交流群,走在计算机视觉的最前沿 系列文章: 深度学习 ...

  • (2条消息) 计算机视觉

    源码:https://github.com/PacktPublishing/OpenCV3-Computer-Vision-Application-Programming-Cookbook-Third ...

  • 基于图像处理技术的转辙机智能检测研究

    点击下面标题,了解通知详情 第九届电工技术前沿问题学术论坛征文通知 近年来,随着城市规模不断扩大和城市轨道交通的迅速发展,轨道交通已成为人们日常出行的主要交通工具之一,随之而来的是工程技术人员对轨道交 ...

  • 【学术论文】基于最小二乘法与霍夫变换的虹膜定位算法

    摘要 为解决定位虹膜内外边缘时因轮廓信息不足会出现的定位不准确或者失败问题,提出一种采用霍夫变换与最小二乘法相结合的定位算法.首先使用形态学开操作减少图像中孤立的小点,并利用自适应阈值算法二值化图像: ...

  • ps苹果皮橘子心视频:画笔调整蒙版贴图区域边缘给苹果换芯

    ps苹果皮橘子心视频|ps给苹果换芯视频|画笔调整蒙版区域视频|蒙版调整贴图边缘视频 本视频教程由部落窝教育分享.

  • ps图层蒙版编辑视频:调整边缘画笔编辑蒙版半透明显示区域

    ps图层蒙版编辑视频|编辑蒙版显示区域视频|蒙版调整边缘画笔视频|ps蒙版半透明区域视频 本视频教程由部落窝教育分享.

  • (6条消息) 关于膨胀和腐蚀

    本文链接:https://blog.csdn.net/qq_42517195/article/details/80797976 版权 很惭愧考完了数字图像处理都没理解清楚, 重点:相对高亮部分而言的啊 ...

  • [Python图像处理] 八.图像腐蚀与图像膨胀

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  • OpenCV探索之路(四):膨胀、腐蚀、开闭运算

    腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域被蚕食 ...

  • halcon-区域分割+区域膨胀

    *案例 * Saving an OCV tool to file * * 读取图像 read_image (Image, 'a01') *全局二值化分割 threshold (Image, Regio ...

  • 膨胀与腐蚀

    形态学处理 首先,我们来介绍一下形态学图像处理: 数学形态学的语言是集合论,它为大量的图像处理问题提供了一种一致的有力方法. 数学形态学中的集合表示图像中的不同对象.例如,在二值图像中,所有黑色像素的 ...

  • 膨胀、腐蚀、开、闭运算,你这么解释,小学生都看得懂了

    膨胀.腐蚀.开.闭运算,你这么解释,小学生都看得懂了! 看过我前面一些章节内容的小伙伴肯定已经不止一次遇到过这几个词了.对图像的形态学处理也避不开这几个.但是想要准确理解他们的意思似乎不是那么简单.首 ...

  • Halcon之膨胀,腐蚀,开闭运算

    膨胀:对边界点进行扩充,填充空洞,使边界向外部扩张的过程. 腐蚀:消除物体边界点,使边界向内部收缩的过程,把小于结构元素的物体去除掉. 开运算:先腐蚀后膨胀的过程称为开运算,作用:去除孤立的小点,毛刺 ...