这种方式比较简单,条件是你的焊点位置比较固定。
这时候我们可以按焊点数量做几个固定的ROI区域,在reduce_domain。剩下的不用说大家也知道怎么玩了。
如果有深度学习就好了,否则也不会出此下策,这实在不是什么好办法。
此种方式让勇哥联想到当年用printf(" * ")打印金字塔图形的那种办法。
为什么焊点会出现色阶分布不均匀的效果呢?
这是因为打焊点的时候,由于两个焊片贴合得不平整,或者是激光能量不稳定造成的。

Row1:=928.934
Column1:=1280.83
Row2:=982.723
Column2:=1453.5
*read_image(Image, 'C:/Users/hackpig/Desktop/图片/图片/上焊点OK图片/DAB43671DB5_16_39_36.jpg')
*draw_rectangle1(200000, Row1, Column1, Row2, Column2)
list_files ('C:/Users/hackpig/Desktop/图片/图片/上焊点OK图片', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image, ImageFiles[Index])
index:=0 //不为1则为上焊点,否则为下焊点
roix1:= Row1
roix2:=Row2
roiy1:= Column1
roiy2:=Column2
widthSpan:= 60
circleradius:= 24
bottomThreHold:=240
width1:=roiy2-roiy1
widthSpan:=width1/3
gen_empty_obj(roi)
for i:=0 to 3 by 1
gen_circle(Circle, roix1, roiy1+i*widthSpan,circleradius)
union2(roi, Circle, roi)
endfor
for i:=0 to 3 by 1
gen_circle(temp, roix2, roiy1+i*widthSpan,circleradius)
union2(roi, temp, roi)
endfor
//如果阴影区域面积大于一定值,就认为有折痕
rugateMinArea:=9000
rugateNG:=true
gen_rectangle1(Rectangle, Row1-10, Column1-10, Row2+10, Column2+10)
reduce_domain(Image, Rectangle, roiRugate)
threshold(roiRugate, Region, 0, bottomThreHold)
connection(Region, ConnectedRegions)
union1(ConnectedRegions, RegionUnion)
area_center(RegionUnion, Area, Row, Column)
if (Area[0]>rugateMinArea)
rugateMinArea:=true
else
rugateMinArea:=false
endif
//如果小于一定阈值,则认为黑色区域偏多,可能出现双TOC
doubleTcoNg:=false
maxAvgeGray:=215
visionUpThreshold:=205
visionBottomThreshold:=240
selectShapeMin:=1
selectShapeMax:=10000
gen_rectangle1(Rectangle1, Row1-50, Column1-50, Row2+50, Column2+50)
reduce_domain(Image, Rectangle1, ImageReduced)
intensity(ImageReduced, Image, Mean, Deviation)
if(Deviation[0]<maxAvgeGray)
doubleTcoNg:=true
else
doubleTcoNg:=false
endif
dev_set_draw('fill')
get_image_size(Image, Width, Height)
reduce_domain(Image, roi, ImageReduced1)
bin_threshold(ImageReduced1, Region1)
if(index#1)
threshold(ImageReduced1, Region2, 0, visionUpThreshold)
else
threshold(ImageReduced1, Region2, 0, visionBottomThreshold)
endif
closing_circle(Region2, RegionClosing, 4)
fill_up(RegionClosing, RegionFillUp)
connection(RegionFillUp, ConnectedRegions1)
count_obj(ConnectedRegions1, Number)
erosion_circle(ConnectedRegions1, RegionErosion, 1.5)
select_shape(RegionErosion, SelectedRegions, 'area', 'and',50, 99999)
count_obj(SelectedRegions, Number1)
area_center(SelectedRegions, Area1, Row3, Column3)
smallest_circle(SelectedRegions, Row4, Column4, Radius)
if(|Radius|>0)
dev_set_draw('fill')
dev_set_line_width(1)
dev_set_color('green')
* if(rugateNG=true or doubleTcoNg=true)
* dev_set_color('red')
* write_string(200000, '怀疑极片褶皱')
* endif
dev_disp_text(Number1, 'window', 214, 238, 'black', 'box', 22)
dev_set_color('green')
disp_obj(ConnectedRegions1,200000)
dev_set_draw('margin')
dev_set_color('blue')
dilation_circle(SelectedRegions,RegionDilation, 12)
disp_obj(RegionDilation, 200000)
endif
stop()
endfor---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:



少有人走的路


















