本人菜鸟一只,实习中要求做mura检测,本小鸟也不会,师傅甩来一片IEEE论文,让本人看懂后实现下。这篇IEEE的Mura检测是我们中国人写的(台湾,小日本是这方面的大佬),还好都是中式英语!论文中的,我也不是很懂,只知道他用了种方法叫EMD,然后就干了。真正等到做时,发现也并非那么容易,其中理解歧义,执行步骤错误,以及EMD中的局部极值,边缘效应,插值,SD停止准则关键性问题论文也是一笔带过,这让我绞尽脑汁。最让我无奈的是,本鸟用Matlab做的测试,一张图片小的5Mz左右,大的27M左右,电脑8G/酷睿i5-7跑起来让我陷入慢慢等待之中。。。。。其中,我在搜索资料过程中发现了北京邮电大学博士-梁的WEMD方法,然后将传统EMD与WEMD一起做了个测试。最后,在本鸟自己的yy之下,于星期五交上了这份EMD法的mura检测报告。

一 EMD法原理

EMD法网上资料很多,可以自己去搜搜,学习。我也不在这里讲述,因为我也不是很懂(或许数学太差),不敢在此撒野。在本鸟看来,EMD就像一个滤波器,不断设置滤波频率,一层层滤波,最后剩下的就是残量(个人见解,如有错误,欢迎指教,哈哈哈)。下面,我将介绍一下博士-梁的WEMD法。

二 WEMD原理

傅里叶是基于全局整体的,Gabor是在傅里叶之上,加入滑动窗口,它是区域的,所以Gabor也可是加窗的傅里叶变换。先说说,海森堡测不准定理,时宽×带宽=时间分辨率×频率分辨率。可以在时域内设置小的空间分辨率,从而在频域内获得大的频率分辨率。所以可以在时域中设置小窗口,在频域内获得高的频率分辨率,在时域中设置大窗口,在频域内获得小的频率分辨率,根据EMD算法理论,每次用上下极大极小信号减去均值包络线,也相当于一个频率的筛选过程,前面分解出的是高频,后面的是低频,所以在信号处理上,也可以用来高通,低通,带通滤波。

下面直接截图看下WEMD分解步骤:

我没有用他所说的计算最大窗口N的计算方式,代替的是N=2的I次方+1。(i是第i个IMF)

三 EMD与WEMD对比

EMD容易受到边缘影响,会逐渐向中间蔓延,从而污染整个数据序列;WEMD表现不错,毕竟求均值,也没干啥,也不用插值拟合。另外,对于非边缘数据,数据内部频率变化大的结合处也会出现摆动,造成污染,见下图博士梁的分解对比图。

四 难点处理

首先,局部极值怎么求?这是二维图像,用一维的方式割裂了相邻像素间的相关性,所以用的是最简单的8领域法,也有基于形态学求极值的(我不会,哈哈,老外写的文章,好像有20多页),Matlab官网上也有求极值的函数,下载直接使用即可,它是一个老外写的,无私奉献的,叫做extremum 和extremum2。八邻域求极值如图(是镜像延拓之后的):

五 边缘与插值

对于端点问题,它产生的原因是在实际应用EMD方法时,不能确保信号的2个端点正好是极值点。如果在信号处理中,本文把端点当成极值点来处理,那么在固有模态函数分离过程中信号的两端会出现发散现象,也就是很大幅值或很小幅值的现象,称为端点飞翼。并且这种发散的结果会随着“筛分”过程的不断进行逐渐向内“污染”整个信号而使所得到的结果严重失真。边界状态进行考虑,因为极小的的误差会扩散到有限的测量数据长度内。作为这方面的考量,通过镜像沿拓加入极值点到边界附近能够得到较好的结果。
采用Matlab自带的函数griddata(),它是基于三角形的cubic插值。以256×256的CameraMan为例

六 SD停止准则

分解过程中,IMF必须满足过零点条件和均值条件,目的:(1)平滑不一致的幅度(2)消除骑行波。我们根据一维EMD分解SD准则,通过限制两个连续处理结果之间的标准差的大小来实现,二维EMD的SD准则如下:

SD的范围一般是在0.1~0.3之间。然而本文并没有参考该方法,替代的等效SD条件是:
SD=当前均值区域(M)的最大绝对值 / 输入中心区域(R)的最大绝对值;
SD的范围可以视为0.1~0.3之间。
按照EMD分解停止条件,也就是前后两次的均值包络线的大小趋于常数时,表示变化不大,可以停止该次分解。
利用本文SD准则(借鉴了下大牛的)如下:
-
- 从上面数据可知,随着SD的取值改变,最后的迭代次数以及出图效果(c与d差不多),并不是说越小越好,或者越大越好,SD=0.1比SD=0.05的毛刺要好,SD=0.2和SD=0.3的结果是差不多的,所以SD是在一定范围内的,按照给出的参考是0.1~0.3.

七 EMD分解完毕的准则

进行EMD分解,到底该分解出多少个本征模态(IMF)。该方法给出的停止条件是是极大值极小值的总数小于K(K较小,可认为设定),实际分解过程中,我们是按照经验与需要,将分解的IMF个数定为一个常数,当达到分解数量时。则EMD分解完成。本文设定图像IMF个数为4~6个。

八 EMD分解结果
我将从小亮点,云(带)状进行说明。


-从第三幅之中看出,检测出了亮点,比较明显,但是边缘粗糙,可能会影响检测,最后一张是残差图,亮度提升,亮点明显。边缘会随着分解层数的增加变得更加糟糕,位于边缘的点可能会被边缘污染。


检测不是很好,还是能看出来。

九 WEMD分解结果

可以看出右边的第一张是纹理,第二张称作亮度不均匀(不知道论文里面它是咋看到的),第三张以及以后就是缺陷图,检测效果还行,最后一张是IMF03。对比传统方法,检测显示聚集成一点,可以检测出来。WEMD法的边缘效果不错,但随着分解层数的增加会变得粗糙模糊。


显示横线的是IMF03,IMF04,最后的是残差图H,有时候H可以作为模板,下面额外用WEMD测试下条纹。


第二张图是IMF02,几乎去掉了条纹,后面的三四张是残差H03,H04,效果比较明显。

十 总结

综上,从计算消耗上讲,WEMD计算速度快,主要是求极值与均值运算,也不容易受到边缘的影响,实现起来也比较方便;而EMD会有边缘效应,需要进行迭代插值,计算消耗大,速度比较慢。
从检测效果上看,WEMD对于点,线,都可以进行检测。点,线检测不错,对于灰度与背景接近的块状检测有些模糊,对比度不高;且对于条纹的检测还是不错的,利用的其残差图,图像进一步亮暗分明。EMD比较适合点检测。它有较强的边缘效应,所以不适宜于边缘点的检测,但是它对小的点反应十分敏感,个人认为这是比较好的,可能是由于数据中在灰度频率变化特别快的地方会出现较大的波动,所以反应激烈(见上图)。

所以,对于WEMD方法,性价比还可以。当然,没有什么一蹴而就的,也需要不断的研究验证,也没有什么方法是万能的,只能因地制宜。

二维图像中EMD 法与 Mura 检测的总结相关推荐

  1. 拉普拉斯算子属于卷积方法吗_二维图像中的Laplace算子和图论中的Laplacian矩阵...

    最近在阅读 如何理解 Graph Convolutional Network(GCN)?​www.zhihu.com 接触到了图论中的Laplacian矩阵,定义为 , 是Laplacian矩阵, 是 ...

  2. 二维图像中的Hessian矩阵(及MATLAB代码)

    文章目录 一.图像中Hessian矩阵的定义及公式推导 二.MATLAB代码 一.图像中Hessian矩阵的定义及公式推导 对于二维图像 f ( x , y ) f(x,y) f(x,y),在点 x ...

  3. OpenCV图像处理:基于RANSAC的二维图像中直线、圆及椭圆的检测 C++

    基于ransac的直线.圆及椭圆检测算法C++代码 LINK: https://github.com/Yiphy/Ransac-2d-Shape-Detection # Ransac-2d-Shape ...

  4. 【多传感融合】优达学城多传感融合学习笔记(二)——将激光雷达点云俯视图映射到二维图像

    将激光雷达点云俯视图映射到二维图像 目录 将激光雷达点云俯视图映射到二维图像 简介 实现方法 参考代码 简介 本节讲解如何将激光雷达点云俯视图(仅考虑水平坐标)映射到二维图像中,其中涉及到激光雷达点云 ...

  5. 《剑指offer》——04. 二维数组中的查找——暴力法、线性查找——java实现

    文章目录 1.题目描述 2.解决方法 (1)暴力法 (2)线性查找(右上角->左下角) 参考: 1.题目描述 2.解决方法 (1)暴力法 如果不考虑二维数组排好序的特点,则直接遍历整个二维数组的 ...

  6. 时间序列转二维图像方法及其应用研究综述

    目录 1 前言 2 方法综述 2.1 时频分析法 2.1.1 短时傅里叶变换 2.1.2 小波变换 2.1.3 希尔伯特-黄变换 2.2 图像编码方法 2.2.1 格兰姆角场 2.2.2 马尔可夫转移 ...

  7. python怎么画简单图片-Python绘制简易的二维图像

    大家好,我是飞向天空的牛. 最近学习了一下用Python绘制简易的二维图像,代码如下图所示:绘图代码 文本如下: import matplotlib.pyplot as plt import nump ...

  8. 【MATLAB】二维绘图 ( 绘制二维图像 | 设置图像样式 )

    文章目录 一.绘制二维图像 1.二维绘图步骤 2.二维绘图步修饰 3.代码示例 二.设置图像参数 1.图像参数 2.代码示例 一.绘制二维图像 1.二维绘图步骤 绘图前需要给定 xxx 轴 , yyy ...

  9. 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  10. 二维矩阵中的最大矩形面积--java实现

    一.原题: 给你一个二维矩阵,权值为False和True,找到一个最大的矩形,使得里面的值全部为True,输出它的面积. 样例: 给你一个矩阵如下: [[1, 1, 0, 0, 1],[0, 1, 0 ...

最新文章

  1. 这可能是今年最硬核的AI交流会,李飞飞、图灵奖得主Pearl等共同探讨AI未来
  2. VR开发从何入手的实战分享
  3. go语言中goroutine池
  4. error: style attribute '@android:attr/windowEnterAnimation' not found.
  5. Win11系统下Excel怎么把0变成空白
  6. 课时40:类与对象:一些相关的BIF
  7. python产生随机字符串_Python生成随机字符串
  8. 爬虫学习一:HTTP、网页基础、requests、API、JS
  9. 继涉黄被约谈 “比心陪练”App因内容涉宣扬暴力再被处罚
  10. HTML5学习笔记---Html5简单理解,发展情况...
  11. ​使用 QuickBI 搭建酷炫可视化分析
  12. Mysql 时间转换 时间函数
  13. AGV车载控制系统搭建(初学者入门)
  14. 清除html宏病毒,手动清除EXCEL宏病毒的方法
  15. jetbrain工具常见问题汇总
  16. 纸壳CMS体验升级,快速创建页面,直接在页面中修改内容
  17. 林轩田机器学习基石Lecture 6: Theory of Generalization
  18. 由百家讲坛的《大隋风云-之流星王朝》想到的
  19. Linux入职基础-3.6_ramdisk提升Apache性能实例(运维必懂)
  20. DBeaver安装及使用手册

热门文章

  1. SECS/GEM协议开发系列(一)准备工作
  2. 学习web前端能做游戏开发吗?
  3. EAS开发单据分录和序时簿添加合计
  4. 短视频搬运软件:抖音批量解析下载一个作者所有视频
  5. Labview实时电压显示
  6. DD 虚拟键盘驱动无法卸载问题
  7. 分配销售组织 - 分销渠道 - 工厂
  8. 一种深度学习方法---迁移学习
  9. 华为牛人的十年工作感悟
  10. win10计算机历史记录,教你win10如何查看电脑开机历史记录