视觉检测之产品瑕疵检测(4)表面划痕


原图:

image.png



halcon程序:

read_image (Image, 'C:/Users/Administrator/Desktop/划痕+油污+瑕疵的检测/划痕、油污、瑕疵/表面划痕/Image.bmp')
dev_close_window() 
get_image_size(Image, Width, Height) 
dev_open_window(0, 0, Width, Height, 'black', WindowHandle) 
set_display_font(WindowHandle, 16, 'mono', 'true', 'false') 
dev_set_line_width(2) 
dev_display(Image) 
disp_continue_message(WindowHandle, 'black', 'true') 
stop() 

invert_image(Image,ImageInvert1) 
mult_image(ImageInvert1, ImageInvert1, ImageResult,0.01, 0) 
* Generate a bandpass filter with sinusoidal shape.

gen_sin_bandpass (ImageBandpass, 0.6, 'none', 'rft', Width, Height)
rft_generic (ImageResult, ImageFFT, 'to_freq', 'none', 'complex', Width) 
convol_fft (ImageFFT, ImageBandpass, ImageConvol) 
rft_generic (ImageConvol, Lines, 'from_freq', 'n', 'byte', Width)
*Filter an image using a Laws texture filter.
texture_laws (Lines, ImageTexture, 'el',3, 5)
mean_image(ImageTexture, ImageMean,5, 30)
dyn_threshold(ImageTexture, ImageMean, RegionDynThresh, 20, 'light')
connection(RegionDynThresh, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 44.08, 487)
union1(SelectedRegions, RegionUnion)
closing_circle(RegionUnion, RegionClosing, 6)
skeleton(RegionClosing, Skeleton)

dev_display(Image) 
dev_set_color('red') 
dev_display(Skeleton) 
stop()


gen_sin_bandpass( : ImageFilter : Frequency, Norm, Mode, Width, Height : )

产生一个正弦形状的带通滤波器

正弦的最大值由Frequency决定,Frequency的值介于0和1之间。

如果用fft_generic,参数Mode的dc_edge可以提升性能。

如果滤波用fft_image和fft_image_inv,Norm值必须设为none,Mode必须设为dc_center。

如果使用了rft_generic,Mode值必须设为rft。

参数列表:

第1个参数(out):以频域表示的带通滤波器

第2个参数(in):从DC面上,滤波器的最大距离,限制条件:frequency >= 0

第3个参数(in):滤波器的归一化因子

第4个参数(in):频域中DC的位置

第5个参数(in):图像(滤波器)的宽度

第6个参数(in):图像(滤波器)的高度

可替代项:

gen_std_bandpass

可能前置项:

fft_image, fft_generic, rft_generic

可能后置项:

convol_fft


dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )

当前背景之间差异明显时,可以设定全局阈值进行threshold,但很多情况下由于背景不均一,目标体经常表现为比背景局部亮一些或暗一些,无法确定全局阈值操作,需要通过其邻域找到一个合适的阈值进行分割。ThresholdImage是参考图像,通过与OrigImage对比找到领域确定阈值,一般采用平滑滤波算子(如mean_image)获取参考图像。offset设定邻域比较的区间范围,灰度值变化在offset范围内均是可以接受的。令 g_{o} = g_{OrigImage}, g_{t} = g_{ThresholdImage}分别代表原图和参考图中的像素点的灰度值.我们的做法是把参考图像的灰度值加上(减去)一个Offset,然后去和原图的像素点逐像素对应地进行比较。下面看Halcon中给出的这些公式:

The condition for LightDark = 'light' is:g_o>=g_t+offset ,light就提取相对参考图更亮的区域。

For LightDark='dark' ,the conditon is: g_o<=g_t-offset ,dark就提取相对参考图更暗的区域

For LightDark='equal',g_t-offset<=g_o<=g_t+offset,选取和参考图差不多的区域。


skeleton(Region : Skeleton : : )

拟合出该区域的骨架


效果如下:

image.pngimage.png


--------------------- 

作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864