ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Halcon在图像中截取N次Rectangle1或者Rectangle2并转正,处理后结果返回任何一层图像的处理方法

2021-08-28 12:02:40  阅读:224  来源: 互联网

标签:mat2d 截图 display hom domain dev Halcon 图像 Rectangle2


   这里在一张大图的基础上进行两次截取转正,并将最后截取的小截图处理结果分别仿射回前面的截图和原图上,以下为处理代码。

 1

dev_set_color ('#00ffff80')
read_image (Image1, '1.png')
hom_mat2d_identity (HomMat2DIdentity)


*第一层
gen_rectangle1 (ROI_0, 60.3445, 104.379, 1968.53, 2357.43)
reduce_domain (Image1, ROI_0, ImageReduced0)
crop_domain (ImageReduced0, ImagePart0)
hom_mat2d_translate (HomMat2DIdentity, -60.3445, -104.379, HomMat2DTranslate)
dev_clear_window ()
dev_display (ImagePart0)


 


*第二层
gen_rectangle1 (ROI_1, 205.954, 18.8135, 1799.63, 2211.46)
reduce_domain (ImagePart0, ROI_1, ImageReduced1)
crop_domain (ImageReduced1, ImagePart1)
hom_mat2d_translate (HomMat2DTranslate,-205.954, -18.8135, HomMat2DTranslate2)
dev_clear_window ()
dev_display (ImagePart1)


* threshold (ImagePart1, RegionSecond, 128, 255)
* hom_mat2d_invert (HomMat2DTranslate2, HomMat2DInvert)
* affine_trans_region (RegionSecond, RegionAffineTrans1, HomMat2DInvert, 'nearest_neighbor')



*第三层
gen_rectangle2 (ROI_2, 1142.62, 1067.04, rad(-1.27898), 766.416, 62.5084)
reduce_domain (ImagePart1, ROI_2, ImageReduced2)


hom_mat2d_rotate (HomMat2DTranslate2, rad(1.27898), 1142.62, 1067.04, HomMat2DRotate)
hom_mat2d_translate (HomMat2DRotate, 62.5084 - 1142.62, 766.416 - 1067.04, HomMat2DTranslate3)


 


*输出截图
threshold (ImageReduced2, Region, 0, 255)
hom_mat2d_rotate (HomMat2DIdentity, rad(1.27898), 1142.62, 1067.04, HomMat2DRotate1)
affine_trans_image (ImageReduced2, ImageAffineTrans, HomMat2DRotate1, 'constant', 'false')
affine_trans_region (Region, RegionAffineTrans, HomMat2DRotate1, 'nearest_neighbor')
reduce_domain (ImageAffineTrans, RegionAffineTrans, ImageReducedTarget)
crop_domain (ImageReducedTarget, ImagePartTarget)
threshold (ImagePartTarget, RegionTarget, 128, 255)
dev_clear_window ()
dev_display (ImagePartTarget)
dev_display (RegionTarget)
stop ()



*返回第一层
hom_mat2d_invert (HomMat2DTranslate3, HomMat2DInvertFirst)
affine_trans_region (RegionTarget, RegionAffFirst, HomMat2DInvertFirst, 'nearest_neighbor')
dev_clear_window ()
dev_display (Image1)
dev_display (RegionAffFirst)
stop ()


 


*经测试,hom_mat2d_compose确实存在精度损失
* hom_mat2d_compose (HomMat2DInvertFirst, HomMat2DTranslate2, HomMat2DCompose)
* affine_trans_region (RegionTarget, RegionAffSecond, HomMat2DCompose, 'nearest_neighbor')
affine_trans_region (RegionAffFirst, RegionAffSecond, HomMat2DTranslate2, 'nearest_neighbor')
dev_clear_window ()
dev_display (ImagePart1)
dev_display (RegionAffSecond)
stop ()




 

第一层截图

第二层截图并转正(在第一层截图的基础上截取)

 

 最后小截图处理结果

返回原图

 

 返回第一次截图

 

 

 

 


 

 

 

   其实就是在每一次截图的时候计算截取过程中产生的矩阵,即一个旋转和平移,如果截取的是一个Rectangle1正矩形,那么就只有平移,这个平移量其实就是Rectangle1左上角的的行列坐标,很容易计算。

  对于Rectangle2,平移和转正前他的角度和中心坐标是已知的,平移后他的中心行坐标为Length2,中心列坐标为Length1,角度为0,那么通过这6个值就可以计算得到矩阵。

  得到的矩阵是原图像空间到截图空间的仿射,最后在截图空间得到的处理结果还需返回到想要的图像空间上,那么只要得到这个逆矩阵即可,根据每次截图产生的矩阵,可以直接通过Halcon中现有的求逆矩阵

算子得到逆矩阵,便可将处理结果返回原图。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:mat2d,截图,display,hom,domain,dev,Halcon,图像,Rectangle2
来源: https://www.cnblogs.com/Nq1996/p/15196434.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有