经典图像去噪算法概述

目录 一、图像去噪基础知识 1. 图像去噪模型 2. 图像去噪类型 2.1 噪声类型——融合方式 2.2 噪声类型——概率分布 二、非局部均值图像去噪方法 三、基于图像先验的正则化去噪模型 1. 图像的梯度先验 2. 图像的非局部自相似先验 3. 图像的稀疏性先验 4. 图像的低秩性先验 一、图像去噪基础知识 1. 图像去噪模型 图像在传输、存储和拍摄等过程中,由于电磁波、传输设备存在杂质信号、镜头污渍等外部条件的干扰会产生噪声。从而导致图像不能清晰、真实地反映事物。 图像去噪算法地目的是将图像中的噪声去除,还原出无噪声的图像,并且最大限度地保存图像中原有的细节信息。通常图像去噪问题被当成一个逆问题来处理,给定一张M*N的噪声图像y,通过去噪算法去除图像噪声,恢复未被噪声污染过的图像x。噪声图像可用表达式:来表示。其中表示图像噪声,图像去噪的模型如下图所示[1-3]。 2. 图像去噪类型 2.1 噪声类型——融合方式 噪声的分类方法多种多样,根据噪声与图像信息两者之间的融合方式,能够将噪声模型分成加性噪声和乘性噪声两类。假设给定观测到的噪声图像为, 原始图像为,噪声为,则加性噪声模型为: 乘性噪声模型为: 由噪声模型可以看出加性噪声和图像信号之间是相加的关系,不管有无图像信号的存在,噪声是客观存在的,因此可知图像信号和噪声信号之间是不相关的。而乘性噪声和图像信号之间是相乘的关系,图像信号存在,则噪声存在,图像信号不存在,噪声便不存在,故乘性噪声和图像信号之间是相关的。 2.2 噪声类型——概率分布 根据噪声服从的概率密度分布,可以将其分为高斯噪声、脉冲噪声和泊松噪声等。 (1)高斯噪声 高斯噪声是一类概率分布服从高斯分布的噪声,其概率密度为: 其中为噪声,为噪声均值,通常取为0,为噪声的标准差,由概率密度函数可以看出高斯噪声有很好的数学性质,该概率密度函数下函数的分布是对称的。现实生活中的噪声大多数能够近似表示为高斯噪声,因此通常研究者们在研究图像去噪算法时大多都使用均值为0,方差为的高斯噪声模拟真实噪声。 (2)脉冲噪声 脉冲噪声的概率密度为: 脉冲噪声点的亮暗程度与a、b的取值有关,当b>a时,则值为a的点表现为暗点,值为b的点表现为亮点。反之则值为b的是暗点,值为a的点是亮点。 (3)泊松噪声 泊松噪声的概率密度函数: 该概率密度下噪声的均值和方差都为,泊松噪声是因光量子测定时存在不确定性而导致的,因此泊松噪声一般在亮度很小或者高倍电子放大线路中会出现。 二、非局部均值图像去噪方法 目前已有的许多图像去噪方法大多是基于“局部平滑”(例如,传统的均值滤波器和高斯滤波器)。 虽然这类方法是有效的,但由于缺乏自适应性会导致图像模糊。从下面四幅灰度图像可以看出,它们都含有很多相似重复的纹理信息,考虑在大多数图像中出现的冗余信息,研究人员发现图像的自相似性可以应用于图像去噪领域。2005年,Buades等人首次提出了一种非局部均值(NLM)去噪算法。该算法充分利用图像中的自相似性达到去噪的目的,首先通过计算邻域间的欧式距离得到相似性权值,然后使用相似像素的加权平均得到去噪图像。这种计算权值的方法仅与图像块的相似性有关,与位置无关因此很好的避免了虚假纹理的产生。与传统的去噪算法相比,NLM算法具有算法简单、去噪性能好、易于改进和扩展的特点。 给定一个离散含噪图像,即: 其中,为去噪后的图像,是以像素i为中心的方形搜索窗口,为相似性权重系数,由像素点i和j的邻域相似性决定,该相似性通常利用图像块间的欧氏距离计算得到。因此,图像块相似性的度量如下所示,同时权值需要满足条件:且. 其中,,表示以像素i为中心的图像块的灰度值,h控制指数函数的衰减速度并影响滤波程度。由上述公式可知权值依赖于邻域窗口e和的相似度,当权值越大,图像的邻域就越相似。 非局部方法在去噪性能上优于局部方法,特别是对于高斯噪声。然而,NLM方法存在明显的不足,仍然有很大的改进空间,比如:较高的计算复杂度、相似性权重的计算公式受噪声影响较大和去噪参数确定不准等。 三、基于图像先验的正则化去噪模型 对于正则化去噪方法,最重要的一步是找到一个合适的自然图像先验。由于应用的领域不同,人们所关注的图像特征也是不同的,因此需要根据需求来构造合理的正则化去噪模型。在研究过程中,来自不同国家的学者针对图像自身先验进行约束,提出了不同形式的正则化去噪模型。下面介绍一些最有影响力的图像先验知识,包括梯度先验、非局部自相似性先验、稀疏性先验和低秩性先验。 1. 图像的梯度先验 最早将梯度先验引入图像去噪的是Tikhonov正则化方法,该方法根据原始图像是“平滑”这一假设进行去噪的。但是这种光滑约束是各向同性的,在去除噪声的过程中难免平滑掉大量边界以及细节结构。为了防止这种情况的发生。1992年,又有学者提出了基于TV的正则化方法来克服去噪图像的平滑性,这是该领域最有影响力的工作。TV正则项的本质是梯度的L1范数,定义为: 其中,是的梯度。进而得到图像的去噪模型: 这种极小化问题也称为ROF模型,它具有以下几个优点:1)该模型存在唯一解;2)关于x的解空间函数是不连续函数,即允许存在边缘位置的特殊像素点,所以在去噪过程中能较好地保持边缘。由于以上优点,TV模型被广泛用于图像去噪。但是模型也存在着缺陷:1)由于TV模型沿像素梯度方向是平滑地,容易将噪声当作伪纹理而被保存下,因此在平坦区域易产生阶梯效应;2)由于TV模型逐个相邻像素点计算像素差,会导致图像纹理趋于过平滑;3)TV模型中正则化参数的选择是依赖于经验值的,因此选择合适的参数值存在一定的难度。下图是利用了TV正则化后的视频数据恢复算法(HSR-TT)的对比图,选择视频的大小为256*256*30,我们选择第10帧作为对比[5]。 2. 图像的非局部自相似先验 基于自然图像在不同位置包含大量相似图像这一事实,一系列方法利用了图像的非局部自相似(NSS)先验进行去噪。这类正则化去噪模型的开创性工作就是上面所讲的NLM去噪。通过将NLM中的第一步,即像素相关性的估计,视为图像相关图的构成方法,开发了各种形式的基于图拉普拉斯的正则化方法。根据前面介绍的相似性度量公式,NSS先验定义为: 其中,是由在一个搜索窗口内所有围绕像素的中心像素形成的列向量,是一个包含所有相应权重的列向量。 尽管这类去噪算法取得了巨大的成功,但它们往往无法保持细致的纹理,着极大地降低了图像地视觉质量。 3. 图像的稀疏性先验 由于自然图像具有冗余性,因此可以用字典进行稀疏表示。根据此先验知识,基于冗余字典的稀疏表示的去噪算法已成为近年来研究的热点问题。无噪声图像在字典下表示是稀疏的,而噪声随机的是不可稀疏的,因此图像信息蕴含在少量的系数中。 图像稀疏表示的数学模型是,将输入图像块分解为矩阵D与向量的乘积形式,其中矩阵D由一组基向量组成,向量α中大部分元素为零。由于传统的正交基对图像稀疏表示能力有限,有学者提出了字典的概念,用过完备字典代替正交小波基。这使得图像在冗余基库中可以方便地选择基向量,以更好地实现对复杂图像的稀疏表示。 稀疏表示模型的求解可以转化为优化问题,用L1范数约束,即 。通用的稀疏表示模型为

java1逻辑运算符作业(16道)

1. (标识符命名)下面几个变量中,那些是对的?那些是错的?错的请说明理由 A. ILoveJava//正确 B. $20//正确 C. learn@java//错误,不能有@ D. antony.lee//正确,包名????//错误 E. Hello_World F. 2tigers//数字不能开头 2.(Java 程序的编译与运行)假设有如下程序: package com.corejava.chp1; public class HelloWorld{ public static void main(String args[]){ System.out.println("Hello World"); } } 问: 1)假设这个代码存在hello.java 文件中,那这个程序能够编译通过?为什么? 如果编译不通过,应该如何改进? //不能够编译通过,文件名不和public修饰的主类名一致,java文件名和公共类名必须一致 2)假设这个.java 文件放在C:\javafile\目录下,CLASSPATH=.//这是class文件的路径,则生成的.class文件应该放在什么目录下?如何运行? //生成的.class文件在com/corejava/chp1文件夹中, java -cp . com.corejava.chp1.Hello(cp代表目录) 可以使用javac -d 路径 java文件(.java) 可以快速建立包 3. (if 语句)读入一个整数,判断其是奇数还是偶数 Scanner sC = new Scanner (System.in); System.out. println("请输这一个整数); int a =sc. nextInt(); String result =a%2==0?"偶数":"奇数" 4. (操作符)有如下代码: int a = 5; int b = (a++)+(--a)+(++a); // 5 5 6 问执行完之后,b的结果是多少? //从左向右先是 ①先是5,后a变成6 ②先6-1=5 ③先5+1=6 16 5.

【小程序从0到1】网络数据请求——request合法域名|GET|POST|跨域?Ajax?

欢迎来到我的博客 📔博主是一名大学在读本科生,主要学习方向是前端。 🍭目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 🛠目前正在学习的是🔥 R e a c t / 小程序 React/小程序 React/小程序🔥,中间穿插了一些基础知识的回顾 🌈博客主页👉codeMak1r.小新的博客 😇本文目录😇 小程序中网络数据请求的限制配置request合法域名发起GET请求发起POST请求页面刚加载时请求数据 --- onLoad跳过request合法域名校验关于跨域和Ajax的说明 本文被专栏【小程序|原力计划】收录 🕹坚持创作✏️,一起学习📖,码出未来👨🏻‍💻! 上篇文章详细讲解了微信小程序的页面配置,这篇文章将带领大家学习的是小程序的「网络数据请求」 小程序中网络数据请求的限制 处于安全性考虑,小程序官方对于数据接口的请求作出了如下两个限制: 只能请求https类型的接口;必须将接口的域名添加到信任列表中 需要将接口的域名添加到图中的request合法域名中。 配置request合法域名 假设需要在自己的微信小程序中,希望请求https://www.escook.cn/域名下的接口 配置步骤:登录微信小程序管理后台 ⇒ 开发 ⇒ 开发设置 ⇒ 服务器域名 ⇒ 修改request合法域名 ⚠️注意:https://www.escook.cn是刘龙斌老师提供的域名。 域名只支持https协议域名不能使用IP地址或者localhost域名必须经过ICP备案服务器域名一个月内最多可申请50次修改 发起GET请求 调用微信小程序提供的 wx.request()方法,可以发起GET数据请求,示例代码如下: (在小程序中有一个顶级的对象就是wx,相当于web开发中的window,此类对象不需要声明就可以直接使用) getInfo() { wx.request({ url: 'https://www.escook.cn/api/get', // 请求的地址,必须基于https协议 method: 'GET', data: { name: 'zs', age: 20 }, success: res => { console.log(res.data); } }) 发起POST请求 调用微信小程序提供的 wx.request() 方法,可以发起POST数据请求,示例代码如下:

获取短信验证码

<template> <div> <el-form :model="schoolForm" ref="schoolForm" class="demo-ruleForm design" enctype="multipart/form-data" method="post"> <el-form-item label="负责人手机" :label-width="formLabelWidth" prop="chargeTel"> <el-input v-model="schoolForm.chargeTel" autocomplete="off"></el-input> </el-form-item> <el-form-item label="验证码" :label-width="formLabelWidth"> <el-input v-model="schoolForm.code" autocomplete="off"></el-input> <el-button type="info" plain @click="sendMsg()" :disabled="sendDisabled">{{btnTxt}}</el-button> </el-form-item> </el-form> </div> </template> <script> import { getsendMsg } from '@/api/school' export default { //自定义事件 components: {}, data() { return { formLabelWidth: '120px', time: undefined, sendDisabled: false, btnTxt: "获取验证码", schoolForm: { chargeTel:undefined, code: undefined, } }; }, //计算属性 computed: {}, //监听 watch: {}, //方法 methods: { //倒计时方法 timer() { if (this.

情商多方面的研究

情商EQ认识与提高 情商 (情绪、意志、性格、行为习惯组成的商数) 情商(Emotional Quotient)通常是指情绪商数,简称EQ,主要是指人在情绪、意志、耐受挫折等方面的品质,其包括导商(LQ)等。总的来讲,人与人之间的情商并无明显的先天差别,更多与后天的培养息息相关。它是近年来心理学家们提出的与智商相对应的概念。从最简单的层次上下定义,提高情商是把不能控制情绪的部分变为可以控制情绪,从而增强理解他人及与他人相处的能力。 戈尔曼和其他研究者认为,这种智力是由五种特征构成的:自我意识、控制情绪、自我激励、认知他人情绪和处理相互关系。 情商越来越多的被应用在企业管理学上。对于组织管理者而言,情商是领导力的重要构成部分。 来源 生命早期的智能形式 ,人类的右脑预测变化的环境中各类信息对自己产生各种情绪、心情、精神类感受, 判断各类事件导致的各种精神情绪详细差异,分析复杂精神情绪的一般组成结构,对比存在的各种感受价值,大脑刻意制造各种感受平衡精神状态 ,右脑主要存在目的只是分析自身的精神世界而非物理世界信息。 汉语意思:“情绪智慧”或“情绪智商”,又称为“情绪智力” , 简称情商。据《情商:为什么情商比智商更重要》,萨洛维及其合作伙伴约翰·梅耶已对情绪智力给出了详细的定义,情绪智力扩展为5个主要领域:了解自身情绪、管理情绪、自我激励、识别他人情绪、处理人际关系。 什么是情商?情商(EQ)全称情绪智力,多年来心理学家们提出的与智力和智商相对应的概念。它主要是指人在情绪、意志、耐受挫折等方面的能力。最新的研究显示,一个人的成功,只有20%归诸智商,80%则取决于情商。美国哈佛大学的教授丹尼尔·戈尔曼表示:“情商是决定人生成功与否的关键。” 青春期情商训练,提高孩子情商。 情商是可以通过全面系统的课程培养提高并且改变的。青春期是人生中一个比较特殊的时期,学生们这个时候面临学习压力的同时,又面临着生理、心理方面的变化。这些都会使他们造成心理失衡和复杂的心理矛盾,严重的便可以产生种种不良的后果。如叛逆、厌学、考试焦虑、与同学关系紧张等问题。 分类 “情绪智商包含了自制、热忱、坚持,以及自我驱动、自我鞭策的能力”。 丹尼尔·戈尔曼接受了萨洛维(P.Salovery)的观点,认为情绪智商包含五个主要方面: 1.了解自我:监视情绪时时刻刻的变化,能够察觉某种情绪的出现,观察和审视自己的内心世界体验,它是情绪智商的核心,只有认识自己,才能成为自己生活的主宰。 2.自我管理:调控自己的情绪,使之适时适度地表现出来,即能调控自己; 3.自我激励:能够依据活动的某种目标,调动、指挥情绪的能力,它能够使人走出生命中的低潮,重新出发; 4.识别他人的情绪:能够通过细微的社会信号、敏感地感受到他人的需求与欲望,是认知他人的情绪,这是与他人正常交往,实现顺利沟通的基础; 5.处理人际关系,调控自己与他人的情绪反应的技巧。 情商(情绪商数)(EQ),由两位美国心理学家约翰·梅耶(新罕布什尔大学)和彼得·萨洛维(耶鲁大学)于1990年首先提出,但并没有引起全球范围内的关注,直至1995年,由时任《纽约时报》的科学记者丹尼尔·戈尔曼出版了《情商:为什么情商比智商更重要》一书,才引起全球性的EQ研究与讨论,因此,丹尼尔·戈尔曼被誉为“情商之父”。 《情商:为什么情商比智商更重要》一书于1997年被引入中国大陆,从而引发全国大讨论,使之成为耳熟能详的一个名词。 对于情绪智商的概念,丹尼尔·戈尔曼并没有提出一个精确的概念。 但是从丹尼尔·戈尔曼《情绪智商》一书的字里行间,人们还是可以看出情绪智商概念的端倪。 即使是情商之父,在《情商:为什么情商比智商更重要》一书中并没有复述情商的准确定义(指抽象定义)。这也说明EQ仍然是现代心理学中的一个新产生的名词,其定义仍在不断更新、不断进步过程中。丹尼尔·戈尔曼本人在该书的10周年纪念版作序时提到:他认为“情智(EI)”作为情绪智力的简称,比用“情商(EQ)”更为准确。但是,EQ的概念在全球已深入人心。 在全球的教育领域,由于SEL计划(Social and emotional learning)的深入人心,一般将“社会情绪能力学习(SEL)”等同于“情商训练/情商学习”,专业人士反而较少提及EQ。因此,EQ成为与IQ(智商)的一个对应的商业化名词。 重要性 如今,人们面对的是快节奏的生活,高负荷的工作和复杂的人际关系,没有较高的EQ是难以获得成功的,情商(EQ)会影响智商(IQ)的发挥。EQ高的人,人们都喜欢同他交往,总是能得到众多人的拥护和支持。同时,人际关系也是人生重要资源,良好的人际关系往往能获得更多的成功机会。 应试教育压力下,家长总是不惜花费大量时间、精力、金钱对孩子进行教育投资;结果却经常达不到预期效果,反而导致孩子厌学、学习独立性差、任性自私等。近几年,学生因学业压力、与父母沟通问题而选择离家出走、自杀的现象频频充斥人们的眼睛。 心理专家说,孩子学会做人比学会做学问更重要。然而很多家长都只注重对孩子智力的培养,而忽略了情商的训练,结果导致情商低的孩子越来越多。 发展简史 1925年,Thondike提出了社会智力(social intelligence)的概念,他认为,拥有社会智力的人“具有了解及管理他人的能力,能在人际关系上采取明智的行动”,并把 “社会智能" 描述为与他人相处的能力。 1935年,美国心理学家Alixander在他的《智力:具体与抽象》一文中提出了非智力因素(nonintellective factoers)的概念。 1940年,Wechsler提出普通智力中的非智力因素,并于1943年提出非智力因素是预测个人成功的关键因素。智能的情绪部分可能是生活成功的必要组成部分。 1965年美国人高尔曼,提出了所谓情商的概念 EQ。 1975年霍华德-加德纳出版了 《发敖的智能》 一书, 介绍了多元化智能的理念。 1983年,Gadener发展了多元智力理论(theory of multiple intelligence),其中,两种情绪维度成分:内省智力(intrapsychic intelligence)和人际智力(interpersonal intelligence)这两项能力,让“社会智力”的概念再一次的受到教育界以及心理界的重视。 1987 年吐基思-比思利在 《门撒杂志》 上发表了一篇文章,其中用到 “情商” (即 EQ, 用来衡量情绪智能的商数) 这个术语。 尽管巴昂(RcuvenBar-0n,,以色列著名心理学家。)声称自 己在未发表的毕业论文中已经用过这个术语,大家还是公认这篇文章是首次使用 “情商”并发表。

记录|MacOS M1 VMwareFusion12安装Centos7|一个master两个node

MacOS M1 VMwareFusion12安装Centos7|一个master两个node 预备知识: 虚拟机三种网络连接方式的区别VMware虚拟机安装网络配置(开启网卡、修改IP、开启SSH)开启网卡配置静态IP开启ssh服务检查三者是否能互ping 进行初始化操作第一步:关闭防火墙第二步:关闭selinux第三步:关闭swap第四步:对主机名进行设置第五步:在master节点添加hosts第六步:将桥接的IPv4流量传递到iptables的链第七步:时间同步 重新安装问题1 开启ssh的时候提示Redirecting to /bin/systemctl restart sshd.service 预备知识: 虚拟机三种网络连接方式的区别VMware 尚硅谷Linux B站教程 桥连模式 李四装的linux系统虚拟机也在教室的这个网段(假设为192.168.0.x)中,李四的主机、虚拟机,张三的主机之间都可以相互通信。 但这容易造成ip地址不够用的情况(比如, 当教室里有200个学生,每个人安装一个linux虚拟机,都使用桥连模式,ip地址不够用,可用253个)。 NAT模式 教室又来了一个哥们王五,也装了一个linux系统虚拟机,而他选择的NAT模式。则王五的windows系统会出现两个IP地址,比如一个192.168.0.x,192.168.100.x。 此时王五的linux虚拟系统不会占用192.168.0.x的IP地址。 此时,张三和李四找不到王五的linux,但是王五的linux可以找到张三和李四。 主机模式 虚拟系统的IP是独立的,不能访问外网。 小结:一般情况建议使用NAT模式 虚拟机安装 参考: https://blog.csdn.net/qq_24950043/article/details/122517521?spm=1001.2014.3001.5502 接下来的步骤都和上面👆博主的一模一样,只是为了记录自己的操作在本文记录自己实操的内容。 主机硬件: 虚拟机安装软件: ios镜像文件:(这里有个疑问) 网络配置(开启网卡、修改IP、开启SSH) 如何查看本地IP:打开终端输入 ifconfig en0 本地IP为192.168.11.119 如何在linux虚拟机中查看ip地址:输入 ip addr 虚拟机master地址为192.168.11.209 开启网卡 1、之前安装都是ens33,这个版本是ens160。如果没有安装vim的话,可以使用vi命令替代 vim /etc/sysconfig/network-scripts/ifcfg-ens160 2、将ONBOOT设置为yes即可开启网卡 ONBOOT=yes 3、重启网卡 service network restart 配置静态IP 1、打开配置文件: vim /etc/sysconfig/network-scripts/ifcfg-ens160 2、添加下面三行 静态IP 默认网关 子网掩码 3、重启网卡 service network restart 4、查看ip 开启ssh服务 1、启动ssh服务 service sshd start # 启动ssh 2、打开22端口

【Java】整数拆分输出

思路: ①判断输入的数字的长度(是几位); ②循环来不断解剖每一位的数值; ③个位:整个数值对10取余即可得到个位; ④十位:整个数值对100取余得到XX,然后除以10,可以利用强转 Int 类型来得到十位; ⑤百位:整个数值对1000取余得到XXX,然后除以100,同样利用 Int 类型得到百位; … … ⑥其中的 Math.pow(10,3) 为10的3次方; /*输入一个整数,从个位开始,逐步拆分出每一位数字,每个数字输出占一行*/ import java.util.Scanner; public class SplitInteger { public static void main(String[] args) { int n; //输入整数n Scanner sc = new Scanner(System.in); n=sc.nextInt(); //拆分并输出每一位数字 for(int i=1;i<=NumLength(n);i++){ System.out.println(n%((int)Math.pow(10,i))/(int)Math.pow(10,i-1)); } //强转Int类型 sc.close(); } // 判断数据长度的方法 public static int NumLength(int num){ int count=0; while(num>=1){ num = num/10; count ++; } return count; } } 如果是要求先输出高位,再输出低位(123,先输出1 再输出2 最后输出3): n /= 10;不断抹去最后一位,只剩第一位,循环即可得到 思路:

ssh无法连接虚拟机

背景: 使用vmware player 安装ubuntu22.04的桌面版本,但是无法使用宿主机的ssh工具登录虚拟机。虚拟机网络使用的是NAT模式。 安装net-tools后可以使用ifconfig命令,查看虚拟机的IP地址 192.168.xxx.xxx。在cmd查看Windows的ip地址,双方可以互相ping通。 原因: sshd未安装 解决方法: step1:安装openssh-server sudo apt-get install openssh-server step2:开启sshd服务 service sshd start step3:设置机器重启后自动开启sshd服务 sudo systemctl enable ssh 如果要设置它开机不自动启动的话可以如下操作 sudo systemctl disable ssh

Hadoop的安装与配置(非常重要)

官方的原生配置文档Hadoop3.1.0 HDFS的组成 NameNodesecondaryNameNodeDataNode 这是以主从模式来运行的,前两个在maser节点上,最后一个在slave节点上 1. 解压hadoop安装包 要学会从官方网站里找到历史镜像和release的发布版本来下载 我觉得从别人给的资源包里和从别的网盘里下载的东西还是太虚了 真正要学会一个东西必须从最原生的东西开始学起 一定要下载300兆的,不要下载src的,这个是源码文件 vmware中移动文件的小妙招 Vmware虚拟机和主机之间复制、粘贴内容、拖拽文件的详细方法 使用xftp来传输文件使用vmware tools工具来直接进行拖拽传送 2. 配置Hadoop环境变量 其实配置的jdk的变量位置 Hadoop的环境变量文件:hadoop-env.sh 在hadoop子目录下的/etc文件中 把java_home的目录改为自己本机真实的jdk目录即可 3. 配置yarn环境变量 和上面相同,文件也是位于hadoop的解压目录下 在hadoop的3.1.0中,不需要配置yarn-env文件,默认会使用hadoop-env中的配置 4. 配置核心组件 core-site.xml文件的配置代码 <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/wangguowei/hadoopdata</value> </property> </configuration> 5. 配置文件系统 hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> 6. 配置yarn-site.xml文件 <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:18040</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:18030</value> </property> <property> <name>yarn.

Apache httpCient 连接池使用情况查看

背景 : 在springboot项目中使用 resetemplate 集成HttpClient 连接池使用状态。 如何知道目前连接池是否满负荷。 springboot 1)添加配置 如下 application.properties 配置文件 logging.config=classpath:log4j2_pro.xml 2)打开配置打印debug日志 <?xml version="1.0" encoding="UTF-8"?> <configuration status="OFF" monitorInterval="30"> <Properties> <!--自定义一些常量,之后使用${变量名}引用--> <Property name="logFilePath">/home/ucmed/logs/zsyy-api</Property> </Properties> <!--先定义所有的appender--> <appenders> <!--这个输出控制台的配置--> <console name="Console" target="SYSTEM_OUT"> <!--输出日志的格式--> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l -%X{logId} - %m%n"/> </console> <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFileInfo" fileName="${logFilePath}/info.log" filePattern="${logFilePath}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l -%X{logId} - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> </Policies> <DefaultRolloverStrategy max="30"/> </RollingFile> <RollingFile name="RollingFileError" fileName="${logFilePath}/error.log" filePattern="

Activiti工作流并行网关驳回在发起问题

1. 问题描述 第一次发起: 流程从发起人走到并行节点 -> 人员3,和人员4,人员5,人员6是并行。人员3(同意),人员4(同意),人员5(同意),人员6(不同意)回到发起人节点。 第二次发起 流程又开始从发起人走到人员3,人员4,人员5,人员6并行节点。这时会出现一个问题? 只要人员3,人员4,人员5,人员6其中一个人同意,并行网关就会放行走到人员7。可是还剩另外3个人没有审批,就达到了人员7。并行网关失效??? 流程图 2.解决方案 最后发现问题出现在运行时流程执行实例表( act_ru_execution ) 因为并行网关是需要4个节点同时同意,它才会消失。它记录了人员3(同意),人员4(同意),人员5(同意)三次记录。而在同一个流程,并行网关它记录的次数是一样的。导致第二次审批时,并行节点有一个同意,就走到了人员7节点。 ( act_ru_execution )表详解 可以在驳回时,将这几条记录给删除。因为驳回操作会删除其他表记录,删除这几条记录不会因为主键影响报错。

Three.js学习二——Three.js极简入门

目录 准备开发环境掌握一些概念性知识编码测试创建一个场景(Creating a scene)创建一个场景渲染场景使立方体动起来结果 准备开发环境 1、一台可用浏览器的带文件系统的电脑; 2、下载官网提供的three.js-master代码包,官方提供的示例和相关库文件都在里面,官网地址:https://threejs.org/; 3、下载安装vscode编辑器,地址:https://code.visualstudio.com/Download 安装好后,在vscode的插件市场搜索 Live Server,点击安装,方便开小型服务,解决因直接打开的文件中存在import,导致跨源请求被拦截的问题。 掌握一些概念性知识 1、前端基本功 – HTML+CSS+JS ,至少会写需要引入入外部JS的单页HTML,本文即使用这种模式编写和实现; 2、Three.js 概念 :Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎; 3、基于Three.js写页面的三要素是:场景(Scene)、相机(Camera)、渲染器(Renderer); 编码测试 1、创建一个空文件夹,将下载的three.js-master解压放一份到这个文件夹下,再创建一个空的index.html文件(新建一个记事本,改一下文件名和后缀就行) 2、编码,这里引用官网文档的第一个例子文档,原文地址:https://threejs.org/docs/index.html#manual/zh/introduction/Creating-a-scene,这里为了适配本文环境,对内容进行了适配。 创建一个场景(Creating a scene) 这一部分将对three.js来做一个简要的介绍;我们将开始搭建一个场景,其中包含一个正在旋转的立方体。页面下方有一个已经完成的例子,当你遇到麻烦,或者需要帮助的时候,可以看一看。 在开始使用three.js之前,你需要一个地方来显示它。将下列HTML代码保存为你电脑上的一个HTML文件,然后在你的浏览器中打开这个HTML文件。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>My first three.js app</title> <style> body { margin: 0; } </style> </head> <body> <script src="./three.js-master/build/three.js"></script> <script> // Our Javascript will go here. </script> </body> </html> 接下来的所有代码将会写入到空的 script 标签中。 创建一个场景 为了真正能够让你的场景借助three.js来进行显示,我们需要以下几个对象:场景、相机和渲染器,这样我们就能透过摄像机渲染出场景。 const scene = new THREE.Scene(); const camera = new THREE.

IP知识之网络安全态势感知

网络安全态势感知 态势感知是对一定时间和空间内的环境元素进行感知,并对这些元素的含义进行理解,最终预测这些元素在未来的发展状态。当前提到“态势感知”时主要是指“网络安全态势感知”,即将态势感知的相关理论和方法应用到网络安全领域中。网络安全态势感知可以使网络安全人员宏观把握整个网络的安全状态,识别出当前网络中存在的问题和异常活动,并作出相应的反馈或改进。 网络安全态势感知的概念来源 态势感知的概念起源于20世纪80年代的美国空军,当时主要用于分析空战环境信息,对当前和未来形势进行分析,最终做出相应的判断和决策。后来经过不断发展和完善,形成相关理论体,已广泛应用于航空、安全、网络等领域。网络安全态势感知即是将态势感知的相关理论和方法应用到网络安全领域中。 为什么网络安全态势感知很重要 随着网络与信息技术的不断发展,人们的安全意识在逐步提高,安全防护思想已经从过去的被动防御向主动防护和智能防护转变。同时,和云技术的发展也是日新月异,很多颠覆性的新技术也引入了新的安全问题,这都为我们提出了新的挑战,也对网络安全人员的能力提出了更高的要求。 正是在这样的背景下,以网络安全态势感知技术为核心的产品和解决方案得到快速发展,比如IP数据云。网络安全态势感知技术可以带动整个安全防护体系升级,实现以下三个方面的转变: 安全建设的目标从满足合规转变为增强防御和威慑能力,并且更加注重对抗性,这对情报技术提出了更高要求。 攻击检测的对象从已知威胁转变为未知威胁,通过大数据分析、异常检测、态势感知、等技术,实现对高级威胁的检测。 对威胁的响应从人工分析并处置转变为自动响应闭环,强调应急响应、协同联动,实现安全弹性。 网络安全态势感知的应用场景 由于网络安全态势感知系统的建设复杂度和建设成本较高,所以当前主要应用场景还是在大型机构和大中型企业中。对于规模较小的单位,可以选择功能和架构相对简单、性能相对较弱的集成单一产品。 如何评估态势感知的建设结果 网络安全态势感知的建设结果可以从防御、检测、响应、预测这几方面进行评估。 什么是态势感知的三个层级 ca Endsley在“Towarda theory of situation awareness in dynamic systems”(1995)中,仿照人的认知过程提出了一个经典的态势感知模型。这个模型是很多后续理论的基础,一般称为Endsley模型(Endsley‘s model)。Endsley模型将态势感知分为三个层级,分别是态势要素感知、态势理解和态势预测。 的态势感知产品HiSec Insight针对金融、网安、政府、运营商等大、中、小型企业,华为推出基于成熟自研商用平台FusionInsight的HiSec Insight安全态势感知系统。HiSecInsight能够采集和存储多类网络信息数据,帮助您在发现威胁后调查取证以及处置问责。华为安全态势感知以发现威胁、阻断威胁、取证、溯源、响应、处置的思路设计,帮助您完成全流程威胁事件闭环。

问题解决记录——VS2019变量未释放

问题描述 调试过程中,局部变量模态窗口关闭以后出现中断提示局部变量未释放。 中断提示 解决方案及原因分析: 解决方法:父窗口结构体定义后进行添加出栈操作。 #pragma pack(push) #pragma pack(1) ...结构体定义部分 #pragma pack(pop) 调用创建模态窗口的对话框头文件只有进栈操作,没有进行对应的出栈操作,导致局部变量一直没有被释放。 参考文献:#pragma pack(push) 和#pragma pack(pop) 以及#pragma pack()。

逆向入门(五) C# 反编译后resources 文件修复

1、为了避免后续编译出现改动界面就不能用的情况,反编译完后需要将 resources 后缀的文件修复成.resx后缀 修复方式: 启动菜单搜索VS自带的工具 Command Prompt 进入到工程目录对应放置resources 的文件夹,调用指令 resgen xx.resources xx.resx 操作完成后,在工程里添加resx文件,然后删除resources 文件 2、修复resource 资源图片文件, 使用 Command Prompt 将资源文件修复成resh文件,同步骤一,再将工程里的资源文件删除后从新添加resoureces.resx文件 3、修复变量“manager”未声明或从未赋值。 将InitializeComponent方法中的对象manager替换为resources(替换变量名) 4、base.AutoScaleMode = AutoScaleMode.Font; 方法“InitializeComponent”内的代码由设计器生成,不应手动修改。请移除任何更改,然后尝试重新打开设计器。 对所有System.Windows.Forms.命名空间里面的控件需要全命名空间的声明。 示例:base.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

[总结]FDM 3D打印机DIY实践

目录 教程参考: 1. 购买物品,组装 2. 接线 3. 配置固件 4.完善细节 5.模型下载网站 额外工具 一、原理 1.1.组成 1.2.主要结构(个人理解) 二、开源打印机 2.1.开源打印机 2.2.开源切片软件 2.2.1.Prusa 2.3.开源固件 2.4.建模软件 三、常见打印机分类 3.1.常见3D打印机 3.1.1. FDM 3.1.2.光固化 3.2.传动轴 3.3.z轴特性类型 3.4.挤出机类型 3.5.挤出机数量 3.6.皮带缠绕方式分类 3.7.置物平台 四、常见打印机材料 五、本人遇到的问题解决 5.1.16GB的sd卡无法识别,提示media init fail 5.2.打印头打印的时候在最远端角落,我XY轴用的TMC2208驱动芯片,我设置DEFAULT_AXIS_STEPS_PER_UNIT的是160一圈的步长(按32细分算) 5.3.打印π平台不沾塑料,材料都挤出到旁边 5.4.ABS打印开裂 5.5.挤出头不送料,确认没有堵头 5.6.堵头处理 六、打印效果 七、个人一点感悟 本人3d打印机小白,根据DIY实践千元左右大鱼CC FDM 3D打印机整理,该打印机是大鱼根据开源打印机voron1.0改装的全金属线轨打印机,目前官方最新版是voron2.4打印机(根据官方教程DIY材料成本大概5000左右)。 TIPS:DIY过程费时费力费钱,如果只是想打印东西,建议直接相同价格买成品,功能丰富(比如无线打印、自动调平)且无须整理布线、布局,调试也更简单。 教程参考: 1. 购买物品,组装 3d打印机购买材料组装主体框架(注意该版本的控制板不支持无线打印、该版本不支持自动调平、单z轴) 不到千元的全金属线轨3D打印机,你心动了吗?_哔哩哔哩_bilibili [作业]大鱼FDM3D打印机DIY实践_哔哩哔哩_bilibili 2. 接线 主控板接线教程(注意该版本的控制板不支持无线打印) 【保姆级】3D打印机主板接线教程,小白也能看懂!_哔哩哔哩_bilibili 3. 配置固件 marlin固件配置教程 Marlin2.0固件配置指南—超详细的3D打印机固件设置教程。_哔哩哔哩_bilibili marlin固件官网 Download | Marlin Firmware 显示屏MKS MINI12864 V3.0使用说明书

《蛇形矩阵》及常见偏移量拓展!!使用非常巧妙的方式~

题目描述: 输入两个整数 n 和 m,输出一个 n 行 m 列的矩阵,将数字 1 到 n×m 按照回字蛇形填充至矩阵中。 具体矩阵形式可参考样例。 输入格式 输入共一行,包含两个整数 n 和 m。 输出格式 输出满足要求的矩阵。矩阵占 n 行,每行包含 m 个空格隔开的整数。 数据范围 1≤n,m≤100 输入样例: 3 3 输出样例: 1 2 3 8 9 4 7 6 5 偏移量技巧: 在进行矩阵四个方向的表示时,可以使用for循环+偏移量来表示四个方向。用两个数组记录四个方向。dx = {-1, 0, 1, 0},dy = {0, 1, 0, -1}用(-1, 0)代表上方向,用(0, 1)代表右方向,用(1, 0)代表下方向,用(0, -1)代表左方向。 注:图片来源于y总 那么怎么表示向一个方向走呢?可以使用坐标+一个向量表示。(x, y) + dx[d], dy[d],即x = x + dx[d],y = y + dy[d]。开始初始化d = 1, 即表示向右走。

JS-BOM 网页特效&动画

目录 立即执行函数 offset系列-元素偏移量 offset系列常用属性 offset属性使用 案例:鼠标移动,同步获取鼠标当前所在盒子中的坐标 案例:模态框的拖拽 client系列-元素可视区 Client常见属性 scroll系列-元素滚动 scroll系列常见属性 动画 动画原理 缓动缓动原理 简易动画函数的封装 左右移动的动画封装 上下移动的动画封装 案例: 侧面栏触碰滑出案例 案例:缓动画形式返回顶部 立即执行函数 不需要调用,立马执行。创建的函数内部是独立的作用域。 声明方式 主要作用:创建一个独立的作用域,避免命名冲突。 //声明方式1 (function(){ console.log('hello...'); }()); //声明方式2 立即执行函数的传参 (function(a){ console.log(a); })(1) offset系列-元素偏移量 作用:使用offset系列相关属性可以动态获取元素的位置(偏移量),大小等。 offset系列常用属性 offset系列属性作用offsetParent(注意大小写)返回调用元素的父元素,如果无父元素,则返回bodyoffsetTop返回元素相对带有定位父元素上方的偏移 offsetLeft返回元素相对带有定位父元素左边框的偏移offsetWidth返回自身宽度(包括自身内容宽度,padding,border)offsetHight返回自身高度(包括自身内容高度,padding,border) offset属性使用 需要注意的是:使用padding或者border时,计算宽度或高度计算的是两边的,也就是说,计算两边的border、padding。 <div id="father" style="position:relative"> <div id="son" style="width: 20px ;height :20px ;padding: 5px;" ></div> </div> <script> //offsetParent var div = document.querySelector('#son'); //判断该元素带有定位的父类 console.log(div.offsetParent); //div#father //距离带有定位的父元素的上边距和左边距 console.log(div.offsetTop); //0 console.log(div.offsetLeft);//0 //返回宽度(包括自身宽度,border,padding) console.log(div.offsetWidth);// 宽度:20 padding:5 输出30 console.

Git基本操作之 修改提交信息 取消暂存文件 撤销文件修改

git 文件分为 本地文件【即你当前在git bash终端ls 看到的文件】 暂存文件【即你使用了git add 之后存储在index file 的文件,此文件是下一步commit的暂存】 仓库文件【即执行了git commit之后的文件】 1.修改提交信息,这里指的是修改 git commit的时候你输入的“提交信息”,如下面的"第一次提交" git add 第一次提交的文件.c git commit -m "第一次提交" 如果你发现git commit -m 这个命令的描述不准确,这是第二次提交了,可以使用下面的命令进行修改 git add 遗漏的文件.c git commit --amend 这个时候就会弹出界面,让你修改提交信息,记住,这里并非让你修改提交的代码,而是让你修改上面的“第一次提交” 这个提交的提示信息,并且此命令会提交你第一次git add 添加到暂存区的文件,也就是说让你可以补交一下”遗漏的文件“,修改一下提交日志。。。 2.取消暂存的文件 比如开发过程中,你修改了两个文件111.c 222.c,但是本次只想验证222.c 是否符合预期,但是一不小心使用了git add * ,全给干到暂存区了,如何只取消其中一个呢?使用下面的命令可以实现: git reset HEAD 111.c 这样就取消了 111.c的暂存,使用git status查看,111.c就又是已经修改未暂存的状态了。 3.撤销对文件的修改 如果在开发过程中发现修改错了文件,想撤销对某一个文件的修改,但是又不想影响到别人修改的代码。也就是删除本地修改,重新拉取这个文件。使用下面的命令: git checkout -- 111.c 注意:如果你已经对上述文件执行过 git commit 或者 git add 操作,上述命令无法达到你的目的,这个命令实质上是从暂存区取出文件覆盖本地文件。 可以使用下面的方法重置本地代码: 1.在其他文件夹里重新拉取代码 git clone <url> 2.删除本地的代码 111.

YOLOv5模型部署TensorRT之 FP32、FP16、INT8推理

引言 YOLOv5最新版本的6.x已经支持直接导出engine文件并部署到TensorRT上了。 FP32推理TensorRT演示 FP32推理TensorRT演示 可能很多人不知道YOLOv5新版本6.x中已经支持一键导出Tensor支持engine文件,而且只需要一条命令行就可以完成:演示如下: python export.py --weights yolov5s.pt --include onnx engine --device 0 其中onnx表示导出onnx格式的模型文件,支持部署到: - OpenCV DNN - OpenVINO - TensorRT - ONNXRUNTIME 但是在TensorRT上推理想要速度快,必须转换为它自己的engine格式文件,参数engine就是这个作用。上面的命令行执行完成之后,就会得到onnx格式模型文件与engine格式模型文件。--device 0参数表示GPU 0,因为我只有一张卡!上述导出的FP32的engine文件。 使用tensorRT推理 YOLOv5 6.x中很简单,一条命令行搞定了,直接执行: python detect.py --weights yolov5s.engine --view-img --source data/images/zidane.jpg FP16推理TensorRT演示 在上面的导出命令行中修改为如下 python export.py --weights yolov5s.onnx --include engine --half --device 0 其中就是把输入的权重文件改成onnx格式,然后再添加一个新的参 --half 表示导出半精度的engine文件。就这样直接执行该命令行就可以导出生成了,图示如下: 对比可以发现相比FP32大小的engine文件,FP16的engine文件比FP32的engine大小减少一半左右,整个文件只有17MB大小左右。 推理执行的命令跟FP32的相同,直接运行,显示结果如下: 对比发现FP32跟FP16版本相比,速度提升了但是精度几乎不受影响! INT8量化与推理TensorRT演示 TensorRT的INT量化支持要稍微复杂那么一点点,最简单的就是训练后量化。只要完成Calibrator这个接口支持,我用的TensorRT版本是8.4.0.x的,它支持以下几种Calibrator: 不同的量化策略,得到的结果可能稍有差异,另外高版本上的INT8量化之后到低版本的TensorRT机器上可能无法运行,我就遇到过!所以建议不同平台要统一TensorRT版本之后,再量化部署会比较好。上面的Calibrator都必须完成四个方法,分别是: #使用calibrator验证时候每次张数,跟显存有关系,最少1张 get_batch_size #获取每个批次的图像数据,组装成CUDA内存数据 get_batch #如果以前运行过保存过,可以直接读取量化,低碳给国家省电 read_calibration_cache #保存calibration文件,量化时候会用到 write_calibration_cache 这块对函数集成不懂建议参考TensorRT自带的例子: TensorRT-8.4.0.6\samples\python\int8_caffe_mnist 几乎是可以直接用的!Copy过来改改就好了! 搞定了Calibrator之后,需要一个验证数据集,对YOLOv5来说,其默认coco128数据集就是一个很好的验证数据,在data文件夹下有一个coco128.yaml文件,最后一行就是就是数据集的下载URL,直接通过URL下载就好啦。