zhangnianjun
工程师
工程师
  • 最后登录2017-12-14
  • 发帖数136
  • 金币902枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
60楼#
发布于:2017-11-20 08:11
茄子eggplant:可以将全部的源码发上来学习下吗?回到原帖
留下你的邮箱,邮箱给你,无法发代码哦
不为失败找理由,只为成功找方法!
zhangnianjun
工程师
工程师
  • 最后登录2017-12-14
  • 发帖数136
  • 金币902枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
61楼#
发布于:2017-11-27 13:55
茄子eggplant:可以将全部的源码发上来学习下吗?回到原帖
*---------------------------------------------------------------------------------------------
* 1. 算法功能:检测金属棒上的缺陷
* 2. 算法思路:
*     方法一:用分水岭的方法
*           (1)高斯滤波
*           (2)Sobel算法求边界
*           (3)利用分水岭求取区域
*           (4)排除干扰区域
*           (5)显示和保存测试结果
* 3. 算法说明:
*
*---------------------------------------------------------------------------------------------
* 1. 算法初始化
dev_update_off()
read_image(Image, 'Picture/Pic1.bmp')
get_image_size(Image, Width, Height)
Max_Area:=Width*Height
dev_open_window_fit_image(Image, 0, 0, -1, -1, WindowHandle)
* 2.图像处理
count_seconds(Start)
* 2.1 高斯滤波
gauss_filter(Image, ImageGauss, 5)
* 2.2 寻找边界
sobel_amp(ImageGauss, EdgeAmplitude, 'sum_abs', 3)
* 2.3 利用分水岭算法
watersheds_threshold(EdgeAmplitude, Basins, 10)
* 2.4 求取测试区域ROI
connection(Basins, ConnectedRegions)
select_shape_std(Basins, SelectedRegions1, 'max_area', 70)
shape_trans(SelectedRegions1, RegionTrans, 'convex')
erosion_circle(RegionTrans, RegionErosion, 3.5)
* 2.5 测试区域中寻找最大缺陷
select_shape(ConnectedRegions, SelectedRegions, 'outer_radius', 'and', 5, Width)
intersection(SelectedRegions, RegionErosion, RegionIntersection)
select_shape_std(RegionIntersection, SelectedRegions2, 'max_area', 70)
difference(RegionIntersection, SelectedRegions2, RegionDifference)
* 2.6 去除干扰区域
intensity(RegionDifference, Image, Mean, Deviation)
Mean_threshold:=170
tuple_sgn(Mean-Mean_threshold, Sgn)
tuple_find(Sgn, 1, Indices)
tuple_length(Indices, Length)
gen_empty_obj(NG_ROI)
for j:= 0 to Length-1 by 1
    k:=Indices[j]+1
    select_obj(RegionDifference, ObjectSelected, k)  
    concat_obj(NG_ROI, ObjectSelected, NG_ROI)  
endfor
difference(RegionDifference,NG_ROI,RegionDifference1)
* 2.7 对筛选出的区域进行处理
union1(RegionDifference1,RegionUnion)
closing_circle(RegionUnion, RegionClosing, 1.5)
connection(RegionClosing, ConnectedRegions1)
select_shape_std(ConnectedRegions1, SelectedRegions3, 'max_area', 70)
fill_up_shape(SelectedRegions3, RegionFillUp, 'area', 1, Max_Area)
* 2.8 算法时间统计
count_seconds(End)
Time:=(End-Start)*1000

* 3. 显示和保存测试结果
dev_set_draw('margin')
dev_display(Image)
dev_display(RegionFillUp)
dump_window_image(Image1, WindowHandle)
write_image(Image1, 'bmp', 0, 'Result/Result_1.bmp')
不为失败找理由,只为成功找方法!
To_Ski
助理工程师
助理工程师
  • 最后登录2017-12-12
  • 发帖数62
  • 金币219枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
62楼#
发布于:2017-11-27 23:00
zhangnianjun:*---------------------------------------------------------------------------------------------
* 1. 算法功能:检测金属棒上的缺陷
* 2...
回到原帖
分水岭算法对这种图片缺陷区域提取效果很好啊,向大神学习了!!
xiangwenpei
技术员
技术员
  • 最后登录2017-12-11
  • 发帖数68
  • 金币189枚
  • 贡献勋章0枚
63楼#
发布于:2017-11-29 08:49
zhangnianjun:*---------------------------------------------------------------------------------------------
* 1. 算法功能:检测金属棒上的缺陷
* 2...
回到原帖
学习了,厉害.
xiangwenpei
技术员
技术员
  • 最后登录2017-12-11
  • 发帖数68
  • 金币189枚
  • 贡献勋章0枚
64楼#
发布于:2017-11-29 14:19
zhangnianjun:*---------------------------------------------------------------------------------------------
* 1. 算法功能:检测金属棒上的缺陷
* 2...
回到原帖
今天研究你的算法,有两个疑问想请教一下,第一个是:watersheds_threshold(EdgeAmplitude, Basins, 10) 参数10是通过什么确定的;  第二个是:Mean_threshold:=170 为啥要更170比较?谢谢.
zhangnianjun
工程师
工程师
  • 最后登录2017-12-14
  • 发帖数136
  • 金币902枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
65楼#
发布于:2017-12-06 09:26
xiangwenpei:今天研究你的算法,有两个疑问想请教一下,第一个是:watersheds_threshold(EdgeAmplitude, Basins, 10) 参数10是通过什么确定的;  第二个是:Mean_threshold:=170 为啥要更170...回到原帖
1. watersheds_threshold 参数是调出来的,根据效果,类似的图片这个参数适用;2. Mean_threshold 是金属区域的灰度平均值统计出来。
不为失败找理由,只为成功找方法!
上一页 下一页
游客

返回顶部