1.本发明属于航空制造件数控加工程编特征识别领域,具体涉及一种航空制造件全角度投影图像面片属性融合分析方法。
背景技术:2.框梁结构的航空件整个制造过程,依赖于高精度的数控加工机床完成,机床要实现整个加工流程刀轨数据是实现准确加工的基础。在该大背景下,设计合理的手段获取航空制造件需要的刀轨数据则成为了零件加工工作的重点及核心。现今在行业内刀轨数据的生成方式,主要基于手工点选实现,行业类常见的软件包含solidworks、catia、ug。实现的方式为,在软件中手动选择一组由驱动面加引导面组成的特征,设定相应的加工刀轨信息,比如行程、转速、进给量等进一步处理即可得到刀轨数据。
3.对于航空领域常见的框、梁结构特征面或称为特征面片主要包含腹板、圆角、底角、筋顶、侧壁等,在航空制造领域腹板与筋顶通常被视为驱动面,底角是圆形刀具自动生成的面,而圆角与侧壁被视为引导面。数控加工主要采用减材的方式实现制造,当然也包含增材制造方式比如3d金属打印,3d打印通常不能满足航空件要性能要求,主要还是减材的制造方式。因此对于框、梁结构件要在毛坯上铣削出特定的构型,对于三维图像中的面片属性的判断显得尤为重要。
4.在行业内面片属性判断主要依靠熟练的工艺师手动选择加工特征,然而手动的选择加工面的缺点也较为明显,即对于具有较多面片的零件需要手动的点选所有特征面效率较低,不能满足自动化、高效率以及低成本的需要,提升特征面片的准确选择效率是工作的核心。
5.因此,为实现自动化程编高效的需要,同时减少在零件程编中人为的介入,如何准确的判断面片属性则尤为关键,也是行业亟待解决的问题。在该大背景下,设计了一种能实现航空件三维投影图像面片自动识别的方法,同时融合了多视角二维投影图像结果有利的保证了识别的完整性与准确性。
技术实现要素:6.为航空领域自动化程编亟待解决的面片特征识别问题提供有效参考方案,减少在零件程编中人为介入耗时的问题,本发明公开了一种航空制造件全角度投影图像面片属性融合分析方法。
7.本发明通过以下技术方案实现:
8.一种航空制造件全角度投影图像面片属性融合分析方法,包括如下步骤,
9.在三维建模软件catia中导入设计好的格式为.catpart待加工零件三维模型图,基于catia三维模型获取零件所有的组成面片。
10.根据随机规则对所有的面片进行编号,面片编号从1开始递增。基于编号构建索引表,索引表的每一行由对应的面片编号及其属性组成。索引表中每一行的第一列为对应的
面片编号,第二列为面片对应的红色灰度信息hr(x,y),第三列为面片对应的绿色灰度信息hg(x,y),第四列为面片对应的蓝色灰度信息hb(x,y),第五列为面片对应的尺寸大小size
slice
。初始的所有面片的不同颜色空间的灰度信息对应值全为255。
11.基于编号对索引表中的所有面片进行上色,上色的方式为:索引表中第一行面片对应的初始红色、绿色、蓝色赋值方式分别为hr(x,y)=0、hg(x,y)=125、hb(x,y)=15。第二行对应面片的红色、绿色、蓝色赋值方式分别为hr(x,y)=0、hg(x,y)=125、hb(x,y)=35,第三行对应面片的红色、绿色、蓝色赋值方式分别为hr(x,y)=0、hg(x,y)=125、hb(x,y)=55,依次递增当hb(x,y)》255时hg(x,y)+25同时hb(x,y)=hb(x,y)%255,依次递增当hg(x,y)》255时hr(x,y)+30同时hg(x,y)=hg(x,y)%255。
12.在索引表中对应的第n行面片灰度值可用如下递推式子表示:
[0013][0014]
其中,timesr、timesg、timesb分别表示面片红色、绿色、蓝色通道对应倍增数,对应的初始值均为0。
[0015]
由索引表中不同行面片对应的灰度值,完成三维图像中所有的面片上色步骤。
[0016]
在catia软件中设置背景与零件三维图像轮廓线条的显示参数,在catia软件的左侧导航栏中选择“零件几何体”,然后选择“属性”与“图像”,“填充”栏中的颜色设置为0、0、0,“边线”栏中的颜色为黑色对应的“线型”为1、“线宽”为2:0.8mm,“直线和曲线”栏中设置“颜色”为黑色、对应“线型”为1、“线宽”为2:0.5mm,隐藏三维图像中的所有点。在“菜单栏”中选中“视图”、“照明”,在打开的“光源”窗口中选择“无光”,对应的“散射”、“反射”、“漫射”参数数值均为1.00。
[0017]
基于catia二次开发功能,设计零件全角度投影图像截屏工具获取不同视角的图像,并对图形进行保存,对应的图片格式为无损压缩的.png格式。
[0018]
设定零件包围球以经线与纬线对应交点坐标的截图视点。截屏工具中的参数设置为:截图放大倍率为2、初始任意经线位置为本初子午线、东经与西经范围0-180
°
、北纬与南纬范围0-180
°
以10
°
为间隔对应坐标点截取图像。
[0019]
在“选择图片存储路径”选择“e:\11.所有项目数据集\5.快速程编\2021.12.30”,在“选择图片存储格式”中选择“.png”格式保存图像,“其他参数设置”中的“经度范围”、“纬度范围”、“缩放倍率”、“间隔分度”分别为360、360、2、10,点击“开始”获取图像。
[0020]
定义像素信息保存字典dictionary,字典中的数据用容器进行保存,用于保存满足不同灰度差异的像素点灰度数值及其坐标值。容器vector对应的储存类型为结构体
struct,结构体的变量包含整形数组用于评价对应像素点所属灰度类别,数组的大小设为207406,数组中所有元素数值初始化全为1。
[0021]
数组下标与对应数值标识关系,可用如下式子进行表示:
[0022]
array
location
=[hr(x,y)+11]*256+[hg(x,y)+14]*257+[hb(x,y)+17]*258
ꢀꢀꢀꢀ
(2)
[0023][0024]
array initializating
→
array[0-207406]={1}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)
[0025]
flag based
→
array[array
location
]=2
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0026]
其中,array
location
表示基于灰度值生成的数组坐标位置;array[array
location
]表示满足关系的数组对应位置。
[0027]
在结构体中再定义一个容器vector用于储存满足相同灰度像素点的坐标poi nt(i,j),即在结构体中包含了两个整形变量row与col分别储存满足关系像素点的行坐标值与列坐标值。
[0028]
获取字典中以灰度为key保存的具有相同灰度像素点的坐标pixel(x,y),基于坐标信息在同原始图像等尺寸的新建图像中绘制出这些满足关系的区域。
[0029]
由opencv新建图像new_image,图像的填充的r、g、b灰度值为124、251、164。new_image中满足key不为1数学关系的像素点对应区域的颜色全变换为200、121、196。即在new_image中对满足key的像素点所在的区域处理成相同的灰度值。
[0030]
基于0阈值循环处理的方式new_image进行二值化,二值化式子为:
[0031][0032]
其中,new_cols和new_rows分别表示new_image的图像的行数与列数;h
r-n
(x,y)、h
g-n
(x,y)、h
b-n
(x,y)分别表示new_image中红色、绿色、蓝色通道的在(x,y)点处对应的灰度值;h
0-1
(x,y)表示二值图像中在(x,y)出对应的灰度值。
[0033]
获取二值图像的高频轮廓线。对二值图像new_image
0-1
进行备份得到new_i mage1
0-1
,对原二值图像的new_image
0-1
进行高灰度区域4邻域缩放操作得到ne w_image2
0-1
,new_image1
0-1
与new_image2
0-1
进行作差得到高频轮廓线。
[0034]
高灰度区域4邻域缩放操作式子为:
[0035]
org(x,y)-kernel
four
={min
→
result(x+x
′
,y+y
′
)(x
′
,y
′
):kernel
four
(x
′
,y
′
)≠0}
ꢀꢀꢀꢀ
(6)
[0036]
其中,org(x,y)表示待缩放图像new_image
0-1
;kernel
four
表示4邻域缩放因子;re sult(x,y)表示图像中在(x,y)位置处理后的像素值。
[0037]
对应像素位置点灰度值作差方式为:
[0038][0039]
其中,h
n-1
(x,y)与h
n-2
(x,y)分别表示单通道原始二值图像与缩放后的图像在(x,y)处的灰度值;result(x,y)表示计算后得到的含有高频轮廓线结果。
[0040]
图像0倾角最小包围矩形区域的计算,采用循环遍历的方式获取高频轮廓线在x与y轴上投影点的极值x
min
、x
max
、y
min
、y
max
,在图像中对应的极值点即为0倾角最小包围矩形区域顶点,在图像中对应高频轮廓线上的点灰度值应满足result(x,y)=255。
[0041]
根据获取的0倾角最小包围矩形区域坐标截取new_image中图像,保证零件三维模型在二维图像中的面片构成独立的分析元素。
[0042]
为截取的图像中重新给前景区域3通道赋值,对应的赋值方式为:r通道灰度值为221、g通道的灰度值为169、b通道的灰度值为15。
[0043]
图像面片各个通道进行灰度变换后基于索引编号进行面片属性分类保存,以变换后的图像作为深度学习样本图像。
[0044]
样本图像进行分类,包含了侧壁、腹板、圆角、筋顶、底角以及其他共6类,各类样本的数量趋近于1:1:1:1:1:1的数值关系。同时为了保证模型较好的泛化能力同一类别面片的数量要尽可能的多并具有不同的特征表现。
[0045]
设计任意角度随机旋转(0
°‑
360
°
范围,基于时间生成的随机数number%360得到具体的取值)、左右对称、上下对称、图像沿长cols与宽rows等比例缩放(0.7-1.2)的增强方式随机的从中选择1种或是多种进行增强,种数的选择方式为nums=random(time)%4得到。
[0046]
6类特征面片的数量经增强后趋近于1:1的关系,侧壁、腹板、圆角、筋顶、底角以及其他数量分别为6412:5861:6384:6435:6024:6862。
[0047]
设计面片类别划分的深度学习分类网络,并对训练数据与测试数据进行预处理变换。
[0048]
构建以resnet50为特征提取的基础网络、训练时设计的batch_size=5、num_class=6、num_workers=0、train_dataset的shuffle=true、validate_dataset的shuffle=false、loss_function=nn.crossentropyloss()、optimizer=optim.adam(net.parameters(),lr=0.0001)、初始best_accuracy=0.0、训练的epoch=106、使用softmax为分类器、训练时网络使用net.train()模式修改网络的权重参数、测试时网络使用net.eval()模式使网络的模型参数保持不变。
[0049]
训练过程对每一个epoch对应的准确率accuracy、损失loss、网络更新后的参数进行保存(权重为.pth格式)。准确率accuracy、损失loss保持在result.log文件中。
[0050]
训练完成后获取result.log文件中训练损失最小同时测试样本损失最小对应epoch保存的网络模型参数,基于该epoch对应的参数对网络进行初始化。
[0051]
待分析图像采用同训练样本相同的前处理方式得到,获取的面片填充灰度与训练样本对应的区域灰度保持一致。
[0052]
对预测面片图像数据的初始化,网络设置为model.eval()模式,model.load_state_dict(torch.load("最优权重文件"))进行模型的加载,output=torch.squeeze(model(img))得到预测的结果,使用predict=torch.softmax(output,dim=0)得到概率最大的类别。
[0053]
由pil库中的image函数批量读取待判断的图像img=image.open(path_all),数据转化img=data_transform(img),img=torch.unsqueeze(img,dim=0),再输入模型根据softmax即可得到最后识别的类别数据,对应的数据为结果1。
[0054]
批处理预测不同视角下的图像并得到结果数据,结果保持在字典中。最后将字典中相同面片在不同视角识别的结果进行融合,并基于投票法得到更准确的面片类别信息数据,对应的数据为结果2。
[0055]
将投票后得到的类别结果即为对应面片最后的识别判断结果,以该数据为零件三维图像中面片属性的类别信息。
[0056]
本技术的优点在于:
[0057]
本发明实现了基于全角度投影图像对航空制造件面片属性的融合判断,相比于单一视角下的判断结果由于本方法融合了多视角二维投影图像结果可大幅提升面片识别的准确率,为航空领域内自动化程编亟待解决的面片特征识别问题提供了一种有效参考方案,减少了在零件程编中人为介入耗时的问题,对航空领域高效、智能化、产业制造升级具有重要意义。
附图说明
[0058]
图1为一种航空制造件全角度投影图像面片属性融合分析方法核心步骤。
[0059]
图2为基于catia零件面片索引表数据储存格式。
[0060]
图3为零件三维图像面片灰度随机赋值效果。
[0061]
图4为开发的零件全角度自动截屏工具界面。
[0062]
图5为基于自动化截屏工具获取的零件全角度图像。
[0063]
图6为new_image中满足key的像素点所在的区域处理成相同的灰度值效果。
[0064]
图7、图8、图9为4邻域缩放因子图像。
[0065]
图10为计算后得到的含有高频轮廓线的结果图像。
[0066]
图11为采用循环遍历的方式获取高频轮廓线的极值点。
[0067]
图12为在new_image中截取的0倾角最小包围矩形区域图像。
[0068]
图13为设计的特征提取网络结构参数。
[0069]
图14为在字典中不同面片数据融合结果表示。
具体实施方式
[0070]
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是为了解释本发明而非对本发明的限定。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0071]
本发明的软件系统基于windows7系统64位实现,处理器为工作站级别的inter xeon w-2223 3.60ghz,运行内存容量为32gb,内存频率为3200mhz,设计的深度学习模型使用的显卡型号为p2200(品牌为nvidia显存容量5gb),nvidia显卡驱动版本号为441.66,深度学习计算cuda核心对应的版本为10.2,硬盘容量为256gb(固态硬盘)。软件开发平台基于visual studio 2017release x64,编程语言包含了c++与python,对应的航空制造件三维建模与刀轨生成软件为catia对应版本号为v5.21,使用的图像处理库为opencv4.5.2,深度学习平台基于pytorch框架,python版本号为3.7.1,pytorch版本为1.5.0,torchvision版本为0.6.0,样本标注工具为labelimg,矩阵运算工具库numpy版本为1.21.4,wheel版本为0.32.3,tqdm版本号为4.28.1,scipy版本号为1.1.0,sdk版本为10.0.22000.0。一种航空制造件全角度投影图像面片属性融合分析方法核心步骤,如图1所示。
[0072]
1.向catia中导入设计好的格式为.catpart待加工零件三维模型图,基于catia三
维模型获取零件所有的组成面片slices。
[0073]
2.基于随机的规则对所有的面片进行编号,编号的顺序从1开始。由编号构建索引表,索引表的每一行由对应的面片编号及其属性组成。索引表中每一行的第一列为对应的面片编号,第二列为面片对应的红色灰度信息hr(x,y),第三列为面片对应的绿色灰度信息hg(x,y),第四列为面片对应的蓝色灰度信息hb(x,y),第五列为面片对应的尺寸大小size
slice
。初始的所有面片的不同颜色空间的灰度信息对应值全为255。基于catia零件面片索引表数据储存格式,如图2所示。
[0074]
3.对索引表中的所有面片进行上色,索引表中第一行面片对应的初始红色、绿色、蓝色赋值方式分别为hr(x,y)=0、hg(x,y)=125、hb(x,y)=15。第二行对应面片的红色、绿色、蓝色赋值方式分别为hr(x,y)=0、hg(x,y)=125、hb(x,y)=35,第三行对应面片的红色、绿色、蓝色赋值方式分别为hr(x,y)=0、hg(x,y)=125、hb(x,y)=55,依次递增当hb(x,y)》255时hg(x,y)+25同时hb(x,y)=hb(x,y)%255,依次递增当hg(x,y)》255时hr(x,y)+30同时hg(x,y)=hg(x,y)%255,即在索引表中对应的第n行面片灰度值可用如下递推式子表示:
[0075][0076]
其中,timesr、timesg、timesb分别表示面片红色、绿色、蓝色通道对应倍增数,对应的初始值均为0。
[0077]
4.基于索引表中不同行面片对应的灰度值,完成三维图像中所有的面片上色步骤。基于索引表中的灰度索引规则可以保证每一面的灰度值皆不相同。零件三维图像面片灰度随机赋值效果,如图3所示。
[0078]
5.在catia软件中设置背景与零件三维图像轮廓线条的显示参数。显示参数的设置方式为在catia软件的左侧导航栏中选择“零件几何体”,然后选择“属性”与“图像”,“填充”栏中的颜色设置为0、0、0,“边线”栏中的颜色为黑色对应的“线型”为1、“线宽”为2:0.8mm,“直线和曲线”栏中设置“颜色”为黑色、对应“线型”为1、“线宽”为2:0.5mm,隐藏三维图像中的所有点。在“菜单栏”中选中“视图”、“照明”,在打开的“光源”窗口中选择“无光”,对应的“散射”、“反射”、“漫射”参数数值均为1.00。
[0079]
6.基于catia二次开发功能,设计零件全角度投影图像截屏工具,使用catia.activewindow.activeviewer.viewpoint3d.putorigin op,catia.activewindow.activeviewer.viewpoint3d.putupdirection xpcatia.activewindow.activeviewer.viewpoint3d.putsightdirection zp代码获取不同视角的图像,'catia.activewindow.activeviewer.capturetofile catcaptureformatjpeg,"c:\\part\\"+str(num)+".png"对图形进行保
存,对应的图片格式为无损压缩的.png格式。开发的零件全角度自动截屏工具界面,如图4所示。
[0080]
7.设定零件包围球以经线与纬线对应交点坐标的截图视点。截图放大倍率为2、初始任意经线位置为本初子午线、东经与西经范围0
°‑
180
°
、北纬与南纬范围0
°‑
180
°
以10
°
为间隔对应坐标点截取图像。
[0081]
8.在“选择图片存储路径”选择“e:\11.所有项目数据集\5.快速程编\2021.12.30”,在“选择图片存储格式”中选择“.png”格式保存图像,“其他参数设置”中的“经度范围”、“纬度范围”、“缩放倍率”、“间隔分度”分别为360、360、2、10,点击“开始”即可得到不同视角下零件在屏幕方向的投影图像。基于自动化截屏工具获取的零件全角度图像,如图5所示。
[0082]
9.定义由c++编程语言实现的像素信息字典dictionary,字典中的数据用容器进行保存用于保存满足不同灰度差异的像素点灰度数值及其坐标值。容器vector对应的储存类型为结构体struct,结构体的变量包含整形数组用于评价对应像素点所属灰度类别,数组的大小设为207406,数组中所有元素数值初始化全为1。整形数组的下标及其对应的元素构成key。数组下标与对应数值标识关系,可用如下式子进行表示:
[0083]
array
location
=[hr(x,y)+11]*256+[hg(x,y)+14]*257+[hb(x,y)+17]*258
ꢀꢀꢀ
(2)
[0084][0085]
array initializating
→
array[0-207406]={1}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)
[0086]
flag based
→
array[array
location
]=2
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0087]
其中,array
location
表示基于灰度值生成的数组坐标位置;array[array
location
]表示满足关系的数组对应位置。
[0088]
10.在上述步骤中的结构体中再定义一个容器vector用于储存满足相同灰度像素点的坐标point(i,j),即容器的储存类型也为结构体,在结构体中包含了两个整形变量row与col分别储存满足关系像素点的行坐标值与列坐标值。
[0089]
11.具体实现代码为:储存像素点坐标的结构体为struct location{int i;int j;},储存满足灰度关系的像素点结构体为struct vechead{int vec_int;int length;vec3b vec;int cha[207406]={1};vector《location》locationarray;}。为了实现加速计算优化后的代码为:for(int i=0;i《img.size[0];i++){for(intj=0;j《img.size[1];j++){if(img.at《vec3b》(i,j)[0]==255&&img.at《vec3b》(i,j)[1]==255&&img.at《vec3b》(i,j)[2]==255)continue;if(img.at《vec3b》(i,j)[0]==0&&img.at《vec3b》(i,j)[1]==0&&img.at《vec3b》(i,j)[2]==0)continue;vec3b vc3=img.at《vec3b》(i,j);int vec_int=vc3[0]*256+vc3[1]*257+vc3[2]*258;//flag int length,first=0;for(int k=0;k《all_location_info.size();k++){//if(all_location_info[k].vec_int==vec_int)if(all_location_info[k].cha[vec_int]==2){all_location_info[k].length+=1;//2及后录入长度+1location loc;loc.row=i;loc.col=j;all_location_info[k].locationarray.push_back(loc);first=1;break;}}if(first==0){vechead head;head.length=1;//首个录入长度为1,head.vec=vc3;//图像位置信息head.cha[vec_int]=2;//int te=vc3[1];std::cout《《"输出第"《《num《《"个不同灰度"《《vc3《《endl;num++;head.vec_int=vec_int;location loc;loc.row=i;loc.col=j;
head.locationarray.push_back(loc);all_location_info.push_back(head);}cout《《"["《《img.at《vec3b》(i,j)《《vc3[0]《《"]";}。
[0090]
12.在提取不同像素点对应灰度值时,读取的图片格式为.png,图片对应的矩阵缩放会影响像素点个数统计数值number
gray
、像素级灰度差异数值grayr、g、b、像素点坐标偏差point(x,y),因此应严格统一图像矩阵的尺度。
[0091]
13.获取字典中以灰度为key保存的具有相同灰度像素点的坐标pixel(x,y),基于坐标信息在同原始图像等尺寸的新建图像中绘制出这些满足关系的区域,由opencv新建图像的方式为mat new_image(org.rows,org.cols,cv_8uc3,scal ar(124,251,164)),其中mat为图像数据的储存格式;org表示原始图像;cv_8uc3表示图像为8位3通道;scalar表示填充的颜色信息,填充的r、g、b灰度值为124、251、164;new_image中满足key不为1数学关系的像素点对应区域的颜色全变换为200、121、196。即在new_image中对满足key的像素点所在的区域处理成相同的灰度值,效果如图6所示。
[0092]
14.采用0阈值循环处理的方式对获得的所有独立的彩色三通道new_image进行二值化,二值化式子为:
[0093][0094]
其中,new_cols和new_rows分别表示new_image的图像的行数与列数;h
r-n
(x,y)、h
g-n
(x,y)、h
b-n
(x,y)分别表示new_image中红色、绿色、蓝色通道的在(x,y)点处对应的灰度值;h
0-1
(x,y)表示二值图像中在(x,y)出对应的灰度值。
[0095]
15.基于二值图像4邻域缩放图像差异获取图像的高频轮廓线区域。对二值图像new_image
0-1
进行备份得到new_image1
0-1
,对原二值图像的new_image
0-1
进行高灰度区域4邻域缩放操作得new_image2
0-1
,new_image1
0-1
与new_image2
0-1
进行对应像素位置点灰度值作差得到高频轮廓线。
[0096]
高灰度区域4邻域缩放操作式子为:
[0097]
org(x,y)-kernel
four
={min
→
result(x+x
′
,y+y
′
)(x
′
,y
′
):kernel
four
(x
′
,y
′
)≠0} (6)
[0098][0099]
其中,org(x,y)表示待缩放图像new_image
0-1
;kernel
four
表示4邻域缩放因子;result(x,y)表示图像中在(x,y)位置处理后的像素值。4邻域缩放因子,如图7-图9所示。
[0100]
对应像素位置点灰度值作差方式为:
[0101][0102]
其中,h
n-1
(x,y)与h
n-2
(x,y)分别表示单通道原始二值图像与缩放后的图像在(x,y)处的灰度值;result(x,y)表示计算后得到的含有高频轮廓线的结果,如图10所示。
[0103]
16.计算高频轮廓线图像0倾角最小包围矩形区域,结合图11进行说明,首先采用循环遍历的方式获取高频轮廓线在x与y轴上投影点的极值x
min
、x
max
、y
min
、y
max
,在图像中对应的极值点即为0倾角最小包围矩形区域顶点。图12中对应的x
min
与a
′
对应,x
max
与a
″″
对应,y
min
与b
′
对应,y
max
与b
″″″
对应,在图像中对应高频轮廓线上的点灰度值应满足result(x,y)=255。
[0104]
17.由获取的0倾角最小包围矩形区域坐标截取new_image中图像,保证零件三维模型在二维图像中的面片构成独立的分析元素,效果如图12所示。
[0105]
18.在截取的图像中重新给前景区域3通道赋值,对应的赋值方式为:r通道灰度值为221、g通道的灰度值为169、b通道的灰度值为15。
[0106]
19.对图像面片各个通道进行灰度变换后基于索引编号进行面片属性分类保存,以变换后的图像作为深度学习样本图像。
[0107]
20.将样本图像进行分类,主要包含了侧壁、腹板、圆角、筋顶、底角以及其他共6类。为了保证模型对每一类型皆表现出较好的识别效果,需保证各类的样本的数量趋近于1:1:1:1:1:1的数值关系。同时为了保证模型较好的泛化能力同一类别面片的数量要尽可能的多并具有不同的特征表现。
[0108]
21.采用任意角度随机旋转(0
°‑
360
°
范围,基于时间生成的随机数number%360得到具体的取值)、左右对称、上下对称、图像沿长cols与宽rows等比例缩放(0.7-1.2)的增强方式随机的从中选择1种或是多种进行增强,种数的选择方式为nums=random(time)%4得到。
[0109]
22.增强后6类特征面片的数量趋近于1:1的关系,侧壁、腹板、圆角、筋顶、底角以及其他数量分别为6412:5861:6384:6435:6024:6862。
[0110]
23.设计面片类别划分的深度学习分类网络,训练数据的预处理方式为transforms.compose([transforms.resize((228,228)),transforms.randomhorizontalflip(),transforms.totensor(),transforms.normalize([0.481,0.458,0.418],[0.211,0.238,0.227])])。
[0111]
24.测试数据的预处理方式为transforms.compose([transforms.resize((228,228)),transforms.totensor(),transforms.normalize([0.481,0.458,0.418],[0.211,0.238,0.227])])}。
[0112]
25.以resnet50为特征提取的基础网络(对应的网络结果如图11所示)、训练时设计的batch_size=5、num_class=6、num_workers=0、train_dataset的shuffle=true、validate_dataset的shuffle=false、loss_function=nn.crossentropyloss()、optimizer=optim.adam(net.parameters(),lr=0.0001)、初始best_accuracy=0.0、训练的epoch=106、使用softmax为分类器、训练时网络使用net.train()模式修改网络的权重参数、测试时网络使用net.eval()模式使网络的模型参数保持不变。
[0113]
26.迭代训练并对每一个epoch对应的准确率accuracy、损失loss、网络更新后的参数进行保存。准确率accuracy、损失loss保持在result.log文件中。
[0114]
27.读取result.log文件中训练损失最小同时测试样本损失最小对应epoch保存的网络模型参数,基于该epoch对应的参数对网络进行初始化。
[0115]
28.待分析图像采用同训练样本相同的前处理方式得到,获取的面片填充灰度与训练样本对应的区域灰度保持一致。
[0116]
29.对未知属性的面片图像数据的初始化方式为transforms.compose([transforms.resize((228,228)),transforms.totensor(),transforms.normalize([0.481,0.458,0.418],[0.211,0.238,0.227])])}。网络设置为model.eval()模式,model.load_state_dict(torch.load("最优权重文件"))进行模型的加载,output=
torch.squeeze(model(img))得到预测的结果,使用predict=torch.softmax(output,dim=0)得到概率最大的类别。
[0117]
30.使用pil库中的image函数批量读取待判断的图像img=image.open(path_all),数据转化img=data_transform(img),img=torch.unsqueeze(img,dim=0),再输入模型根据softmax即可得到最后识别的类别数据,对应的数据为结果1。
[0118]
31.批处理预测不同视角下的图像,并得到结果数据,结果保持在字典中。最后将字典中相同面片在不同视角识别的结果进行融合,并基于投票法得到更准确的面片类别信息数据,对应的数据为结果2。
[0119]
32.将投票后得到的类别即结果2保存到字典中,以该数据为零件三维图像中面片属性的类别信息。在字典中不同面片数据融合结果表示,如图14所示。