第三课: 图像的 BLOB 分析处理流程(clip_region_rel,edges_sub_pix,segment_contours_xld等)---Circles.hdev

本文主要是介绍第三课: 图像的 BLOB 分析处理流程(clip_region_rel,edges_sub_pix,segment_contours_xld等)---Circles.hdev,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 所用到的算子:

1、boundary(Region : RegionBorder : BoundaryType : )  *提取区域的边界,实质是像素

      boundary (Region, RegionBorder, 'inner')

2、clip_region_rel(Region : RegionClipped : Top, Bottom, Left, Right : )*通过区域的最小外接矩形,从矩形的                                 Top,Bottom,Left,Right四个方向裁剪区域,得到所需要的区域

                  

       如果需要提取某区域中的一部分区域可以考虑使用该算子,如下图一到图二 :

                                                     

                                                                                                              图一

                                                              

                                                                                                            图二 

 3、    edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )*提取亚像素精密边缘轮廓

           参数: Low和High

           使用灰度直方图计算两个阀值,凡是像素灰度值大于高阀值的一定是轮廓; 凡是小于低阀值的一定不是轮廓;

            如果检测像素灰度值大于低阀值但又小于高阀值,那就要看这个像素的邻接像素中有没有超过高阀值的边缘像素:如果有的话那么它就是轮廓边缘了,否则他就不是轮廓边缘;

            alpha:

            指定值越小,平滑越强大,会减少边缘细节。

            Filter :

            Filter  = 'canny'刚好相反,alpha值越大,轮廓细节就越少(可能有一部分轮廓消失)

            如下:                          

            edges_sub_pix (ImageReduced, Edges, 'canny', 2, 20, 60)

                                                                                 

4、segment_contours_xld(Contours : ContoursSplit : Mode, SmoothCont, MaxLineDist1, MaxLineDist2 : )

       将亚像素轮廓分割为值线段、圆、或圆弧

       Contours :需要进行分割的轮廓。

       ContoursSplit: 分割后的轮廓tuple。

       Mode:分割轮廓方式

       'lines'(使用直线段分割), 'lines_circles'(使用直线段和圆(弧)分割), 'lines_ellipses'(使用直线段和椭圆弧分割)。

       SmoothCont :轮廓平滑的参数,可以抑制在折线逼近过程中过短的线段,能更加逼近圆和椭圆。
        MaxLineDist1: 值越小,分割得到的线段、圆弧、或椭圆弧就越多

        MaxLineDist2 :值越小,分割得到的线段、圆弧、或椭圆弧就越多

        Remark:

        分割得到的轮廓是直线段、圆(圆弧)或者椭圆弧可以通过分割后轮廓的全局属性'cont_approx’参数的值来判断(参考               get_contour_global_attrib_xld)。

        如果'cont_approx'=-1,这一部分轮廓最适合被拟合为直线段。

        如果'cont_approx'=0,这一部分轮廓最适合被拟合为椭圆弧。

        如果'cont_approx'=1,这一部分轮廓最适合被拟合为圆弧。

5 、get_contour_global_attrib_xld(Contour : : Name : Attrib)

       返回亚像素轮廓的全局属性

       *通过segment_contours_xld算子得到轮廓被分割的部分然后通过get_contour_global_attrib_xld 算子的cont_approx               属性值判断被分割的轮廓部分是直线还是圆弧或椭圆弧

       get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)
    * Fit a circle to the line segment that are arcs of a circle
    *判断分割的轮廓是否适合生成圆
     if (Attrib > 0)
        *提取圆弧生成圆的参数
       
fit_circle_contour_xld (ObjectSelected, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
        *圆弧生成圆
       
gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), 'positive', 1.0)
        dev_display (ContCircle)
    endif

6、 fit_circle_contour_xld,gen_circle_contour_xld

* The edges in the image are segmented into lines and circles.
* For the edges that are part of a circle, the circle parameters
* are estimated and the resulting circle is displayed.
read_image (Image, 'double_circle')
* 
* Init window
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
* 
*Segment a region containing the edges
*分割包含边的区域
fast_threshold (Image, Region, 0, 120, 7)
*提取区域的内边缘
boundary (Region, RegionBorder, 'inner')
*通过区域的最小外接矩形,从矩形的TOP,Bottom,Left,Right四个方向裁剪区域
clip_region_rel (RegionBorder, RegionClipped, 5, 5, 5,5)
*膨胀轮廓区域
dilation_circle (RegionClipped, RegionDilation, 2.5)
reduce_domain (Image, RegionDilation, ImageReduced)
* 
* In the subdomain of the image containing the edges,
* extract subpixel precise edges.
*提取亚像素精密边缘轮廓
edges_sub_pix (ImageReduced, Edges, 'canny', 2, 20, 60)
*将XLD轮廓分割为线段和圆弧
segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 3)
count_obj (ContoursSplit, Number)
dev_display (Image)
dev_set_draw ('margin')
dev_set_color ('white')
dev_update_window ('off')
for I := 1 to Number by 1select_obj (ContoursSplit, ObjectSelected, I)*返回亚像素轮廓的全局属性*如果Attrib =-1,这一部分轮廓最适合被拟合为直线段。*如果Attrib =0,这一部分轮廓最适合被拟合为椭圆弧。*如果Attrib =1,这一部分轮廓最适合被拟合为圆弧。get_contour_global_attrib_xld (ObjectSelected, 'cont_approx', Attrib)* Fit a circle to the line segment that are arcs of a circle*判断分割的轮廓是否适合生成圆if (Attrib > 0)*提取圆弧生成圆的参数fit_circle_contour_xld (ObjectSelected, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)*圆弧生成圆gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), 'positive', 1.0)dev_display (ContCircle)endif
endfor
dev_set_colored (12)
dev_set_line_width (3)
dev_display (ContoursSplit)

这篇关于第三课: 图像的 BLOB 分析处理流程(clip_region_rel,edges_sub_pix,segment_contours_xld等)---Circles.hdev的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/164454

相关文章

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka