lchhzdz
工程师
工程师
  • 最后登录2017-04-21
  • 发帖数116
  • 金币1130枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
阅读:5064回复:23

轴承表面缺陷检测

楼主#
更多 发布于:2014-04-11 08:51
基本思路是利用模板匹配定位出ROI,然后提取ROI,然后对缺陷进一步处理,定位提出都很好了,看下一步怎么把缺陷可靠的提取,附图第一张为建模板用,第二张用于检测,第三第四张为缺陷图片,第五第六张为良品图片,要贴出代码别光讲思路,谢谢,谢谢大家互相交流学习
dev_set_color ('red')
dev_set_colored (12)
dev_set_draw ('fill')
read_image (Image, '4.bmp')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width/2, Height/2, 'black', WindowID)
dev_display (Image)
*step*取出圆环区域的位置
threshold (Image, Region, 90, 255)//利用全局阈值分割
fill_up_shape (Region, RegionFillUp, 'area', 1, 2000)
closing_circle (RegionFillUp, RegionClosing, 15)
connection (RegionClosing, ConnectedRegions)//连接联通域
select_shape (ConnectedRegions, SelectedRegions1, 'outer_radius', 'and', 237, 267)
union1 (SelectedRegions1, RegionUnion2)
region_to_bin (RegionUnion2, BinImage, 255, 0, Width, Height+2)
gen_contour_region_xld (RegionUnion2, Contours, 'border')
paint_xld (Contours, BinImage, ImageResult, 250)
* paint_xld功能:把XLD目标画在一个图像中。
create_shape_model (ImageResult, 'auto', 0, 0, 'auto', 'auto', 'ignore_local_polarity', 'auto', 5, ModelID)
dev_clear_window ()
get_shape_model_contours (ModelContours, ModelID, 1)
stop ()
read_image (Image2, '9.bmp')
*dev_display(Image)
* 在原始图上找到最好的人工模型匹配
MinScore := 0.0
Greediness := 0
NumMatches := 1
find_shape_model (Image2, ModelID, 0, 0, MinScore, NumMatches, 0.5, 'least_squares', 1, Greediness, MatchRow, MatchColumn, MatchAngle, MatchScore)
*
get_shape_model_contours (ModelContours, ModelID, 1)
vector_angle_to_rigid (0, 0, 0, MatchRow, MatchColumn, MatchAngle, HomMat2D)
affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D)
dev_display (Image2)
dev_set_color ('blue')
dev_display (ContoursAffinTrans)
*  gen_region_contour_xld 功能:从XLD元组中创建一个区域。
gen_region_contour_xld (ContoursAffinTrans, Region2, 'filled')
gen_circle (Circle, 20, 20, 6)
erosion1 (Region2, Circle, RegionErosion, 1)
union1 (RegionErosion, RegionUnion)
reduce_domain (Image2, RegionUnion, ImageReduced)

图片

jon_liu
工程师
工程师
  • 最后登录2017-05-13
  • 发帖数189
  • 金币1156枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
沙发#
发布于:2014-04-11 11:29
你是要检测两个圆环上的脏污(污垢)吗!!!!!! 如果是的话,2,3,4都NG,1,5,6OK 人工的判定是这样吗?
不知道我说的内容是不是你想的!
lchhzdz
工程师
工程师
  • 最后登录2017-04-21
  • 发帖数116
  • 金币1130枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
板凳#
发布于:2014-04-11 12:20
jon_liu:你是要检测两个圆环上的脏污(污垢)吗!!!!!! 如果是的话,2,3,4都NG,1,5,6OK 人工的判定是这样吗?
不知道我说的内容是不是你想的!
回到原帖
是的
jon_liu
工程师
工程师
  • 最后登录2017-05-13
  • 发帖数189
  • 金币1156枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
地板#
发布于:2014-04-11 15:50
再问一下,你那个脏污有没有面积要求啊,我怕面积很小的时候会误判!
xiaoshuyi_1979
助理工程师
助理工程师
  • 最后登录2017-05-19
  • 发帖数123
  • 金币514枚
  • 贡献勋章0枚
4楼#
发布于:2014-04-11 16:59
能标明一下哪个是污渍吗?
lchhzdz
工程师
工程师
  • 最后登录2017-04-21
  • 发帖数116
  • 金币1130枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
5楼#
发布于:2014-04-11 18:23
jon_liu:再问一下,你那个脏污有没有面积要求啊,我怕面积很小的时候会误判!回到原帖
面积很小时会误判,我现在用的方法就是用面积大于一个固定值得方法弄得
lchhzdz
工程师
工程师
  • 最后登录2017-04-21
  • 发帖数116
  • 金币1130枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
6楼#
发布于:2014-04-11 18:27
xiaoshuyi_1979:能标明一下哪个是污渍吗?回到原帖
第二张左边的圈出来的和右边的全出来的明显有区别,左边的有很大的黑斑,右边很平滑很均匀
jon_liu
工程师
工程师
  • 最后登录2017-05-13
  • 发帖数189
  • 金币1156枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
7楼#
发布于:2014-04-12 10:54
你的代码加上我的代码,试试看!(你的定位做的不太完全)
rgb1_to_gray (ImageReduced, GrayImage)
mean_image (GrayImage, ImageMean, 20, 20)
dyn_threshold (ImageReduced, ImageMean, RegionDynThresh, 5, 'light')
dyn_threshold (ImageReduced, ImageMean, RegionDynThresh1, 5,'dark')
union2 (RegionDynThresh1, RegionDynThresh1, RegionUnion1)
erosion_circle (RegionUnion1, RegionErosion1, 2.5)
connection (RegionErosion1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions, 'area', 'and', 100, 99999)
dev_set_color ('red')
dev_set_draw ('margin')
dev_display (ImageReduced)
dev_display(SelectedRegions)
lchhzdz
工程师
工程师
  • 最后登录2017-04-21
  • 发帖数116
  • 金币1130枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
8楼#
发布于:2014-04-12 11:02
jon_liu:你的代码加上我的代码,试试看!(你的定位做的不太完全)
rgb1_to_gray (ImageReduced, GrayImage)
mean_image (GrayImage, ImageMean, 20, 20)
dyn_thresho...
回到原帖
threshold (ImageReduced, ReducedRegion, 0, 70)//利用全局阈值分割
 union1 (ReducedRegion, RegionUnion)
 area_center (RegionUnion, Area, Row, Column)
 if (Area>250)
     disp_message (WindowHandle, '表面缺陷面积为:'+Area+'不合格', 'window', 50, 50, 'red', 'false')
else
  
    disp_message (WindowHandle, '合格', 'window', 50, 50, 'green', 'false')
endif固定阈值好像也可以
jon_liu
工程师
工程师
  • 最后登录2017-05-13
  • 发帖数189
  • 金币1156枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
9楼#
发布于:2014-04-12 11:57
完整代码,貌似可以!
dev_set_color ('red')
dev_set_colored (12)
dev_set_draw ('margin')
for i := 1 to 6 by 1
read_image (Image,'E:/halcon student/视觉代码/脏污检测/'+i+'.bmp')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width/2, Height/2, 'black', WindowID)
dev_display (Image)
*step*取出圆环区域的位置
threshold (Image, Region,30, 255)
fill_up (Region, RegionFillUp)
connection (RegionFillUp, ConnectedRegions)//连接联通域
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 40000, 79999)
select_shape (SelectedRegions, SelectedRegions1,'outer_radius', 'and', 237, 267)
reduce_domain (Image, SelectedRegions1, ImageReduced1)
threshold (ImageReduced1, ReducedRegion, 0, 70)//利用全局阈值分割
 union1 (ReducedRegion, RegionUnion)
 area_center (RegionUnion, Area, Row, Column)
 if (Area>250)
     disp_message(WindowID,'表面缺陷面积为:'+Area+'不合格', 'window', 50, 50, 'red', 'false')
else
  
    disp_message (WindowID, '合格', 'window', 50, 50, 'green', 'false')
endif
dev_display(Image)
dev_display (RegionUnion)
stop ( )
endfor
lchhzdz
工程师
工程师
  • 最后登录2017-04-21
  • 发帖数116
  • 金币1130枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
10楼#
发布于:2014-04-12 13:06
大伙看有没有别的新思路,拓展一下眼界
lchhzdz
工程师
工程师
  • 最后登录2017-04-21
  • 发帖数116
  • 金币1130枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
11楼#
发布于:2014-04-13 09:38
jon_liu:你的代码加上我的代码,试试看!(你的定位做的不太完全)
rgb1_to_gray (ImageReduced, GrayImage)
mean_image (GrayImage, ImageMean, 20, 20)
dyn_thresho...
回到原帖
将左边的和右边的分别做模板,这样定位精度会特别高,有空试试,哈哈
lchhzdz
工程师
工程师
  • 最后登录2017-04-21
  • 发帖数116
  • 金币1130枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
12楼#
发布于:2014-04-14 20:05
看来我的帖子要结题了,没人顶了
nian16
高级工程师
高级工程师
  • 最后登录2016-11-05
  • 发帖数158
  • 金币1940枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
13楼#
发布于:2014-04-16 16:40
不错不错,运行了一下,效果很好的~~~
ericlch
初学者
初学者
  • 最后登录2014-06-02
  • 发帖数1
  • 金币1枚
  • 贡献勋章0枚
14楼#
发布于:2014-05-04 09:06
顶一下,大家辛苦了,多交流
上一页
游客

返回顶部