如下图,想取得这根条状物的突出来的“刺”。
寻找图中边缘突出的部分,解决思路:
1、阈值分割,找出黑色部分
2、生成一个小矩形作为StructElement,进行opening操作,即可找到如下图的部分
3、与阈值分割后的进行difference操作,即可找到突出部分,后面再进行求取突出的最边缘部分。
上代码:
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)
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


