从获取的图像进行图形匹配

******ModelMatching.hdev*********
dev_close_window()
dev_update_off()
       
*open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'MV Stream Video Capture No.01', 0, -1, AcqHandle)
*grab_image_start (AcqHandle, -1)
*for i := 1 to 15 by 1
 *   grab_image_async (Image, AcqHandle, -1)
*    write_image (Image, 'tiff', 0, 'E:/HalconTest/CCDImageAcqusition/'+i$'02d')
   * wait_seconds(2)
*endfor
*close_framegrabber (AcqHandle)
read_image (Image1, 'E:/HalconTest/CCDImageAcqusition/01.tif')
get_image_size (Image1, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
get_system ('operating_system', OS)
if (OS{0:2} = 'Win')
    set_font (WindowHandle, '-Courier New-18-*-*-*-*-')
else
    set_font (WindowHandle, '-adobe-courier-bold-r-normal--25-*-*-*-*-*-*-*')
endif
dev_display (Image1)
threshold (Image1, Region, 210, 255)
*将域中的漏洞全部都补上
fill_up (Region, RegionFillUp)
* 变换一个区域的形状,用convex模式变换,将其变换成整个凸出的填充完整形状。
shape_trans (RegionFillUp, RegionTrans, 'convex')
* 将变换得到的RegionTrans区域扩大8.5边缘,并倒圆角
dilation_circle (RegionTrans, RegionDilation, 3.5)
*得到图像的中心位置
area_center (RegionDilation, Area, Row, Column)
* 减少图像域
reduce_domain (Image1, RegionTrans, ImageReduced)
*创建形状模型
create_shape_model (ImageReduced, 'auto', 90, 270, 'auto', 'auto', 'ignore_color_polarity', 'auto', 'auto', ModelID)
get_shape_model_params (ModelID, NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Metric, MinContrast)
*监视形状模型参数是否合适
inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, 40)
*设置轮廓的中心,要不然轮廓中心会是(0,0)
*set_shape_model_origin (ModelID, Row, Column)
*获得形状模板轮廓
gen_contours_skeleton_xld (ModelRegions, Contours, 1, 'filter')
*dev_clear_window()
*dev_display (ModelImages)
*dev_display(Contours)
*get_shape_model_contours (ModelContours1, ModelID, 1)  这个怎么用 ?
*gen_contours_skeleton_xld
* dev_display(Image1)
*dev_display (ModelContours)
*打开图像开始进行匹配
read_image (Image1, 'E:/HalconTest/CCDImageAcqusition/02.tif')
 *在图像里找到对于形状模型的最佳匹配,获取匹配图案的行,列,角,分数
find_shape_model (Image1, ModelID, 90, 270, 0.5, 1, 0.5, 'least_squares_high', 0, 0.9, Row1, Column1, Angle, Score)
if(|Score|=1)
     * 从点和角度方面计算一个严格的仿射变换
    vector_angle_to_rigid (Row1, Column1, Angle, Row, Column, 0, HomMat2D)
    * 把任意仿射2D变换应用在图像中。
    affine_trans_image (Image1, ImageAffinTrans, HomMat2D, 'constant', 'false')
   * dev_display(Image1)
    dev_display (ImageAffinTrans)
    dev_display(Contours)
endif


这次代码调试出现的主要问题是在定义反射变换的时候里面的参数没有搞清楚,回去要好好搞清楚
这次没有解决的问题就是获得的边缘没有连续
另外这个inspect_shape_model 检验创建模型条件非常有用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值