视觉进阶: 寻找出边缘突出的部分

如下图,想取得这根条状物的突出来的“刺”。

image.png

寻找图中边缘突出的部分,解决思路:

1、阈值分割,找出黑色部分

2、生成一个小矩形作为StructElement,进行opening操作,即可找到如下图的部分

3、与阈值分割后的进行difference操作,即可找到突出部分,后面再进行求取突出的最边缘部分。

image.png


image.png

上代码:

read_image (Image, 'C:/Users/gongyong/Desktop/第八讲图2.bmp')
decompose3 (Image, Image1, Image2, Image3)
threshold (Image1, Regions, 15, 72)
connection (Regions, ConnectedRegions)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
*生成一个矩形,方向和划痕方向相同
*经过opening操作后,得到去掉突出的部分
orientation_region (SelectedRegions, Phi)
gen_rectangle2 (Rectangle, 300, 200, Phi, 100, 1)
opening (SelectedRegions, Rectangle, RegionOpening)

*提取轮廓的xld
gen_contour_region_xld (RegionOpening, Contours, 'border')
fit_rectangle2_contour_xld (Contours, 'regression', -1, 0, 0, 3, 2, Row, Column, Phi1, Length1, Length2, PointOrder)

gen_rectangle2_contour_xld (Rectangle1, Row, Column, Phi1, Length1, Length2)

***矩形左边线的中点
lr:=Row+Length1*sin(Phi1)
lc:=Column-Length1*cos(Phi1)
gen_cross_contour_xld (Cross, lr, lc, 6, Phi1)

***矩形右边线的中点
rr:=Row-Length1*sin(Phi1)
rc:=Column+Length1*cos(Phi1)
gen_cross_contour_xld (Cross1,rr,rc,6,Phi1)
***生成矩形中线
gen_contour_polygon_xld (Contour, [lr,rr], [lc,rc])
***比Rectangle1拉长了20
gen_rectangle2 (Rectangle2, Row, Column, Phi1, Length1+20, Length2)
***提取出多余突出来的部分
difference (SelectedRegions, Rectangle2, RegionDifference)
opening_circle (RegionDifference, RegionOpening1, 1.5)
connection (RegionOpening1, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 10, 99999)
***
count_obj (SelectedRegions1, Number)

allr:=[]
allc:=[]
RowProj:=[]
ColProj:=[]
distall:=[]
Contour11:=[]
gen_empty_obj (allline)
for i := 1 to Number by 1
    select_obj (SelectedRegions1, ObjectSelected, i)
    get_region_points (ObjectSelected, Rows, Columns)
    distance_pl (Rows, Columns, lr, lc, rr, rc, Distance)
    distall:=[distall,max(Distance)[0]]
    sel:=find(Distance,max(Distance))
    allr:=[allr,Rows[sel]]
    allc:=[allc,Columns[sel]]
    projection_pl (Rows[sel][0], Columns[sel][0], lr, lc, rr, rc, RP, CP)
    RowProj:=[RowProj,RP]
    ColProj:=[ColProj,CP]
    gen_contour_polygon_xld (Contour1, [Rows[sel][0],RP], [Columns[sel][0],CP])
    concat_obj (allline, Contour1, allline)
    
    
    
    
endfor
gen_cross_contour_xld (Cross2, allr, allc, 6, Phi1)

dev_display (Image)
dev_display (Contour)
dev_display (Cross2)
dev_display (allline)



image.png


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

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



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

发表评论:

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

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 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