【交通标志识别】BP神经网络交通标志识别(带面板)【含GUI Matlab源码 1647期】

news2024/9/30 19:33:02

⛄一、BP神经网络交通标志识别简介

道路交通标志用以禁止、警告、指示和限制道路使用者有秩序地使用道路, 保障出行安全.若能自动识别道路交通标志, 则将极大减少道路交通事故的发生.但是由于道路交通错综复杂, 且智能识别技术尚未成熟, 为了得到高效实用的道路标志识别系统, 仍需进行大量的研究.限速交通标志的检测识别作为道路交通标志识别系统的一个重要组成部分, 对它的研究具有非常重要的意义。

目前国内已有不少学者针对道路交通标志牌的智能识别进行了研究, 针对复杂环境背景下交通标志牌难以定位识别的问题, 提出一种基于交通标志牌特定颜色以及多尺度Retinex的图像增强和仿射变换的道路交通标志牌定位算法以及基于支持向量机的标志牌识别算法, 经试验验证, 该检测识别方法可将目标识别率达到90%以上, 但是其基于个人计算机 (Personal Computer, PC) 实现的检测算法, 不适用于影像序列的交通标志牌检测.文献[7]提出一种Adaboost算法与支持向量机 (Support Vector Machine, SVM) 算法融合用于自然场景下的交通标志识别的算法.该算法首先通过Adaboost筛选出最可能的候选子图像集合, 接着利用SVM对候选集合进行最终识别, 从而将识别正确率提升至96%以上.以上这些算法虽然在一定程度上取得了一定的识别效果, 但是目前常用方法均存在误识别率较高, 检测时间过长等缺陷.笔者提出算法的创新之处在于, 椭圆检测定位过程中采用帧间加速法、连续自适应均值漂移算法 (Continuously adaptive mean-Shift, CamShift) 和光流法缩短定位时间, 再对定位结果进行反向传播 (Back Propagation, BP) 神经网络识别, 从而提高检测效率, 能够实现实时视频处理。

1 限速交通标志的检测与识别
文中提出的算法主要包括两部分:限速交通标志的检测与识别.首先利用交通标志牌的颜色以及形状特征将交通标志牌从复杂环境背景下检测出来;接着利用BP神经网络对正负样本进行训练, 形成训练集, 从而实现对检测出的交通标志牌的识别;最后再通过帧间加速法、CamShift法和光流法比较智能检测识别的耗时情况.

1.1 限速交通标志的检测
交通标志的自动识别首先需要对标志牌进行准确定位.为了解决复杂环境背景下的限速标志牌定位问题, 通过查阅《道路交通标志和标线》中对限速标志牌制作的规定, 按照规定限速标志牌外围均呈红色, 利用这一特征首先对原始影像进行颜色分割, 将红色区域分割出来, 排除一些不必要的噪声, 接着对影像进行滤波;然后进行边缘提取, 椭圆拟合;最终将圆形标志检测出来.

1.1.1 颜色分割
数码相机拍摄的彩色影像一般分为红绿蓝 (Red Green Blue, RGB) 3个通道, 有时为了突出某些颜色的特征, 需要将其转换到色度-饱和度-纯度色彩模型 (Hue-Saturation-Value, HSV) 空间, 文中为了对比RGB和HSV空间中红色信息的区别, 分别在RGB和HSV空间进行颜色分割, 其原理分别是:

(1) RGB空间颜色分割.对RGB影像逐像素进行判断, 若G-B R<0.1, R≥160, G-B<30, G<120, B<120这5个条件同时满足, 则将该区域赋为白色;否则, 将其变为黑色.这样白色区域即为感兴趣区域, 分割完毕.得到的颜色分割效果图如图1 © 所示.

(2) HSV空间颜色分割.首先将原始影像 (图1 (a) ) 从RGB转到HSV空间, 然后逐像素进行判断, 若V≥0.15且S≥0.1且H≤7或H≥170, 则将该区域赋为白色;否则, 将其变为黑色.这样白色区域即为感兴趣区域, 分割完毕.得到的颜色分割效果如图1 (b) 所示.
在这里插入图片描述

图1 颜色分割实验
通过对比实验可见, 基于RGB空间的颜色分割在影像光照条件不足的情况下难以将标志牌分割出来, 而HSV空间对光线要求较低, 可以较好地识别红色区域, 所以文中采用HSV空间的颜色分割优于其他文献提出的RGB颜色分割效果。

1.1.2 影像平滑与边缘提取
由于道路交通背景较为复杂, 颜色分割之后仍有部分噪声, 为了过滤该噪声, 文中采用3次高斯平滑的方法除去噪声, 为下一步边缘提取提供便利, 实验结果如图2所示.由实验结果可以看出, 经过高斯滤波后, 图像既保持了基本轮廓, 同时对噪声也起到一定的抑制作用。
在这里插入图片描述

图2 影像平滑与边缘提取
边缘是图像灰度变化率最大的地方, 一般含有十分重要的特征信息, 常被用于物体检测方面.图像边缘不但保留了原始图像中非常重要的信息, 而且极大降低了数据量, 完全符合特征提取的要求, 因此文中采用canny边缘提取进行图像边缘提取.

1.1.3 椭圆拟合
椭圆拟合法即从一组样本点寻找一最接近样本点的椭圆, 也就是说, 将图像中的一组数据以椭圆方程为模型进行拟合, 使某一椭圆方程尽量满足这些数据, 最终确定最佳拟合椭圆.

最小二乘法作为数据拟合中的基本方法, 最早被应用于椭圆拟合, 其基本思路就是使方程整体误差最小化, 即根据给定数据集不断假设椭圆方程, 计算每个待定点到该椭圆的距离之和, 最终求出距离之和最小的椭圆方程即为最佳拟合椭圆.

文中利用最小二乘法对椭圆进行拟合, 由于道路背景较为复杂, 初步拟合的椭圆含有较多干扰信息 (如图3 (a) 所示) , 因此, 对拟合出的椭圆扁率进行限制, 若扁率e介于0.8~1.2之间, 即0.8≤e≤1.2时, 则认为是圆形交通标志牌区域;否则, 为干扰信息.其最终检测结果如图3 (b) 所示.
在这里插入图片描述
在这里插入图片描述
图4 同心圆去除

1.1.4 同心圆去除
由于在提取边缘操作之后会出现内外两个红色圆形标志圈, 所以进行椭圆拟合后易出现同心圆现象, 如图4 (a) 所示.针对这一问题, 文中采用一种排列组合距离比较法进行同心圆去除, 即对所有检测出的椭圆中心距离进行两两比较, 若两中心之间的欧式距离小于最小设置距离, 那么只保留最大圆, 去除最小圆;反之, 则认为这两个圆非同心圆, 全部进行保留.图4 (b) 为去除同心圆之后的检测结果.

1.2 基于BP神经网络的限速标志识别
在上节中, 从复杂环境背景下将道路交通标志牌检测了出来, 接下来需要对检测出的交通标志牌进行自动识别, 因此需要用到图像识别技术.近年来, 人工神经网络因其强大的学习能力和并行计算能力, 常被应用于图像识别等领域.虽然该方法属于机器学习范畴, 无法完全跟人脑进行媲美, 但其拥有自适应学习能力, 能够通过一系列指定的学习特征对样本进行学习, 即通过对人脑神经元进行抽象, 形成某种简单的模型, 接着依照不同的连接方式形成不同的网络, 从而实现适应性处理信息的能力.目前人工神经网络因其强大的模糊学习能力已被应用于医疗、交通、工业、运输、航空和航天等各个领域.文中项目需要对交通标志进行实时检测识别, 因此, 可通过BP神经网络对标志牌进行识别.

1.2.1 BP神经网络的算法描述
BP神经网络包括训练过程和学习过程.

(1) 训练过程.首先输入层接收来自外界的信号, 然后传递给中间层的各神经元;中间层通过改变不同的隐层结构将这些信息进行变换;最后信息被传递到输出层, 这就是一次学习的正向传播处理过程.

当实际输出与期望输出存在差异时, 将会进入误差反向传播过程.误差反传即通过隐含层反传输出误差到输入层, 在反传过程中将误差分配到每一层, 从而在各层获得调整各单元权值的依据.通过正向反向传播, 直到达到训练终止条件为止.

(2) 学习过程.人工神经网络的学习过程首先需要对网络进行初始化, 即分配连接权, 设定误差函数, 学习的最大次数等;接着输入训练样本, 计算各隐藏层的输入和输出, 调整连接权值;最后计算全局误差, 判断其是否满足终止条件, 从而完成学习过程[10].

1.2.2 输入向量的计算
输入向量用来代表图案的特征向量, 不同的标志具有不同的特征向量, 利用特征向量的差异来区分不同的标志图案, 从而达到识别分类的目的.

文中样本图像均统一至30×30像素, 并设定63个输入节点, 以图案的红绿蓝 (RGB) 3个通道灰度值为基础进行特征向量的计算, 充分利用图像颜色信息, 从而较大增加了识别率.

前3个节点的计算方法为:计算红绿蓝3个通道的平均值, 并将其归一化到0~1范围内, 计算公式如下:
在这里插入图片描述
然后, 计算30个垂直方向vi和水平方向hi上的投影值:
在这里插入图片描述
其中, Y为灰度矩阵, T为阈值.Yi, j和T的表达式为
在这里插入图片描述
这63个节点依序作为输入向量的值, 进行网络训练。

1.2.3 期望输出的确定
期望输出用来判定网络的训练误差和决定输出值, 该输出可以是一个值或者一个向量, 文中以6种不同限速标志为训练样本.由于期望输出得到的值在0~1区间内, 为了更好地区分不同类别限速标志, 这里将期望输出设定为一个六维向量.向量构造方法为:第N个训练样本的期望输出向量的第N维的值为1, 其他维的值都为0.即6种训练标志的期望输出向量按行排列在一起会形成一个6×6的单位矩阵。

⛄二、部分源代码

function varargout = Traffic_Iden(varargin)
% TRAFFIC_IDEN MATLAB code for Traffic_Iden.fig
% TRAFFIC_IDEN, by itself, creates a new TRAFFIC_IDEN or raises the existing
% singleton*.
%
% H = TRAFFIC_IDEN returns the handle to a new TRAFFIC_IDEN or the handle to
% the existing singleton*.
%
% TRAFFIC_IDEN(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in TRAFFIC_IDEN.M with the given input arguments.
%
% TRAFFIC_IDEN(‘Property’,‘Value’,…) creates a new TRAFFIC_IDEN or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Traffic_Iden_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Traffic_Iden_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Traffic_Iden

% Last Modified by GUIDE v2.5 01-Jan-2022 11:02:35

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @Traffic_Iden_OpeningFcn, …
‘gui_OutputFcn’, @Traffic_Iden_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% — Executes just before Traffic_Iden is made visible.
function Traffic_Iden_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Traffic_Iden (see VARARGIN)

% Choose default command line output for Traffic_Iden
handles.output = hObject;
handles.cd0 = cd;
handles.Color = 0;
handles.I = [];

axes(handles.axes1);
set(gca,‘Xtick’,[]);
set(gca,‘Ytick’,[]);
box on;

axes(handles.axes2);
set(gca,‘Xtick’,[]);
set(gca,‘Ytick’,[]);
box on;

axes(handles.axes3);
set(gca,‘Xtick’,[]);
set(gca,‘Ytick’,[]);
box on;

axes(handles.axes4);
set(gca,‘Xtick’,[]);
set(gca,‘Ytick’,[]);
box on;
% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Traffic_Iden wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = Traffic_Iden_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% — Executes on button press in radiobutton3.
function radiobutton3_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,‘Value’) returns toggle state of radiobutton3

% — Executes on button press in radiobutton4.
function radiobutton4_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,‘Value’) returns toggle state of radiobutton4

% — Executes on button press in radiobutton5.
function radiobutton5_Callback(hObject, eventdata, handles)
% hObject handle to radiobutton5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hint: get(hObject,‘Value’) returns toggle state of radiobutton5

% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%% 读图
[filename, cd1] = uigetfile( …
{‘.tif;.TIF;.JPG;.jpg;.bmp;.BMP;.jpeg;.JPEG;’,‘Image file’;…
.’, ‘All file (.)’},‘Pick an Image’);
axes(handles.axes1);
cla;
axes(handles.axes2);
cla;
axes(handles.axes3);
cla;
axes(handles.axes4);
cla;
if filename

cd(cd1);
d = imread(filename);
cd(handles.cd0);
handles.I = d;
axes(handles.axes1);
imshow(d);
handles.filename = filename; 

box on;

end

handles.Color = 0;
cd(handles.cd0);
set(handles.text2,‘string’,‘’);
guidata(hObject, handles);

% — Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%% 提取标志
% 按照颜色来分
Color = 0; % 颜色标记 1是红 2 是蓝 3是黄色

if get(handles.radiobutton3,‘Value’)

Color = 1;

elseif get(handles.radiobutton4,‘Value’)

Color = 2;

elseif get(handles.radiobutton5,‘Value’)

Color = 3;

end

handles.Color = Color;

Image = handles.I;

switch Color

case 1
    
    DI = Image(:,:,1);
    GI = (Image(:,:,1)>110 & Image(:,:,2)<150 & Image(:,:,3)<150 ...
        & abs(double(Image(:,:,2))-double(Image(:,:,3)))<50 & abs(double(Image(:,:,1))-double(Image(:,:,2)))>30);
    
case 2
    
    DI = Image(:,:,3);
    GI = (Image(:,:,1)<100 & Image(:,:,2)<150 & Image(:,:,3)>120 ...
         & abs(double(Image(:,:,2))-double(Image(:,:,3)))>30);
    
case 3
    
    DI = rgb2gray(Image);
    GI = (Image(:,:,1)>160 & Image(:,:,2)>90 & Image(:,:,3)<90 ...
        & abs(double(Image(:,:,1))-double(Image(:,:,2)))<100 & abs(double(Image(:,:,1))-double(Image(:,:,3)))>90);

end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]张兴国,刘晓磊,李靖,王环东.BP神经网络下的限速交通标志实时检测识别[J].西安电子科技大学学报. 2018,45(05)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

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

相关文章

笔试训练(2)

// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {StringBuffer s1new StringBuffer("A");StringBuffer s2new StringBuffer("B");process(s1,s2);System.out.println(s1);System.out.pr…

推翻OpenAI结论,DeepMind重新定义预训练的参数和规模关系!

文&#xff5c;王思若前言从20年开始&#xff0c;“最大语言模型”的桂冠被各大研究机构和科技公司竞相追逐&#xff0c;堆砌参数&#xff0c;猛上算力&#xff0c;开启了“大炼丹”时代&#xff0c;模型参数量仿佛越大越好&#xff0c;甚至GPT-4模型参数量将超过100万亿的传闻…

14年本科毕业,3个月转行软件测试月薪13.5k,32的岁我终于找对了方向

​职场奋斗的过程&#xff0c;其实就是不停地做选择&#xff0c;做判断的过程。决定你发展的&#xff0c;多数取决于你的判断和眼光。你任何的投入&#xff0c;都决定了你未来的格局和结局。今天跟大家分享的我的转行故事&#xff0c;一起来看看吧。 为了新的目标和方向&#x…

PDF怎么拆分/合并? 3款 PDF 拆分和合并工具分享

以PDF格式传输文档已广泛使用很长时间&#xff0c;也是传输文档的最常见方式之一。但是&#xff0c;当涉及到从众多PDF文件中提取特定页面并将它们放在一起以制作新的PDF文档时&#xff0c;我们将需要专用软件来合并和拆分多个PDF。 现在&#xff0c;如果您想知道&#xff0c;…

叶面积指数(LAI)介绍以及遥感估算方法

前言 叶面积指数精度是正确预测产量的重要参数之一。 同时&#xff0c;还有那么多疑问&#xff0c;如何才能正确&#xff1f; 以及如何使用最有效的方法计算叶面积指数&#xff08;LAI&#xff09;&#xff1f; 什么是最佳 LAI&#xff1f; 哪些估算叶面积指数精度的方法比较好…

Matplotlib基础绘图函数示例

1. pyplot基础图表函数概述 2. pyplot饼图的绘制 3. pyplot直方图的 绘制 4. pyplot极坐标图的绘制 5. pyplot散点图的绘制 单元小结

[附源码]Python计算机毕业设计果蔬预约种植管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

内部分享讲解DevOps后,我再组织成文

DevOps 已然家喻户晓&#xff0c;如果你还没听过&#xff0c;那确实要去补补课。随着敏捷研发的普及&#xff0c;一种快速响应业务、高效运维的模式必然深得众心&#xff0c;Git 的发展近来几乎在代码管理领域一骑绝尘&#xff0c;在此基础上衍生出 GitOps 的概念&#xff0c;成…

MR案例:计算学生成绩(总分和平均分)

文章目录一、提出任务二、完成任务&#xff08;一&#xff09;准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录&#xff08;二&#xff09;实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建成绩映射器类5、创建成绩驱动器类6、启动成绩驱动器类…

JVM本地锁(一)简单实现

JVM本地锁由ReentrantLock或synchronized实现 模拟场景 假设有个共享库存资源&#xff0c;多线程进行访问&#xff0c;每次访问库存-1. Data public class StockDemo {private Integer stock 5000; }再controller -> service 进行访问调度 Service public class StockD…

题:付账问题

1235. 付账问题 - AcWing题库 几个人一起出去吃饭是常有的事。 但在结帐的时候&#xff0c;常常会出现一些争执。 现在有 nn 个人出去吃饭&#xff0c;他们总共消费了 SS 元。 其中第 ii 个人带了 aiai 元。 幸运的是&#xff0c;所有人带的钱的总数是足够付账的&#xff…

ctf笔记:php

ctf笔记&#xff1a;php 博客链接&#xff1a;https://www.blog.23day.site/articles/80 语法 攻防世界&#xff1a;easy_php 攻防世界&#xff1a;simple_php $a $b等于TRUE&#xff0c;如果类型转换后 $a 等于 $b。$a $b全等TRUE&#xff0c;如果 $a 等于 $b&#xff0c…

【封神台】辛巴猫舍-SQL注入

本节学习目标&#xff1a; 判断是否存在SQL漏洞&#xff0c;以便注入获取数据库的内容本节需知&#xff1a; SQL注入%20为空格的url代码环境为打靶环境1. 判断是否存在SQL漏洞 http://cntj8003.ia.aqlab.cn/index.php?id1%20and%2011 http://cntj8003.ia.aqlab.cn/index.php…

注册VMware虚拟机时报错“指定的项、名称或标识符已存在“

环境 VMware虚拟化平台 问题描述 收到业务侧报障&#xff0c;多台Linux虚拟机无法登录。经查询&#xff0c;报障的Linux操作系统均部署在VMware虚拟化平台&#xff0c;承载的宿主机已宕机且无法启动&#xff0c;虚拟机为断连状态。虚拟机移除清单&#xff0c;离线迁移&#…

图片识别转公式,GitHub 又一 LaTeX 神器面世

​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 只需要把公式图片用鼠标拖动到工具内&#xff0c;就能一键转成 LaTex 公式。 写论文、做研究时&#xff0c;最让你头疼的是什么&#xff1f;想必公式编辑会榜上有名。那么有没有便捷的…

<Linux进程通信之管道>——《Linux》

目录 一、进程通信 1.进程间通信介绍 2.进程间通信目的 3.进程间通信发展 4.进程间通信分类 二、管道 1.什么是管道 2.匿名管道 3.用fork来共享管道原理 4.站在文件描述符角度-深度理解管道​编辑 5.编程模拟实现父子进程在管道读写通信​编辑 6.进程控制&#xff…

【DevOps实战系列】第一章:详解DevOps运行环境

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 DevOps是什么&#xff1f; DevOps&#xff08;Development和Operations的组合词&#xff09;是一种重视“软件开发人员&#xff08;Dev&#xff09;”和“IT运维技术人员&#xff08;Ops&#x…

子序列的权值最小值

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 给定一个长度为 nnn 的数组 aaa&#xff0c;求数组所有非空子序列权值的最小值。 定义子序列 ai,aj,…,aka_i,a_{j},\dots,a_kai​,aj​,…,ak​ 的权值为 其中 &\&& 为二进制中…

Nat. Commun. | 基于最优传输的单细胞数据集成统一计算框架

本文介绍由同济大学控制科学与工程系的洪奕光和中国科学院数学与系统科学研究院的万林共同通讯发表在 Nature Communications 的研究成果&#xff1a;单细胞数据集成可以提供细胞的全面分子视图。然而&#xff0c;如何整合异质性单细胞多组学以及空间分辨的转录组学数据仍然是一…

Linux C编程一站式学习笔记3

lLinux C编程一站式学习笔记 chap3 简单函数 文章目录lLinux C编程一站式学习笔记 chap3 简单函数一.数学函数C标准库和glibc二.自定义函数三.形参和实参Man Page习题四.全局变量、局部变量和作用域局部变量 local variable全局变量 global variable全局变量和局部变量重名的情…