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

news2024/10/13 6:15:00

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 1
    read_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 1
    read_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 1
    img_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)
    else
        N_Tuple:=[N_Tuple,0]
        fwrite_string(FileHandle,[Index,'核酸管外观缺陷的图片名:',BaseName])
        fnew_line(FileHandle)
    endif    
endfor

tuple_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.coloradmin.cn/o/1108534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#,数值计算——KMeans分类的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// K-Means classification /// </summary> public class Kmeans { private int nn { get; set; } private int mm { get; set; } private …

ACL配置

目录 1.使用基本ACL配置交换telnet访问的权限 2.使用高级ACL配置流分类实现限制互访某一台服务器 3.使用二层ACL配置流分类拒绝指定报文通过 4.通过流策略实现策略路由(重定向到不同的下一跳) 5.通过流策略实现不同网段间限制互访 6.通过流策略实现限速功能 7.通过流策略…

C# CodeFormer Colorization 人脸着色

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace CodeFormer_D…

联合体(共用体)

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

反射、代理模式、注解

目录 一.Java反射 1.1反射的第一步&#xff1a;获取Class类的对象 1.2使用反射获取构造器对象并使用 1.3使用反射获取成员变量对象并使用 1.4使用反射获取成员方法对象并使用 二.代理模式 2.1概述 2.2代理模式在Java中的应用 2.3静态代理 2.4动态代理 2.4.1JDK动态代…

第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…

序列化和反序列化指令在PLC通信上的应用

在了解本篇博客之前,大家可以熟悉下序列化指令的相关介绍,详细内容如下: 博途PLC 1200/1500 PLC 序列化和反序列化指令编程应用_博图序列化和反序列化-CSDN博客序列化最重要的作用:在传递和保存对象时.保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输…

Apache Doris (四十四): Doris数据更新与删除 - Delete 数据删除

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

在 Python 脚本中设置环境变量

环境变量是与系统进程交互的一种深入方式&#xff1b; 它允许用户获得有关系统属性、路径和已经存在的变量的更详细信息。 我们如何使用环境变量 如上所述&#xff0c;环境变量促使我们与系统进程进行交互。 我们可以使用环境变量来访问系统中的所有变量和键。 为此&#xff…

Spring中构造注入详解

目录 一、构造注入是什么 二、构造注入重载 一、构造注入是什么 书接上回&#xff0c;我们已经知道了setter注入是什么了&#xff0c;这里的构造注入也就很好理解了。构造注入也就是Spring通过调用类对象中的构造方法来进行注入。接下来利用代码演示构造注入 1&#xff09;先…

Elasticsearch系列组件:Beats高效的日志收集和传输解决方案

Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎&#xff0c;设计用于云计算环境中&#xff0c;能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性&#xff0c;可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…

上海亚商投顾:沪指震荡调整 转基因概念股逆势大涨

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走&#xff0c;深成指、创业板指均跌超1%&#xff0c;双双创出年内新低。转基因概念股逆势大涨…

C语言初学者工具选择:vscode + MSYS2 + cmake 搭建 C环境

文章目录 前言1. MSYS2 安装1. 下载安装包2. 安装3. pacman 换清华大学源4. 安装 mingw-w64 toolchain 和 cmake ninja5. 将 toolchain 加入系统环境变量 2. 设置 vscode1. 必要的插件2. 一个简单的 vscode cmake 项目 最后C数据结构与算法CMake 前言 网上关于使用 vscode 配…

Leetcode刷题详解——无重复字符的最长子串

1. 题目链接&#xff1a;3. 无重复字符的最长子串 2. 题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所…

C++11(包装器)

目录 一、function包装器 1、概念 2、function的引入 3、function 1、对函数指针包装 2、对函数对象进行包装 3、对lambda表达式进行包装 4、对类的成员函数进行包装 二、bind包装器 1、概念 2、bind 1、绑定全局函数 2、绑定成员函数 3、参数调换顺序 一、functi…

pinia下载使用时报错如何解决?

报错 可能是因为pnpm下载的时候版本出现了问题 更新pnpm的版本 一、windowr打开终端 输入pnpm -v检查是否是最新版本 如果是8.6.2的话 就更新 更新步骤如下&#xff1a; 二&#xff1a;打开pnpm下载的网盘位置 我的是在c盘 找到里面的用户文件夹 点击选择dell里面的App data文…

C语言 内存

内存分配 内存分配的类型 C/C中内存分为5个区&#xff0c;分别为栈区、堆区、全局/静态存储区、常量存储区、代码区 静态内存分配&#xff1a;编译时分配&#xff0c;包括全局、静态全局、静态局部三种变量。 动态内存分配&#xff1a;运行时分配&#xff0c;包括栈&#x…

21天学会C++:Day15----STL简介

CSDN的uu们&#xff0c;大家好。这里是C入门的第十五讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 什么是STL 2. STL的版本 3.STL的六大组件 4. STL的重要性 5. 如何学…

二叉树实现表达式求值(C++)

用二叉树来表示表达式&#xff0c;树的每一个节点包括一个运算符和运算数。代数表达式中只包含&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;&#xff08;&#xff0c;&#xff09;和一位整数且没有错误。按照先括号&#xff0c;再乘除&#xff0c;后加减的规则构造二叉…

【算法设计zxd】第6章 回溯法

目录 6.1 回溯法的设计技术 &#xff1a; 四皇后问题 回溯法&#xff1a; 算法框架&#xff1a; 思考题&#xff1a; 回溯算法的适用条件 【例6-1】求满足下列不等式的所有整数解&#xff1a; 6.2回溯算法的经典例题 【例6-2】装载问题  问题分析 计算模型  算法设计与描…