Halcon-表面检测-----裂纹检测

article/2024/9/19 9:09:35

对应示例程序:
detect_mura_defects_blur.hdev

目标:实例实现LCD上有很多污点干扰下,检测LCD的印痕检测。

思路为:对LCD图像进行拆分,提取RGB三个分量。
对B分量进行处理,将其转换为频域内图像,并对其进行高斯卷积。
再将卷积处理后的图像转换回空间域图像。
随后将B分量图像和处理后的B分量图像用算子sub_image做差运算。
最后就可以调用lines_gauss提取印痕了。
为避免边框对lines_gauss的影响,对图像进行了一定的截取处理,
用erosion_rectangle1将四周去除了。

图像:
在这里插入图片描述

代码:

* 实现带污点LCD印痕检测
dev_close_window ()
dev_update_off ()
Path := 'lcd/mura_defects_blur_'
read_image (Image, Path + '01')
get_image_size (Image, Width, Height)
dev_open_window_fit_size (0, 0, Width, Height, 640, 480, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
ScaleFactor := 0.4
calculate_lines_gauss_parameters (17, [25,3], Sigma, Low, High)
for f := 1 to 3 by 1read_image (Image, Path + f.2i')*将三通道彩色 图像进行拆分为R,G,Bdecompose3 (Image, R, G, B)* 计算图像B的快速傅立叶变换,也就是频域变换,ImageFFT为输出结果图像,to_freq表示从空间到频域变换。*none表示变换的规范变化因数,complex表示输出图像为complex类型,width为图像宽度。rft_generic (B, ImageFFT, 'to_freq', 'none', 'complex', Width)*生成高斯滤波器ImageGauss,100为在空间域中高斯 在主方向生成的标准差,*另100为空间域 中高斯在正交于主方向 上的标准差,0表示 滤波器主方向 上的角度 ,none为滤波器的规范。*rft为直流 项在频域 的位置,最后 两参数为图片你宽高。gen_gauss_filter (ImageGauss, 100, 100, 0, 'n', 'rft', Width, Height)*在频域图片ImageFFT上,用高斯滤波器ImageGauss做卷积。convol_fft (ImageFFT, ImageGauss, ImageConvol)*与上一个rft_generic做反向运算,将频域图像转换为空间域的图像。rft_generic (ImageConvol, ImageFFT1, 'from_freq', 'none', 'byte', Width)*将两幅图像做减法运算,公式为g' := (g1 - g2) * Mult + Add。*g1,g2表示B, ImageFFT1的灰度值,g表示计算结果图ImageSub,2为Mult,100为Add。sub_image (B, ImageFFT1, ImageSub, 2, 100)* 将图像ImageSub进行放大观察,ImageZoomed为放大后的图像,ScaleFactor, ScaleFactor为长宽放大加数,*constant为插值方法。zoom_image_factor (ImageSub, ImageZoomed, ScaleFactor, ScaleFactor, 'constant')* 获取一幅图的区域,目的为避免边框对lines_gauss的影响。get_domain (ImageZoomed, Domain)*对图像 进行腐蚀运算处理,7,7为矩形 结构宽高。erosion_rectangle1 (Domain, RegionErosion, 7, 7)*在图像ImageZoomed截取RegionErosion大小图片,存放到变量ImageReducedreduce_domain (ImageZoomed, RegionErosion, ImageReduced)*检测图像的线条与宽度。ImageReduced, Lines为输入图像与输出的亚像素线条,*Sigma为高斯平滑系数, Low为后滞阈值分隔低值, High为前置阈值分割高值,*'dark'表示 提取图像 中的暗线条, 'true'表示 是否提取线条 宽度, 'gaussian'提取线条的模式,*gaussian在线条不锐利时使用, 'true'表示添加 能够 提取的接合点。lines_gauss (ImageReduced, Lines, Sigma, Low, High, 'dark', 'true', 'gaussian', 'true')*生成齐次转换矩阵hom_mat2d_identity (HomMat2DIdentity)*添加缩放的齐次转换矩阵,HomMat2DIdentity为输入矩阵,*1 / ScaleFactor, 1 / ScaleFactor为缩放因数, HomMat2DScale为输出的矩阵。hom_mat2d_scale_local (HomMat2DIdentity, 1 / ScaleFactor, 1 / ScaleFactor, HomMat2DScale)*对亚像素直线Lines进行仿射变换。affine_trans_contour_xld (Lines, Defects, HomMat2DScale)* dev_display (Image)dev_display (Defects)if (f < 3)disp_continue_message (WindowHandle, 'black', 'true')stop ()endif
endfor
复制代码

用到的几个算子:
calculate_lines_gauss_parameters
根据要提前线条的最大宽度和对比度,为算子line_gauss计算出参数sigma、low和high。

rft_generic
傅里叶变换 空间域–频率域的转换
gen_gauss_filter
生成高斯滤波器
convol_fft
卷积

lines_gauss
从图像中提取线。参数lightdark设定提取亮线还是暗线。

仿射变换
hom_mat2d_identity
hom_mat2d_scale_local
affine_trans_contour_xld

参考资料:
[1]: https://www.gkbc8.com/thread-13529-1-1.html


http://chatgpt.dhexx.cn/article/YSw9H2e9.shtml

相关文章

图像中的裂纹检测

01. 数据集 我们首先需要从互联网上获取包含墙壁裂缝的图像(URL格式)数据。总共包含1428张图像:其中一半是新的且未损坏的墙壁;其余部分显示了各种尺寸和类型的裂缝。 第一步:读取图像,并调整大小。 images = []for url in tqdm.tqdm(df[content]): response = req…

html图片与文字轮播,我是这样写文字轮播的

原标题&#xff1a;我是这样写文字轮播的 作者&#xff1a;一半水一半冰 原文&#xff1a;http://www.cnblogs.com/jingh/p/6377736.html 1写在前面 最近总结下之前的工作&#xff0c;才恍然发现时间的流逝永远是悄无声息的&#xff0c;离开学校那座象牙塔已经也有大半年的时间…

IOS 文本文字下面添加下划线

2019独角兽企业重金招聘Python工程师标准>>> UILabel *infolabel [[UILabel alloc] initWithFrame:CGRectMake(30*RATIO,260*RATIO, self.view.bounds.size.width-60*RATIO, 20*RATIO)];infolabel.text "infoimcba.com";infolabel.textColor [UIColor …

html语言 特效字,用HTML和CSS实现酷炫的文字特效

前言 马上我们就要进入下一个阶段&#xff0c;也就是HTML和CSS实现前端界面的阶段了&#xff0c;想必很多小伙伴都想给自己的页面加点酷炫的特效&#xff0c;今天&#xff0c;我就给大家整理了一些非常酷炫的文字特效来装点你的页面&#xff01;有些是从网络上找的&#xff0c;…

python抓取图片数字_python 实现识别图片上的数字

Python 3.6 版本 Pytesseract 图像验证码识别 环境: (1) win7 64位 (2) Idea (3) python 3.6 (4) pip install pillow <&nbsp>pip install pytesseract (5) 识别引擎tesseract-ocr 安装 安装tesseract-ocr的识别引擎 第一步:下载安装包 我下载的是64位,根据自…

html改变字母间距,css怎么调整字体间距?

在前端开发的过程中&#xff0c;有时候可能会出现字与字之间比较紧凑&#xff0c;我们可以通过css设置文字间隔让字与字之间的距离大一点&#xff0c;下面我们来看一下如何使用css调整字体间距。 css中解决字与字间隔的方法是使用css样式属性letter-spacing&#xff0c;letter-…

html ul 加点,HTML ul compact 属性 | 菜鸟教程

HTML compact 属性 实例 在无序列表中使用compact属性&#xff1a; CoffeeTeaMilk 尝试一下 浏览器支持 所有主流浏览器都不支持 compact 属性。 定义和用法 HTML5 不支持 compact 属性。 请使用 CSS 替代。 的 compact 属性在 HTML 4.01 已废弃。 compact 属性是一个 boole…

css怎么将文字底下设置颜色,css如何设置文字颜色

css设置文字颜色的方法&#xff1a;1、在DIV标签内使用color颜色样式&#xff0c;代码为【 www.php.cn 】&#xff1b;2、在CSS选择器中使用color颜色样式CSS代码。 本教程操作环境&#xff1a;windows7系统、css3版&#xff0c;DELL G3电脑。 css设置文字颜色的方法&#xff1…

markdown/LaTeX中在字母下方输入圆点的方法

看下面的关联代数的乘法定义, 如果需要在 z z z下面加上一个点, 应该怎么做呢? 下面是一个采用\stackrel命令的方法 {\huge{}_{\stackrel{{}_{{}_{{}_{{}_z}}}}{{}^\cdot}}}\!\leq y⋅ z ⁣ ≤ y {\huge{}_{\stackrel{{}_{{}_{{}_{{}_z}}}}{{}^\cdot}}}\!\leq y ⋅z​​​​​…

html 字前边自动加点,css实现文字越界加点点点显示,并且后面紧跟一个图标

文字越界添加...显比抖朋要插支一圈不者地示 在HTML页面上&#xff0c;会遇到当文字长度超出一定长度的时候&#xff0c;将超出的部分显示为...的情况&#xff0c;这个功能很好实现&#xff0c;很多人都可以直接写出来。 示例代码&#xff1a; .demo { display: block; text-ov…

css文字下方加点

1、border-bottom: 1px dashed #333; 2、 text-emphasis: dot; text-emphasis-position: under; -webkit-text-emphasis: dot; -webkit-text-emphasis-position: under;

css+html 在文字下面加点。

效果 代码&#xff1a; 通过伪类的方式在content里面加点。然后定位在文字的下面。 <head> <style> .wavy { position: relative; } .wavy:before { content: "."; position: absolute; top: 10p…

linux 问题-——退出vi编辑器 wq失效

退出linux的vi编辑器时&#xff0c;先按左上角的esc按键&#xff0c;再输出输入命令 保存不退出w强制保存但不退出w!保存并退出wq强制保存并退出wq&#xff01;不保存退出q不保存并强制退出q! 出现以下问题&#xff1a; esc退出后&#xff0c;不能成功输出上述命令退出。 原因…

vi编辑器 末尾添加_vi编辑器操作指令分享

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编…

vi编辑器

目录 一、vim编辑器概念 1、为什么用vim编辑器&#xff1f; 2、vim的格式 二、vim的模式 1、命令模式 1.1退出vim快捷键 1.2光标跳转 1.3常用操作命令 2、输入模式 3、末行模式 一、vim编辑器概念 1、为什么用vim编辑器&#xff1f; Linux 系统中“一切皆文件”&…

VI编辑器小结

文章目录 一、vi编辑器的简要介绍二、vi编辑器的工作模式三、vi编辑器的使用方法 工作中发现vi编辑器用处很大&#xff0c;现总结一部分 一、vi编辑器的简要介绍 1、vi编辑器通常被简称为vi&#xff0c;它是Linux和Unix系统上最基本的文本编辑器&#xff0c;类似于Windows 系统…

linux学习之vi编辑器

一、vi编辑器功能 打开、新建、保存文件光标移动文本编辑&#xff08;多/单行/列&#xff09;复制、粘贴、删除查找、替换 二、配置vi编辑器 输入&#xff1b; cd /etc/vim cp vimrc ~/.vimrc cd ~ gedit .vimrc使用notepad打开本地文件 将内容复制到在虚拟机的.vimrc文…

vi编辑器的基本使用

目录 一、vi的基本概念 1.1 命令行模式&#xff08;command mode&#xff09; 1.2 插入模式&#xff08;Insert mode&#xff09; 1.3 底行模式&#xff08;last line mode&#xff09; 二、vi的基本操作 2.1 进入vi&#xff08;重要&#xff09; 2.2 切换至插入模式&am…

如何退出Vi或Vim编辑器

The vi editor is confusing if you’re not used to it. It takes a secret handshake to escape this application if you’ve stumbled into it. Here’s how to quit vi or vim on Linux, macOS, or any other Unix-like system. 如果您不习惯使用vi编辑器,则会感到困惑。…

Linux复习-vi编辑器

文章目录 0、前言1、整体功能2、进入与退出vi编辑器3、vi的工作方式4、文本插入命令5、文本修改命令 0、前言 vi编辑器是Unix系统中自带的文本编辑器&#xff0c;现在用的最多的是vim编辑器&#xff0c;vim 具有程序编辑的能力&#xff0c;可以主动的以字体颜色辨别语法的正确…