zoukankan      html  css  js  c++  java
  • 图像处理笔记(十五)

    上一个笔记里面有一个错误:
    regiongrowing算子没有使用一个Row*Column的平滑滤波器处理图像,这个尺寸是一个用来判断两个点是否属于同一区域的模板。
    文档上建议在使用这个算子之前做一下平滑滤波。

    补充一个使用hsv图像识别图像中的红色药丸的例子:

    read_image(Image, 'blister_mixed_11')
    decompose3(Image, Image1, Image2, Image3)
    trans_from_rgb(Image1, Image2, Image3, ImageResult1, ImageResult2, ImageResult3, 'hsv')
    threshold(ImageResult1, Region1, 0, 50)
    connection(Region1, ConnectedRegions)
    select_shape(ConnectedRegions, SelectedRegions, 'area', 'and', 100, 999999)
    union1(SelectedRegions, RegionUnion)
    reduce_domain(Image, RegionUnion, ImageReduced)
    
    decompose3(ImageReduced, Image11, Image21, Image31)
    threshold(Image21, Region, 0, 60)
    connection(Region, ConnectedRegions1)
    select_shape(ConnectedRegions1, SelectedRegions1, 'area', 'and', 1000, 99999)
    

    1. 近似计算图像的内外边界:
      内边界使用原图像减去适度腐蚀后的图像;
      外边界使用适度膨胀后的图像减去原图像。

    2. 闵可夫斯基加减法
      当结构元对称时,与膨胀或腐蚀的效果是一致的;
      当结构元不对称时,与膨胀或腐蚀的效果不一致,区别在于膨胀或腐蚀需要先对结构元做原点对称。
      相关算子:minkowski_sub1,minkowski_add1

    3. 再看击中击不中
      这个点在之前看的时候被我跳过去了。
      在halcon中有算子hit_or_miss可以来看某个区域是否击中击不中,例子:

    read_image(Characters, 'characters')
    * 创建一个椭圆形结构元,长短轴半径分别是25和20
    * 这个结构元被用来做击中
    gen_ellipse(Ellipse1, 45, 40, rad(90), 25, 20)
    * 获取结构元半径
    boundary(Ellipse1, RegionBorder1, 'outer')
    * 再创建一个椭圆形结构元,这个结构元被用来做击不中
    gen_ellipse(Ellipse2, 45, 40, rad(90), 40, 35)
    boundary(Ellipse2, RegionBorder2, 'outer')
    rgb1_to_gray(Characters, GrayImage)
    threshold(GrayImage, Region3, 180, 255)
    * 当满足第一个结构元击中并且第二个结构元击不中的情况下,结构元圆心组成了区域RegionHitMiss
    hit_or_miss(Region3, RegionBorder1, RegionBorder2, RegionHitMiss, 45, 40)
    

    击中要求结构元完全被区域包含;击不中要求结构元与区域没有交集。

    1. 开闭运算
      halcon中有直接给出开闭运算的算子,可以不必自己做一次腐蚀再做一次膨胀。
      算子名称opening和closing相关。

    2. 复习一下顶帽变换和底帽变换
      顶帽变换:较暗的背景中求较亮的像素
      halcon:top_hat,gray_tophat
      底帽变换:较亮的背景中求较暗的像素
      halcon:bottom_hat, gray_bothat

    3. select_shape_std
      选择指定特征的区域,可以指定特征为'max_area',直接选择出面积最大的区域

    4. gen_recetangle2(Rectangle, Row, Column, Phi, Lenght1, Length2)
      画一个矩形,矩形的中心再(Row, Column),矩形的宽是Length1的__两倍__ (水平方向长度),矩形的高是Length2的 两倍 (竖直方向长度),
      矩形绕着中心旋转Phi的弧度。
      角度转弧度:rad(90),表示 (pi / 2)

    小结:
    今天系统的运用了一下Region相关的算子,笔记只记录一些需要注意的事项,算子远远不止这么多。明天计划把xld,图像运算,边缘分析相关的算子过一遍。

  • 相关阅读:
    权限管理UI
    NET Core 2.0 介绍和使用
    Spring MVC Integration,Spring Security
    微服务系统中的认证策略
    使用git建立远程仓库,让别人git clone下来
    回顾2016,展望2017
    spring security之httpSecurity 专题
    Android VelocityTracker简介
    Android-onInterceptTouchEvent()和onTouchEvent()总结
    两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEvent(图文)!
  • 原文地址:https://www.cnblogs.com/yutou2016/p/11156888.html
Copyright © 2011-2022 走看看