核酸管外观缺陷检测(二)

1.1应用示例思路

(1)创建分类器;

(2)向分类器中添加样本;

(3)训练分类器;

(4) 测试数据,并将检测结果写入txt文件中。

1.2 应用示例相关算子介绍

(1) create_class_mlp( : : NumInput, NumHidden, NumOutput, OutputFunction, Preprocessing, NumComponents, RandSeed : MLPHandle)

功能:create_class_mlp以多层感知器(MLP)的形式创建一个神经网络,它可以用于分类或回归(函数近似),具体取决于OutputFunction的设置方式。MLP由三层组成:具有NumInput个输入变量(神经元)的输入层,具有NumHidden个神经元的隐藏层和具有NumOutput个输出变量的输出层。

控制输入参数1:NumInput:MLP输入变量(特征)的个数;

控制输入参数2:NumHidden:MLP隐藏层神经元的个数;

控制输入参数3:NumOutput:MLP输出变量的个数(类别数);

控制输入参数4:OutputFunction:MLP输出层激活函数的类型,Default value: 'softmax';

控制输入参数5:Preprocessing:用于变换特征向量的预处理类型,Default value: 'normalization';

控制输入参数6:NumComponents:预处理参数:转换特征的数量(Preprocessing= 'none'和Preprocessing= 'normalization'时忽略),Default value: 10;

控制输入参数7:RandSeed:用随机值初始化MLP的随机数生成器的种子值;

控制输出参数:MLPHandle:MLP句柄。

(2) gen_cooc_matrix(Regions, Image : Matrix : LdGray, Direction : )

功能:从输入区域确定在某个方向(0,45,90,135度)上相邻灰度值(有序灰度值数对)出现的次数,并将其存储在位置(I,j)和(j, I)的共现矩阵中(矩阵是对称的),最后再缩放矩阵。

图形输入参数1:Regions:待检查的区域;

图形输入参数2:Image:灰度图像;

图形输出参数:Matrix:共生矩阵;

控制输入参数1:LdGray:灰度级数,Default value: 6;

控制输入参数2:Direction:相邻位置的方向,List of values: 0, 45, 90, 135。

(3) cooc_feature_matrix(CoocMatrix : : : Energy, Correlation, Homogeneity, Contrast)

功能:从共生矩阵中计算灰度值特征;从一个共生矩阵(CoocMatrix)中计算能量(energy)、相关性(correlation)、局部同质性(homogenous)和对比度(contrast)。

图形输入参数:CoocMatrix:输入的共生矩阵;

控制输入参数1:Energy(灰度值均匀性):表示灰度共生矩阵中的元素的平方和。能量越大,表示灰度变化比较稳定,反映了纹理变化变化的均匀程度。比如当像素值全部为1时,对应的共生矩阵中(1,1)有16个,其他为0,则能量为16*16,此时能量最大,灰度变化最稳定,因为都为0;

控制输入参数2:Correlation(灰度值的相关性):表示纹理在行或者列方向的相似程度。相关性越大,相似性越高;

控制输入参数3:Homogeneity(灰度值的局部均匀性):反映图像局部纹理的变化量。值越大,表示图像局部的变化越小。

控制输入参数4:Contrast(灰度值的对比度):表示矩阵的值的差异程度,也间接表现了图像的局部灰度变化幅度。对比度值越大,图像中的纹理深浅越明显,表示图像越清晰;反之,则表示图像越模糊;

(4) cooc_feature_image(Regions, Image : : LdGray, Direction : Energy, Correlation, Homogeneity, Contrast)

功能:计算共生矩阵并推导其灰度值特征。

图形输入参数1:Regions:待检查的区域;

图形输入参数2:Image:灰度图像;

控制输入参数1:LdGray:灰度级数,Default value: 6;

控制输入参数2:Direction:相邻位置的方向,List of values: 0, 45, 90, 135, 'mean';

控制输出参数1:Energy:灰度值均匀性;

控制输出参数2:Correlation:灰度值的相关性;

控制输出参数3:Homogeneity:灰度值的局部均匀性;

控制输出参数4:Contrast:灰度值的对比度

(5) sobel_amp(Image : EdgeAmplitude : FilterType, Size : )

功能:使用sobel(索贝尔)算子计算图像的一阶导数(幅值)进行边缘检测。

图形输入参数:Image:输入图像;

图形输出参数:EdgeAmplitude:边缘幅度图像;

控制输入参数1:FilterType:滤波器类型,Default value: 'sum_abs';

控制输入参数2:Size:滤波器mask尺寸大小,Default value: 3。

(6) gray_histo_abs(Regions, Image : : Quantization : AbsoluteHisto)

功能:计算灰度直方图。

图形输入参数1:Regions:要计算直方图的区域;

图形输入参数2:Image:待计算图像的灰度值分布;

控制输入参数:Quantization:灰度值的量化,Default value: 1.0;

控制输出参数:AbsoluteHisto:灰度值出现的频数。

(7) add_sample_class_mlp( : : MLPHandle, Features, Target : )

功能:向多层感知机的训练数据中添加一个训练样本。

控制输入参数1:MLPHandle:MLP句柄;

控制输入参数2:Features:待存储训练样本的特征向量;

控制输入参数3:Target:待存储训练样本的类或目标向量。

(8) train_class_mlp( : : MLPHandle, MaxIterations, WeightTolerance, ErrorTolerance : Error, ErrorLog)

功能:训练一个多层感知器。

控制输入参数1:MLPHandle:MLP句柄;

控制输入参数2:MaxIterations:优化算法的最大迭代次数;

控制输入参数3:WeightTolerance:在优化算法的两次迭代之间,MLP权值之差设置阈值,Default value: 1.0;

控制输入参数4:ErrorTolerance :在优化算法的两次迭代之间,MLP对训练数据的平均误差设置阈值,Default value: 0.01;

控制输出参数1:Error:MLP对训练数据的平均误差;

控制输出参数2:ErrorLog:MLP在训练数据上的平均误差作为优化算法迭代次数的函数。

(9) write_class_mlp( : : MLPHandle, FileName : )

功能:将训练好的多层感知器模型写入文件。

控制输入参数1:MLPHandle:MLP句柄;

控制输入参数2:FileName:待保存的文件名

(10) classify_class_mlp( : : MLPHandle, Features, Num : Class, Confidence)

功能:用多层感知器计算特征向量的类别。

控制输入参数1:MLPHandle:MLP句柄;

控制输入参数2:Features:特征向量;

控制输入参数3:Num:要确定的最佳类的数量,Default value: 1;

控制输出参数1:Class:用MLP对特征向量进行分类的结果;

控制输出参数2:Confidence:特征向量属于某一类别的置信度。

1.3 应用示例代码

*1、创建分类器
NumFeatures:=72  //输入特征的个数
NumHidden:=15    //隐藏层神经元个数
NumClasses:=2    //输出的类别数
create_class_mlp (NumFeatures, NumHidden, NumClasses, 'softmax', 'normalization', 10, 42, MLPHandle)
*2、添加样本 
*********************添加正样本******************************************
list_files ('./ok/', ['files','follow_links'], P_ImageFiles)
tuple_regexp_select (P_ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], P_ImageFiles)
for i := 0 to |P_ImageFiles| - 1 by 1read_image (Image, P_ImageFiles[i])  rgb1_to_gray (Image, GrayImage)threshold (GrayImage, Regions, 30, 145)connection (Regions, ConnectedRegions)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 500000, 800000)cooc_feature_image (SelectedRegions, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHistoEdgeAmplitude)FeaturesExtended:=[Energy, Correlation, Homogeneity, Contrast]FeaturesExtended:=[FeaturesExtended,AbsoluteHistoEdgeAmplitude]cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHistoEdgeAmplitude)FeaturesExtended1:=[FeaturesExtended,Energy, Correlation, Homogeneity, Contrast]FeaturesExtended1:=[FeaturesExtended1,AbsoluteHistoEdgeAmplitude]FeatureVector:=real(FeaturesExtended1) //实数化*添加正样本add_sample_class_mlp (MLPHandle, FeatureVector, 0)
endfor 
************************添加负样本****************************************   
list_files ('./ng1/', ['files','follow_links'], N_ImageFiles)
tuple_regexp_select (N_ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], N_ImageFiles)
for i := 0 to |N_ImageFiles| - 1 by 1read_image (Image, N_ImageFiles[i])  rgb1_to_gray (Image, GrayImage)threshold (GrayImage, Regions, 30, 145)connection (Regions, ConnectedRegions)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 500000, 800000)cooc_feature_image (SelectedRegions, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHistoEdgeAmplitude)FeaturesExtended:=[Energy, Correlation, Homogeneity, Contrast]FeaturesExtended:=[FeaturesExtended,AbsoluteHistoEdgeAmplitude]cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHistoEdgeAmplitude)FeaturesExtended1:=[FeaturesExtended,Energy, Correlation, Homogeneity, Contrast]FeaturesExtended1:=[FeaturesExtended1,AbsoluteHistoEdgeAmplitude]FeatureVector:=real(FeaturesExtended1) //实数化*添加负样本add_sample_class_mlp (MLPHandle, FeatureVector, 1)
endfor*3、训练分类器
train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog)
stop ()
write_class_mlp (MLPHandle, './HeSuanGuan.gmc')*4、测试数据
*统计核酸管外观正常的数组
P_Tuple:=[]
*统计核酸管外观缺陷的数组
N_Tuple:=[]
*判断文件是否存在
file_path:= './核酸管外观缺陷检测统计2.txt'
file_exists (file_path, file_exist)
if (file_exist==1)delete_file (file_path)
endif
open_file (file_path, 'output', FileHandle)
list_files ('./Test_img/', ['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 1img_path:=ImageFiles[Index]*文件名拆分parse_filename (img_path, BaseName, Extension, Directory)read_image (Image, img_path)   rgb1_to_gray(Image, GrayImage)threshold (GrayImage, Regions, 30, 145)connection (Regions, ConnectedRegions)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 500000, 800000)cooc_feature_image (SelectedRegions, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHistoEdgeAmplitude)FeaturesExtended := [Energy,Correlation,Homogeneity,Contrast]FeaturesExtended := [FeaturesExtended,AbsoluteHistoEdgeAmplitude]cooc_feature_image (Image, Image, 6, 90, Energy, Correlation, Homogeneity, Contrast)sobel_amp (Image, EdgeAmplitude, 'sum_abs', 3)gray_histo_abs (EdgeAmplitude, EdgeAmplitude, 8, AbsoluteHistoEdgeAmplitude)FeaturesExtended1 := [FeaturesExtended,Energy,Correlation,Homogeneity,Contrast]FeaturesExtended1 := [FeaturesExtended1,AbsoluteHistoEdgeAmplitude]FeatureVector := real(FeaturesExtended1)classify_class_mlp (MLPHandle, FeatureVector, 1, FoundClassIDs, k)if(FoundClassIDs==0)P_Tuple:=[P_Tuple,1]fwrite_string(FileHandle,[Index,'核酸管外观正常的图片名:',BaseName])fnew_line(FileHandle)elseN_Tuple:=[N_Tuple,0]fwrite_string(FileHandle,[Index,'核酸管外观缺陷的图片名:',BaseName])fnew_line(FileHandle)endif    
endfortuple_length (P_Tuple, P_Length)
tuple_length (N_Tuple, N_Length)
Yield_Rate:= real(P_Length)/real(N_Length+P_Length)
fwrite_string(FileHandle,['核酸管良品率:',Yield_Rate])
fnew_line(FileHandle)
close_file (FileHandle)

部分检测结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/140255.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flow深入浅出系列之在ViewModels中使用Kotlin Flows

Flow深入浅出系列之在ViewModels中使用Kotlin FlowsFlow深入浅出系列之更聪明的分享 Kotlin FlowsFlow深入浅出系列之使用Kotlin Flow自动刷新Android数据的策略 Flow深入浅出系列之在ViewModels中使用Kotlin Flows Flow出现后,LiveData仍然可以用,并且…

进阶JAVA篇-异常处理:解读与解决编程中的意外情况

目录 1.0 什么是异常? 1.1 异常主要分为两个情况分别是运行时异常、编译时异常。 2.0 怎么处理异常呢? 2.1 捕获异常(Catch Exception) 2.2 声明异常(Declare Exception) 3.0 自定义异常 3.1 如何定义异常类…

第60节——使用redux-toolkit实战一个商品列表的增删查改

一、样例 二、需求 调用goods.js这个单例完成对goods数据的增删查改 class Goods {constructor() {const data localStorage.getItem("qf-goods-data");this.goods data ? JSON.parse(data) : [];}time 500;/*** 获取商品* returns*/getGoods() {return new Pr…

spring6-资源操作:Resources

资源操作:Resources 1、Spring Resources概述2、Resource接口3、Resource的实现类3.1、UrlResource访问网络资源3.2、ClassPathResource 访问类路径下资源3.3、FileSystemResource 访问文件系统资源3.4、ServletContextResource3.5、InputStreamResource3.6、ByteAr…

联合体(共用体)

1. 联合类型的定义 联合也是一种特殊的自定义类型。 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间。 2.联合大小的计算 联合的大小 至少是最大成员的大小 。 当最大成员大小不是最大对齐数的整数倍的时候,就要对 齐到最大对齐数…

【AI视野·今日CV 计算机视觉论文速览 第268期】Mon, 16 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Mon, 16 Oct 2023 Totally 61 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Vision-by-Language for Training-Free Compositional Image Retrieval Authors Shyamgopal Karthik, Karsten Roth, Massi…

C#中List、Dictionary、HashSet用法以及区别

前言 在C#编程中,List、Dictionary和HashSet是常用的集合类型,它们都有自己的特点和适用场景。本篇博客将介绍它们的用法、区别及常见操作。深入了解这些集合类型,能够帮助我们更好地组织和处理数据。 1. List: List是一个有序可重复集合,可…

SpringBoot实战(二十五)集成 Shiro

目录 一、Shiro 简介1.1 Shiro 定义1.2 Shiro 核心组件1.3 Shiro 认证过程 二、SpringBoot集成2.1 集成思路2.2 Maven依赖2.3 自定义 Realm2.4 Shiro 配置类2.5 静态资源映射2.6 AuthController2.7 User 实体2.8 用户接口类2.9 用户接口实现类2.10 OrderController(…

stable diffusion和midjourney哪个好

midjourney和stable diffusion哪个好?midjourney和stable diffusion的区别?那么今天就从这2款软件入手,来探索一下他们的功能的各项区别吧,让你选择更适合你的一款ai软件。 截至目前,我们目睹了生成式人工智能工具的在…

CUDA编程入门系列(二) GPU硬件架构综述

一、Fermi GPU Fermi GPU如下图所示,由16个SM(stream multiprocessor)组成,不同的SM之间通过L2 Cache和全局内存进行相连。整个架构大致分为两个层次,①总体架构由多个SM组成 ②每个SM由多个SP core(stream…

logback服务器日志删除原理分析

查看以下的logback官方文档 Chapter 4: Appendershttps://logback.qos.ch/manual/appenders.html 按文档说明,maxHistory是设置保存归档日志的最大数量,该数量的单位受到fileNamePattern里的值%d控制,如果有多个%d,只能有一个主%d&#xff0…