hty101
工程师
工程师
  • 最后登录2020-09-19
  • 发帖数80
  • 金币2899枚
  • 贡献勋章0枚
  • 社区居民
阅读:339回复:15

如何找图中的圆才会比较稳定

楼主#
更多 发布于:2020-09-15 08:43
求助,如何找图中的圆才会比较稳定

图片:Image 2.bmp


代码1

dev_update_off ()
read_image (Image, 'C:/Users/ty/Desktop/Image/Camera MV-GE502M#A9FE688A-Snapshot-20200911213103-20898172749.BMP')
get_image_size (Image, Width, Height)
dev_close_window ()


dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_display (Image)
count_channels (Image, Channels)
if(Channels>1)
rgb1_to_gray (Image, GrayImage)
else
copy_image (Image, GrayImage)
endif
*------------------------------------------------------------
* Matching 01: BEGIN of generated code for model initialization
set_system ('border_shape_models', 'false')
* Matching 01: read the shape model from file
read_shape_model ('2.shm', ModelId)
* Matching 01: get the model contour for transforming it later into the image
get_shape_model_contours (ModelContours, ModelId, 1)


count_seconds(t1)
find_scaled_shape_model (GrayImage, ModelId, rad(0), rad(360), 0.9, 1.1, 0.5, 1, 0.5, 'least_squares', 1, 0.9, Row, Column, Angle, Scale, Score)
find_shape_model (GrayImage, ModelId, rad(0), rad(360), 0.5, 1, 0.5, 'least_squares', [5,1], 1, ModelRow, ModelColumn, ModelAngle, ModelScore)
* Matching 01: transform the model contours into the detected positions
for MatchingObjIdx := 0 to |ModelScore| - 1 by 1
    hom_mat2d_identity (HomMat)
    hom_mat2d_rotate (HomMat, ModelAngle[MatchingObjIdx], 0, 0, HomMat)
    hom_mat2d_translate (HomMat, ModelRow[MatchingObjIdx], ModelColumn[MatchingObjIdx], HomMat)
    affine_trans_contour_xld (ModelContours, TransContours, HomMat)
*     affine_trans_pixel (HomMat, line_row, line_col, RowTrans, ColTrans)
*     affine_trans_point_2d (HomMat, line_col, line_row, Qx, Qy)
    gen_cross_contour_xld (Cross, ModelRow, ModelColumn, 20, ModelAngle)
    
endfor
   if(|ModelScore|>0)
*    vector_angle_to_rigid (1318.08, 884.579, 0,  ModelRow, ModelColumn, ModelAngle, HomMat2D)
*    affine_trans_pixel (HomMat2D, line_row, line_col, RowTrans, ColTrans)
     *根据找到模板位置生成一个处理区域
     gen_circle (Circle, ModelRow, ModelColumn, 650)
 
*-----------------------------------------------------------------------------
dev_set_color ('red')


fine_circle (GrayImage, ContCircle, Contours, ModelRow, ModelColumn, 535, 35, 5, 35, 150, 0, 6.28, out_row, out_Column, out_Radius, Row1, Column1)
fine_circle (Image, ContCircle1, Contours1, ModelRow, ModelColumn, 465, 35, 5, 35, 150, 0, 6.28, out_row1, out_Column1, out_Radius1, Row11, Column11)
dev_display (ContCircle1)
dev_display (ContCircle)
  else
       a:=1
   endif
代码2

* read_image (Image, 'Camera MV-GE502M#A9FE688A-Snapshot-20200911213103-20898172749.BMP')
read_image (Image, 'C:/Users/ty/Desktop/2020-09-14/存储图像_存储图像_2020_09_14_17_00_16_797.bmp')
dev_close_window()


dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
* dev_display (Image)
dev_update_off()
*-----------查测是否为RGB图片,是转化为灰度图-----------*
count_channels (Image, Channels)
if(Channels>1)
rgb1_to_gray (Image, GrayImage)
else
copy_image (Image, GrayImage)
endif
*-----------查测是否为RGB图片,是转化为灰度图-----------*
*检测结果值
a:=0
b:=0
*限定值
cali:=0.0062
smallc_min:=6.2
smallc_max:=6.8
calic_min:=6.2
calic_max:=6.8
ds_li:=0.15
* Matching 01: BEGIN of generated code for model initialization
set_system ('border_shape_models', 'false')
* Matching 01: read the shape model from file
read_shape_model ('2.shm', ModelId)
* Matching 01: get the model contour for transforming it later into the image
get_shape_model_contours (ModelContours, ModelId, 1)


count_seconds(t1)
find_shape_model (GrayImage, ModelId, rad(0), rad(360), 0.8, 1, 0.5, 'least_squares', [5,1], 1, ModelRow, ModelColumn, ModelAngle, ModelScore)
* Matching 01: transform the model contours into the detected positions
for MatchingObjIdx := 0 to |ModelScore| - 1 by 1
    hom_mat2d_identity (HomMat)
    hom_mat2d_rotate (HomMat, ModelAngle[MatchingObjIdx], 0, 0, HomMat)
    hom_mat2d_translate (HomMat, ModelRow[MatchingObjIdx], ModelColumn[MatchingObjIdx], HomMat)
    affine_trans_contour_xld (ModelContours, TransContours, HomMat)
*     affine_trans_pixel (HomMat, line_row, line_col, RowTrans, ColTrans)
*     affine_trans_point_2d (HomMat, line_col, line_row, Qx, Qy)
    gen_cross_contour_xld (Cross, ModelRow, ModelColumn, 20, ModelAngle)
    
endfor
   if(|ModelScore|>0)
*    vector_angle_to_rigid (1318.08, 884.579, 0,  ModelRow, ModelColumn, ModelAngle, HomMat2D)
*    affine_trans_pixel (HomMat2D, line_row, line_col, RowTrans, ColTrans)
     *根据找到模板位置生成一个处理区域
     gen_circle (Circle, ModelRow, ModelColumn, 650)
   else
       a:=1
   endif


if(a=0)
   *取处理区域
   reduce_domain (GrayImage, Circle, ImageReduced)


    *---------------抽处需要检测部分
   threshold (ImageReduced, Regions, 200, 255)
   connection (Regions, Connection)
   erosion_circle(Connection, RegionOpening, 6.5)
*    opening_circle (Connection, RegionOpening, 3.5)
  fill_up (RegionOpening, RegionFillUp)
  select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 10000, 999999)
  count_obj (SelectedRegions, Number1)
  if(Number1>=4)
      dilation_circle(SelectedRegions, RegionClosing, 6.5)
*        closing_circle (SelectedRegions, RegionClosing, 3.5)
       gen_contour_region_xld (RegionClosing, Contours, 'border')
      
       union1 (RegionClosing, RegionUnion)
        *----------------抽处需要检测部分
       *扩大抽处部分
       dilation_circle (RegionUnion, RegionDilation, 15)
       *抽处检测部分图像
       reduce_domain (ImageReduced, RegionDilation, ImageReduced1)
      *注检测部分最小外接圆
      smallest_circle (RegionUnion, Row1, Column1, Radius1)
      
      
      *生成外接圆
      gen_circle_contour_xld (ContCircle, Row1, Column1, Radius1, 0, 6.28318, 'positive', 1)
      distance_pc (Contours, Row1, Column1, DistanceMin, DistanceMax)
      dim_pc:=(DistanceMax-DistanceMin)*cali
      dim_small:=Radius1*2*cali
      if(dim_small>smallc_max or dim_small<smallc_min or dim_pc>2)
          a:=3
      endif
      *生成测量区域
      gen_circle (Circle4, Row1, Column1, Radius1)
      *生成一比外接圆小的圆2
      gen_circle (Circle2, Row1, Column1, Radius1-10)
      *圆2与担取检测区域求差获得外接圆内非检测区域
      difference (Circle2, RegionDilation, RegionDifference)
      *扩大圆内非检测区域
      dilation_circle (RegionDifference, RegionDilation1, 20)
      
      *生成一个比外接圆大的圆3
      gen_circle (Circle3, Row1, Column1, Radius1+10)
      gen_circle (Circle5, Row1, Column1, Radius1-35)
      difference (Circle3, Circle5, RegionDifference2)
        intersection (RegionDifference2,  RegionDilation1, RegionIntersection)
       dilation_circle (RegionIntersection, RegionDilation2, 30)
     *圆3与扩大的圆内非检测区域求差获得排除间区的区域
*      difference (Circle3, RegionDilation2, RegionDifference1)
     difference (Circle3, RegionDilation1, RegionDifference1)
     *提取排除了间隔间区的图像
     reduce_domain (ImageReduced1, RegionDifference1, ImageReduced2)
     *------生成一幅等大的图
     get_image_size (Image, Width, Height)
     gen_image_const (Image1, 'byte', Width, Height)
     gen_image_proto (Image1, ImageCleared, 60)
     *将需检测图像显视到生成的新图
     paint_gray (ImageReduced2, ImageCleared, MixedImage)
    *检测圆大小
     spoke2 (MixedImage, Circle4, Regions3, 150, 250, 15, 1, 35, 'positive', 'max', 'inner', ResultRow, ResultColumn, ArcType1)
     tuple_length (ResultColumn, Number)
     gen_cross_contour_xld (Cross1, ResultRow, ResultColumn, 10, 0)
     pts_to_best_circle (Circle1, ResultRow, ResultColumn, Number, 'circle', RowCenter, ColCenter, Radius2, StartPhi, EndPhi, PointOrder, ArcAngle)
*         gen_contour_polygon_xld (Contour, ResultRow, ResultColumn)
  
*      distance_pc (Contour, ModelRow, ModelColumn, DistanceMin1, DistanceMax1)
     dim_cali:=Radius2*2*cali
     if(dim_cali >calic_max or dim_cali <calic_min)
          a:=4
      endif
      gen_empty_obj (line1)
      gen_empty_obj (line2)
      Distance_max:=0
       for i:=0 to Number-1 by 1
       angle_lx (RowCenter, ColCenter, ResultRow, ResultColumn, Angle)  
       point_y:=RowCenter-Radius2*sin(Angle)
       point_x:=ColCenter+Radius2*cos(Angle)
       line_y:=[]
       line_x:=[]
       line_y:=[ResultRow,point_y]
       line_x:=[ResultColumn,point_x]
       gen_contour_polygon_xld (line_1, line_y, line_x)
       distance_pp (ResultRow, ResultColumn, point_y, point_x, Distance)
       Distance2:=Distance*cali
       if(Distance2>ds_li)
         concat_obj (line1, line_1, line1)  
       else
        concat_obj (line2, line_1, line2)    
       endif
       if(Distance_max<Distance2)
         Distance_max:=Distance2  
       endif
      
       endfor
       count_obj (line1, Number2)
        if(Number2>5)
            a:=5
        endif
     else
      a:=2
  endif
endif
这两个都不稳定不理想求新思路
[hty101于2020-09-15 13:48编辑了帖子]
喜欢0

最新打赏:0人

雾里看花AAA
技术员
技术员
  • 最后登录2020-09-19
  • 发帖数136
  • 金币880枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
沙发#
发布于:2020-09-15 09:14
好眼熟的产品,,,,,,,,
入门小学生
初学者
初学者
  • 最后登录2020-09-19
  • 发帖数49
  • 金币18枚
  • 贡献勋章0枚
板凳#
发布于:2020-09-15 10:20
好眼熟的产品,,,,,,,,
hty101
工程师
工程师
  • 最后登录2020-09-19
  • 发帖数80
  • 金币2899枚
  • 贡献勋章0枚
  • 社区居民
地板#
发布于:2020-09-15 11:33
雾里看花AAA:好眼熟的产品,,,,,,,,回到原帖
你是如何处理的,求思路
回忆里的小时候
技术员
技术员
  • 最后登录2020-09-17
  • 发帖数46
  • 金币143枚
  • 贡献勋章0枚
  • 社区居民
4楼#
发布于:2020-09-15 11:48
好眼熟的产品,,,,,,,,
WEIGUIJIN
初学者
初学者
  • 最后登录2020-09-19
  • 发帖数168
  • 金币46枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
5楼#
发布于:2020-09-15 12:14
学习学习~~~~~~~~~~~~~~~~~~~~
cwhcwh
技术员
技术员
  • 最后登录2020-09-18
  • 发帖数401
  • 金币277枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
6楼#
发布于:2020-09-15 12:39
学习学习~~~~学习学习~~~~
qq1004106926
技术员
技术员
  • 最后登录2020-09-15
  • 发帖数22
  • 金币205枚
  • 贡献勋章0枚
7楼#
发布于:2020-09-15 13:11
特征啊,,,,,,,,
hty101
工程师
工程师
  • 最后登录2020-09-19
  • 发帖数80
  • 金币2899枚
  • 贡献勋章0枚
  • 社区居民
8楼#
发布于:2020-09-15 13:44
qq1004106926:特征啊,,,,,,,,回到原帖
测尺寸和圆度如何测
ch_hym
工程师
工程师
  • 最后登录2020-09-16
  • 发帖数711
  • 金币3692枚
  • 贡献勋章0枚
  • 社区居民
  • 原创写手
9楼#
发布于:2020-09-15 15:48
相机不垂直,有角度,测出来本来就不是一个圆
ch_hym
工程师
工程师
  • 最后登录2020-09-16
  • 发帖数711
  • 金币3692枚
  • 贡献勋章0枚
  • 社区居民
  • 原创写手
10楼#
发布于:2020-09-15 15:53
dev_update_off ()
read_image (Image, 'D:/360安全浏览器下载/13_22465_65f4e11d09706c3.bmp')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
dev_display (Image)
rgb1_to_gray (Image, GrayImage)
mean_image (GrayImage, ImageMean, 55, 55)
dyn_threshold (GrayImage, ImageMean, RegionDynThresh, 35, 'light')
connection (RegionDynThresh, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'max_diameter', 'and', 283.94, 332.57)
fill_up (SelectedRegions, RegionFillUp)
opening_circle (RegionFillUp, RegionOpening, 3.5)
union1 (RegionOpening, RegionUnion)
shape_trans (RegionUnion, RegionTrans, 'outer_circle')
difference (RegionTrans, RegionUnion, RegionDifference)
opening_circle (RegionDifference, RegionOpening1, 200)
shape_trans (RegionOpening1, RegionTrans1, 'outer_circle')
hty101
工程师
工程师
  • 最后登录2020-09-19
  • 发帖数80
  • 金币2899枚
  • 贡献勋章0枚
  • 社区居民
11楼#
发布于:2020-09-15 17:05
ch_hym:dev_update_off ()
read_image (Image, 'D:/360安全浏览器下载/13_22465_65f4e11d09706c3.bmp')
get_image_size (Image, Width, Height)...
回到原帖
谢谢
hty101
工程师
工程师
  • 最后登录2020-09-19
  • 发帖数80
  • 金币2899枚
  • 贡献勋章0枚
  • 社区居民
12楼#
发布于:2020-09-15 17:11
请问打光 ,各夹具方面有什么好的建议.
谢谢
RenorJ
技术员
技术员
  • 最后登录2020-09-18
  • 发帖数79
  • 金币268枚
  • 贡献勋章0枚
  • 社区居民
13楼#
发布于:2020-09-15 19:56
先矫正下畸变,然后拟合会稳定一点
hero12000
技术员
技术员
  • 最后登录2020-09-19
  • 发帖数401
  • 金币160枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
14楼#
发布于:2020-09-16 08:39
好眼熟的产品,,,,,,,,
上一页
游客

返回顶部
支付

欢迎打赏,请选择打赏金额

  • 1元
  • 6元
  • 10元
  • 66元
  • 100元

支付即代表同意《本站支付协议》 有疑问请联系客服