Halcon里有个texture_laws 算子,最近实现了下,记录下相关细节。

Halcon的文档里对该算子是这样描述的:

texture_laws — Filter an image using a Laws texture filter.

  Signature

    texture_laws(Image : ImageTexture : FilterTypes, Shift, FilterSize : )

  Description

    texture_laws applies a texture transformation (according to Laws) to an image. This is done by convolving the input image with a special filter mask. The filters are:

    9 different 3×3 matrices obtainable from the following three vectors:

      l = [ 1 2 1 ],
      e = [ -1 0 1 ],
      s = [ -1 2 -1 ]
    25 different 5×5 matrices obtainable from the following five vectors:
      l = [ 1 4 6 4 1 ],
      e = [ -1 -2 0 2 1 ],
      s = [ -1 0 2 0 -1 ],
      w = [ -1 2 0 -2 1 ]
      r = [ 1 -4 6 -4 1 ],
    49 different 7×7 matrices obtainable from the following seven vectors:
      l = [ 1 6 15 20 15 6 1 ],
      e = [ -1 -4 -5 0 5 4 1 ],
      s = [ -1 -2 1 4 1 -2 -1 ],
      w = [ -1 0 3 0 -3 0 1 ],
      r = [ 1 -2 -1 4 -1 -2 1 ],
      u = [ 1 -4 5 0 -5 4 -1 ]
      o = [ -1 6 -15 20 -15 6 -1 ]
  The names of the filters are mnemonics for “level,” “edge,” “spot,” “wave,” “ripple,” “undulation,” and “oscillation.”
  For most of the filters the resulting gray values must be modified by a Shift. This makes the different textures in the output image more comparable to each other, provided suitable filters are used.The name of the filter is composed of the letters of the two   vectors used, where the first letter denotes convolution in the column direction while the second letter denotes convolution in the row direction.

  FilterTypes (input_control) string → (string)
    Desired filter.
    Default value: 'el'
    Suggested values: 'll', 'le', 'ls', 'lw', 'lr', 'lu', 'lo', 'el', 'ee', 'es', 'ew', 'er', 'eu', 'eo', 'sl', 'se', 'ss', 'sw', 'sr', 'su', 'so', 'wl', 'we', 'ws', 'ww', 'wr', 'wu', 'wo', 'rl', 're', 'rs', 'rw', 'rr', 'ru', 'ro', 'ul', 'ue', 'us', 'uw', 'ur', 'uu', 'uo', 'ol', 'oe', 'os', 'ow', 'or', 'ou', 'oo'
  Shift (input_control) integer → (integer)
    Shift to reduce the gray value dynamics.
    Default value: 2
    List of values: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  FilterSize (input_control) integer → (integer)
    Size of the filter kernel.
    Default value: 5
    List of values: 3, 5, 7

  这个算子通常用来进行纹理分析,其实现过程其实很简单。第一,滤波器的大小只有3、5、7三种,第二、滤波器的类型根据滤波器大小决定由多少种。

  以滤波器尺寸为3,滤波器类型为‘el‘,Shift = 2为例来说明计算过程。

  对应的e = [ -1 0 1 ], l = [ 1 2 1 ]。

其实就是对原图进行e‘*l的一个卷积。

  -1   -2   -1
         0    0    0
         1    2   1

  卷积矩阵如上所示,那么假如卷积的结果为s,则最终的结果为s >> shift, shift起到了调整图像最后亮度的作用。

  如果滤波器的尺寸为5或者7,那么对应的卷积矩阵就是5*5或者7*7的,这各时候直接卷积速度比比较慢,其实,在本算法中,是没有必要这样的,很明显,这是个行列可分离的卷积。

  也就是说,可以先进行方向的卷积,得到中间结果,然后在对中间结果进行列方向的卷积。这样滤波器尺寸为5和7的分别指需要做5+5和7+7次计算,效率打了很多。

具体实现上,从速度角度考虑,这个中间结果可以用signed short类型来保存,在观察这些卷积的系数,都在signed char范围内,因此,在从原图到中间结果的过程中,可以用一个非常高效的SSE函数来实现,即_mm_maddubs_epi16.

   这个函数的功能如下:

他可以一次性实现16次乘法和加法,地方分别是字节数和有符号的字节数,非常有效。

在中间结果到最终值时,又可以利用_mm_madd_epi16这个针对16位数的SSE函数,他同样能一次性实现多个乘法和加法。

  就是这样一个简单的优化,我测试了一下速度,测试对象为3000*2000的RGB数据, 分别使用3、5、7的滤波器尺寸,时间比例如下:

  Halcon不同尺寸的耗时基本相同,我这里明显尺寸越小,耗时越短,并且速度比halcon要稍微快那么一点点。

  测试算法在我的SSE Demo的ImageInfo 菜单下Laws Texture下。

本文Demo下载地址:  http://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar,里面的所有算法都是基于SSE实现的。

【短道速滑四】Halcon的texture_laws算子自我研究相关推荐

  1. “《面对面---做好每一天》--中国短道速滑教练李琰”读后感

    看了"<面对面---做好每一天>--中国短道速滑教练李琰"自己有两方面的感想. 李琰真的很棒. 一.如果我是李琰会扔下女儿一个人来中国执教吗? 自认为自己比较" ...

  2. spark中repartition, coalesce, partitionBy, repartitionAndSortWithinPartitions 四种重分区算子

    美图欣赏: 一.背景 spark中一共有四种重分区算子: 1.repartition 2.coalesce 3.partitionBy 4.repartitionAndSortWithinPartit ...

  3. halcon 差异模型 异物_基于HALCON的形状匹配算法的研究和心得总结

    很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多的练习和实验,并对基于HDevelop的形状匹配算法的参数优化进行了研究,写了一篇& ...

  4. 四工业控制系统的攻击场景研究

    按受影响对象属性分类情况分析 图 3.11 是对漏洞按受影响对象的软.硬件形态进行统计分类的结果.得到软件中的漏洞 占多数的分析结果并不意外,因为从逻辑复杂度来说,相关软件通常都比硬件更复杂,因而 更 ...

  5. TCP四次挥手不同情况的研究(正常状态,三次挥手,以及CLOSING和RST)

    文章目录 TCP四次挥手不同情况的研究 1.新手加油站 1.1 TCP四次握手流程图 1.2 TCP头部 1.3 四次握手流程详解 2.针对挥手不同情况的实验和研究 2.1 正常情况 2.2 三次挥手 ...

  6. Halcon一些功能算子

    Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训 ...

  7. 史上超全halcon常见3D算子汇总(一)

    读取3D模型 read_object_model_3d 此算子用于读取3D对象. read_object_model_3d( : : FileName, Scale, GenParamName, Ge ...

  8. halcon学习(算子汇总)

    from:https://www.cnblogs.com/hanzhaoxin/archive/2013/01/09/2852213.html dev_clear_obj(Objects : : : ...

  9. Halcon 3D 常见算子描述

    一.简介 halcon 中有很多常见的算子,我们经常在用,但是作为一名算法工程师我们不仅要会用,知道原理也是很重要的,所以对于很多事情我们不仅要所以然更有知其所以然. 二.算子解释 1.smooth_ ...

  10. halcon编程入门四——halcon缺陷检测

    Region参数 缺陷类型 1.边缘凹凸检测 2.内部凸凹点.瑕疵.污点.内部烫伤.孔洞 3.划痕(用低角度环形光进行打光,将划痕打亮,背景打暗:也可用同轴光,让表面反光不明显) 缺陷图像处理 1.b ...

最新文章

  1. Nginx虚拟机主机根据不同的域名使用不同的root路径
  2. 如何判断链表是否有环_如何快速判断气门油封是否漏油?
  3. Nginx —— 用HTTP proxy module配置一个反向代理服务器
  4. archsummit2017见闻和思考
  5. ExtJS之 标准布局类(针对于panel)
  6. Java中的使用了未经检查或不安全的操作
  7. 前端学习(3058):vue+element今日头条管理-回顾
  8. Ubuntu 开发者展示在 Ubuntu 20.04 上流畅运行 Microsoft Office 应用
  9. 临时笔记, 有意思的东西
  10. 从四个角度揭密Windows Server 2008技术
  11. 【限时免费】大千万象,“爬”你所需!老司机教你利用爬虫建造一座图书馆...
  12. 泰迪杯数据挖掘挑战赛—数据预处理(一)
  13. jQuery实现鼠标滑过图片放大效果
  14. 积分墙广告平台接入指路
  15. 简单Python爬虫实例:抓取豆瓣热映电影信息
  16. Oblog 2.52导出日志最新漏洞
  17. oracle表示大于等于,这些基础请记住,java转义的问题:小于等于、 大于等于Mybatis 、oracle...
  18. 2018.11.3 PION模拟赛
  19. excel公式不自动计算_公式 | Excel根据起止日期,自动计算每月的计息天数
  20. The accumulated size of entities is 50,000,001 that exceeded the 50,000,000 limit set by FEATUR

热门文章

  1. ckeditor使用
  2. 百度收录批量查询-免费百度整站批量收录查询工具
  3. 周志明:终于薅住了这位 “社恐”作者的小辫子
  4. 计算机python考试真题及答案新课标_CCF计算机职业资格认证考题答案详解(Python)...
  5. 家居物联网(IoT)接入控制与认证的再思考
  6. android 手机分辨率占比,Android屏幕密度(Density)和分辨率概念详解
  7. nginx启用reuseport
  8. 交换机 Port-Channel(端口汇聚)的 配置
  9. 中国余数定理解题步骤
  10. mac 配置host