当前位置:首页 » 操作系统 » 图像混淆算法

图像混淆算法

发布时间: 2023-03-25 21:31:29

1. android 代码混淆算法有哪些

根据 SDK 的版本不同有 2 中不同的代码混淆方式,以上的 proguard.cfg 参数详解中所涉及到的信息是在较低版本 SDK 下的混淆脚本,事实上在高版本的 SDK 下混淆的原理和参数也与低版本的相差无几,只是在不同 SDK 版本的环境下引入混淆脚本的方式有所不同。具体方法如下:

低版本 SDK 下,项目中同时包含 proguard.cfg 和 project.properties 文件,则只需在 project.properties 文件末尾添加 proguard.config=proguard.cfg 再将项目 Export 即可。
高版本 SDK 下,项目中同时包含 proguard-project.txt 和 project.properties 文件,这时需要在 proguard-project.txt 文件中进行如下信息的配置,然后再将项目 Export 即可。下面以真实的文件进行演示说明。
复制代码
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-16
复制代码
以上的配置信息即是 project.properties 文件中内容,蓝色文字为我们在代码混淆过程中需要添加的配置信息,其中:sdk.dir 为你在当前机器上 SDK 的安装路径。如果想保留某个包下的文件不被混淆,可以在 proguard-project.txt 文件中加入保留对应包名的语句即可。

复制代码
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

-dontwarn com.cnki.android.cnkireader.**
-keep class com.cnki.android.cnkireader.** { *; }

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the javaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
复制代码

2. 实验十七 遥感图像监督分类处理

一、实验目的

通过使用ENVI的六种主要的遥感监督分类器——平行六面体分类、最小距离分类、马氏距离分类、最大似然分类、神经网络分类和支持向量机分类的命令,加深对遥感监督分类原理的理解,了解其技术实现过程,初步掌握其ENVI功能命令的基本使用操作。

二、实验内容

①桂林市TM 遥感影像平行六面体分类;②桂林市TM 遥感影像最小距离分类;③桂林市TM 遥感影像马氏距离分类;④桂林市TM 遥感影像最大似然分类;⑤桂林市TM 遥感影像神经网络分类;⑥桂林市TM 遥感影像支持向量机分类;⑦对6种分类结果进行比较分析。

三、实验要求

①平行六面体、最小距离、马氏距离、最大似然、神经网络和支持向量机六种分类方法在理论上比较复杂,为取得好的实验效果,要求实验前事先预习其原理,从理论上理解并掌握它们的特点和异同。②确定分类处理方法训练样本需要用到的已知地质资料,提前准备。③编写实验报告。④由于同时做六种分类处理工作量较大,可以根据实际课时情况选择做其中部分。最小距离分类为必须做的方法。

四、技术条件

①微型计算机;②灌阳地区QuickBird全色波段遥感数据;③ENVI软件;④Photoshop软件(ver.6.0以上)和ACDSee软件(ver.4.0以上)。

五、实验步骤

遥感影像监督分类可以分为四个过程:样本选择、执行监督分类、评价分类结果和分类后处理。具体操作步骤如下。

(一)定义训练

1.样本选择

(1)在ENVI主菜单中,选择“File>Open Image File”,打开灌阳地区QuickBird全色波段遥感数据,Band3、4、1合成RGB并使之显示在“Display”中,通过分析图像,选择耕地、林地、居民地和水体四种地物样本。

图17-1 ROI工具对话框

(2)在主图像窗口中,选择“Overlay>Region of Interest”,打开“ROI Tool”对话框,如图17-1所示。

(3)在“ROI Tool”对话框中,选择“Window”选项,可以在“Image”、“Scroll”或者“Zoom”窗口中绘制感兴趣区;在“ROI Name”字段输入样本的名称;在“Color”字段中,单击右键选择颜色。

(4)在“ROI Tool”对话框中,选择“ROI Type > Polygon”,在“Image”、“Scroll”或者“Zoom”窗口中绘制感兴趣区。

(5)完成一类感兴趣区的绘制后,在“ROI Tool”对话框中,选择【New Region】按钮,新建另一类样本种类,重复上述操作。

2.评价训练样本

在ROI对话框中,选择“Option>Compute ROI Separability”,打开待分类影像文件,选择所有定义的样本类型,可以计算样本的可分离性,如图17-2所示,表示各个样本类型之间的可分离性,用Jeffries-Matusita距离和转换分离度(Transformed Divergence)来表示。ENVI为每一个感兴趣区组合计算Jeffries-Matusita距离和Transformed Divergence,在对话框底部,根据可分离性值的大小,从小到大列出感兴趣区组合。这两个参数的值在0~2.0之间,大于1.9说明样本之间可分离性好,属于合格样本;小于1.8,需要重新选择样本;小于1,考虑将两类样本合成一类样本。

图17-2 样本可分离性计算报表

(二)执行监督分类

在ENVI主菜单中选择“Classificatoin>Supervisred>分类器类型”,可以根据分类的复杂度、精度需求等选择分类器。

1.平行六面体分类器

平行六面体用一条简单的判定规则对多波谱数据进行分类。判定边界在图像数据空间中形成了一个N维平行六面体。平行六面体的维数由来自每一种选择的分类平均值的标准差的阈值确定。如果像元值位于N 个被分类波段的低阈值与高阈值之间,则它归属于这一类。如果像元值落在多个类里,那么ENVI将这一像元归到最后一个匹配的类里。没有落在平行六面体的任何一类里的区域被称为无类别的。操作步骤如下:

(1)在ENVl主菜单栏中选择“Classification>Supervised>Parallelepiped”,在分类输入文件对话框中选择待分类遥感影像,打开“Parallelepiped Parameters”对话框,如图17-3所示。

图17-3 平行六面体分类器参数设置对话框

(2) Select Classes from Regions:点击【Select All Items】按钮,选择所有的训练样本。

(3) Set Max stdev from Mean:设置标准差阈值。有三种类型:不设置标准差阈值(None)、为所有类别设置一个标准差阈值(Single Value)和分别为每种类别设置一个标准差阈值(Multiple Values)。

(4)选择“Single Value”,在“Max stdev from Mean”文本框里输入标准差阈值。

(5)点击【Preview】按钮,可以预览分类结果。

(6)选择分类结果的输出路径及文件名。

(7)设置“Output Rule Images”:是否选择规则图像数据。

(8)设置完上述参数后,点击【OK】按钮执行分类处理。

2.最小距离分类器

最小距离分类用到每一个终端单元的均值矢量,计算每一个未知像元到每一类均值矢量的欧几里德距离。所有像元都被归为最近的一类,除非限定了标准差和距离的极限(这时,会出现一些像元因不满足选择的标准,而成为“无类别”),操作步骤如下:

(1)在ENVI主菜单栏中选择“Classification>Supervised>Minimum Distance”,在分类输入文件对话框中选择待分类遥感影像,打开“Minimum Distance”对话框,如图174所示。

图17-4 最小距离分类器参数设置对话框

(2) Select classes from Regions:点击【Select All Items】按钮,选择所有的训练样本。

(3) Set Max stdev from Mean:设置标准差阈值。有3种类型:不设置标准差阈值(None)、为所有类别设置一个标准差阈值(Single Value)和分别为每种类别设置一个标准差阈值(Multiple Values)。

(4)选择“Single Value”,在“Max stdev from Mean”文本框里输入标准差阈值。

(5) Set Max Distances Error:设置允许的最大距离误差,距离大于该值的像元将不被分入该类,如果不满足所有类别的最大距离误差,将会被归为未分类类型中,有3种类型:不设置最大距离误差(None)、为所有类别设置一个最大距离误差(Single Value)和分别为每种类别设置一个最大距离误差(Multiple Values)。

(6)点击【Preview】按钮,可以预览分类结果。

(7)选择分类结果的输出路径及文件名。

(8)设置“Output Rule Images”:是否选择规则图像数据。

(9)设置完上述参数后,点击【OK】按钮执行分类处理。

.3 马氏距离分类器

马氏距离分类是一个方向灵敏的距离分类器,分类时用到了统计。它与最大似然分类有些类似,但是假定所有类的协方差相等,所以是一种较快的方法。所有像元都被归到最临近的ROI类,除非用户限定了一个距离阈值(这时,如果一些像元不在阈值内,就会被划为无类别),操作步骤如下:

(1)在ENVI主菜单栏中选择“Classification>Supervised>Mahalanobis Distance”,在分类输入文件对话框中选择待分类遥感影像,打开“Mahalanobis Distance”对话框,如图17-5所示。

(2) Select Classes from Regions:点击【Select All Items】按钮,选择所有的训练样本。

图17-5 马氏距离分类器参数设置对话框

(3) Set Max Distances Error:设置允许的最大距离误差,距离大于该值的像元将不被分入该类,如果不满足所有类别的最大距离误差,将会被归为未分类类型中,有3种类型:不设置最大距离误差(None)、为所有类别设置一个最大距离误差(Single Value)和分别为每种类别设置一个最大距离误差(Multiple Values)。

(4)点击【Preview】按钮,可以预览分类结果。

(5)选择分类结果的输出路径及文件名。

(6)设置“Output Rule Images”:是否选择规则图像数据。

(7)设置完上述参数后,点击【OK】按钮执行分类处理。

4.最大似然分类器

最大似然分类假定每个波段每一类统计呈均匀分布,并计算给定像元属于一特定类别的可能性。除非选择一个可能性阈值,所有像元都将参与分类。每一个像元被归到可能性最大的那一类里。操作步骤如下:

(1)在ENVI主菜单栏中选择“Classification>Supervised>Maximum Likelihood”,在分类输入文件对话框中选择待分类遥感影像,打开“Maximum Likelihood Parameters”对话框,如图17-6所示。

(2) Select Classes from Regio:n点s击【Select All Items】按钮,选择所有的训练样本。

图17-6 最大似然分类器参数设置对话框

(3)Set Probability Threshold:设置似然度的阈值,有3种类型:不设置最大似然度阈值(None)、为所有类别设置一个最大似然度阈值(Single Value)和分别为每种类别设置一个最大似然度阈值(Multiple Values),如果选择Single Value,则在Probability Threshold文本框中输入一个0~1的值。

(4) Data Scale Factor:输入一个数据比例系数,这个比例系数是一个比值系数,用于将整形反射率或者辐射率数据转换为浮点型数据。例如,对于没有经过辐射定标的8bit数据,设定比例系数为255。

(5)点击【Preview】按钮可以预览分类结果。

(6)选择分类结果的输出路径及文件名。

(7)设置“Output Rule Images”:是否选择规则图像数据。

(8)设置完上述参数后,点击【OK】按钮执行分类处理。

5.神经网络分类器

用计算机模拟入脑的结构,用许多小的处理单元模拟生物的神经元,用算法实现人脑的识别、记忆、思考过程应用于图像分类,操作步骤如下:

(1)在ENVI主菜单栏中选择“Classificantion>Supervised>Neural Net”,在分类输入文件对话框中选择待分类遥感影像,打开“Neural Net Parameters”对话框,如图17-7所示。

(2)Select Classes from Regions:点击【Select All Items】按钮,选择所有的训练样本。

图17-7 神经网络分类器参数设置对话框

(3) Activation:选择活化函数,包括对数(Logistic)和双曲线(Hyperbolic)。

(4) Training Threshold Contnbution:输入训练贡献阈值(0~1)。该参数决定了与活化节点级别相关的内部权重的贡献量,它用于调节节点内部权重的变化。训练算法交互式地调整节点间的权重和节点阈值,从而使输出层和响应误差达到最小。将该参数设置为0将不会调整节点的内部权重。适当调整节点的内部权重可以生成一幅较好的分类图像,但是如果设置的权重过大,对分类结果会产生不良影响。

(5) Training Rate:设置权重调节速度(0~1)。参数值越大则使得训练速度越快,但也增加摆动或者使训练结果不收敛。

(6) Training Momentum:设置权重调节动量(0~1)。该值大于0时,在“Training Rate”文本框中输入较大值不会引起摆动。该值越大,训练的步幅越大。该参数的作用是促使权重沿当前方向改变。

(7)Training RMS Exit Criterai:指定RMS误差为何值时训练应该停止。RMS误差值在训练过程中将显示在图表中,当该值小于输入值时,即使还没有达到迭代次数,训练也会停止,然后开始进行分类。

(8) Number of Hidden Layers:输入所用隐藏层的数量。要进行线性分类,输入值为0;进行非线性分类,输入值应该大于或者等于1。

(9) Number of Training Iterations:输入用于训练的迭代次数。

(10) Min Output Activation Threshold:输入一个最小输出活化阈值。如果被分类像元的活化值小于该阈值,在输出的分类中该像元将被归入未分类中。

(11)选择分类结果的输出路径及文件名。

(12)设置“Output Rule Images”:是否选择规则图像数据。

(13)设置完上述参数后,点击【OK】按钮执行分类处理。

6.支持向量机分类器

支持向量机分类(SVM)是一种建立在统计学习理论基础上的机器学习方法。SVM可以自动寻找那些对分类有较大区分能力的支持向量,由此构造出分类器,可以将类与类之间的间隔最大化,因而有较好的推广性和较高的分类准确率,操作步骤如下:

(1)在ENVl主菜单栏中选择“Classification>Supervised>SupportVec tor Machine”,在分类输入文件对话框中选择待分类遥感影像,打开“Support Vector Machine Classification Parameters”对话框,如图17-8所示。

图17-8 支持向量机分类器参数设置对话框

(2) Select Classes From Regions:点击【Select All Items】按钮,选择所有的训练样本。

(3) Kemel Type下拉列表中的选项有:Linear、Polynomial、Radial Basis Function和Sigmoid。

若选择Polynomial,需要设置一个核心多项式(Degere of Kernel Polynomial)的次数用于SVM,最小值为1,最大值为6;使用向量机规则需要为Kernel指定“this Bias”,默认值为1;“Gamma in Kernel Function”参数设置为大于0的浮点型数据,默认值为输入图像波段数的倒数。

若选择“Radial Basis Function”,需设置“Gamma in Kernel Function”参数为大于0的浮点型数据,默认值为输入图像波段数的倒数。

若选择Sigmoid,需使用向量机规则需要为Kernel指定“this Bias”,默认值为1;设置“Gamma in Kernel Function”参数为大于0的浮点型数据,默认值为输入图像波段数的倒数。

(4) Penalty Parameter:为大于0的浮点型数据,这个参数控制了样本错误与分类刚性延伸之间的平衡,默认值为100。

(5)Pyramid Levels:设置分级处理等级,用于SVM训练和分类处理过程,如果这个值为0,将以原始分辨率处理,最大值随图像的大小改变。

(6) Pyramid Reclassification Threshold(0~1):当Pyramid Levels值大于0时,需要设置这个重分类阈值。

(7) Classification Probability Threshold(0~1):为分类设置概率阈值,如果一个像素计算得到所有的规则概率小于该值,该像素将不被分类。

(8)选择分类结果的输出路径及文件名。

(9)设置“Output Rule Images”:是否选择规则图像数据。

(10)设置完上述参数后,点击【OK】按钮执行分类处理。

(三)评价分类结果

在执行监督分类后,需要对分类结果进行评价,本次实验采用使用地表真实感兴趣区来计算混淆矩阵(Confusion Matrices)方法进行分类结果评价,操作步骤如下。

1.建立地表真实感兴趣区

可以在高分辨率图像上,通过目视解译获取各个分类的地表真实感兴趣区;也可以通过野外实地调查,根据调查数据生成地表真实感兴趣区,获取方法同“(一)定义训练”,为了同训练样本区别,我们使用“植被、城镇、河流、农田”作为地表真实感兴趣区名称。

2.计算混淆矩阵

(1)打开定义验证样本的文件(即灌阳地区QuickBird全色波段)以及图像分类结果,使之显示在“Available Band”列表中。

(2)在ENVI主菜单栏中选择“Basic>Region of Interest>Restore Saved ROI File”,打开地表真实感兴趣区文件。

(3)在ENVI主菜单栏中选择“Basic>Region of Interest>Restore ROIs via Map”,打开“Reconcile ROIs via Map”对话框(图179),选择相应的地表真实感兴趣区,点击【OK】按钮。

(4)在“Select Source File where ROI was Drawn”对话框中,选择定义验证样本的文件(即灌阳地区 QuickBird 全色波段),点击【OK】按钮。

(5)在“Select Destination File to Reconcile ROIs to”对话框中,选择匹配目标文件,也就是分类结果图像。

(6)在主菜单中选择“Classification>Post Classification> Confusion Matrix> Using Ground Truth ROIs”。

图17-9“Reconcile ROIs via Map”对话框

(7)在“Classification Input File”对话框中,选择分类结果图像。地表真实感兴趣区将被自动加载到“Match Classes Parameters”对话框中。

(8)在“Match Classes Parameters”对话框中,选择所要匹配的名称,然后点击【Add Combination】按钮,将地表真实感兴趣区与最终分类结果相匹配,类别之间的匹配将显示在对话框底部的列表中,如图17-10所示,点击【OK】按钮输出混淆矩阵。

图17-10“Match Classse Parameters”对话框

(9)在混淆矩阵输出窗口的“Confusion Matrix Parameters”对话框中,选择像素(Pixels)和百分比(Percent),如图17-11所示。

(10)点击【OK】按钮,输出混淆矩阵,在输出的混淆矩阵报表中,包含了总体分类精度、Kappa系数、混淆矩阵等几项评价指标。

图17-11 混淆矩阵输出对话框

(四)分类后处理

一般情况下,使用上述分类方法得到的结果难于达到最终应用的目的,所以对获取的分类结果需要进行一些处理,才能得到最终理想的分类结果。

图17-12 编辑分类名称和颜色

1.更改分类颜色、名称

(1)打开分类结果,并使之显示在“Display”窗口中。

(2)在分类结果主图像窗口中,选择“Tools>Color Mapping>Class Color Mapping”,打开“Class Color Mapping”对话框,如图17-12所示。

(3)从“Selected Classes”列表中选择需要修改的类别,改变其颜色或者名称。

(4)完成对需要修改类别的颜色、名称的修改后,选择“Options>Save Changes”保存修改内容。

(5)选择“File>Cancel”,关闭“Class Color Mapping”对话框。

2.聚类处理

分类结果中不可避免的会产生一些面积很小的图斑,从实际应用角度有必要对这些小图斑进行剔除或重新分类。目前,常用的方法有Majority/Minority分析、聚类处理和过滤处理,本次实验选择聚类处理方法对邻近的类似分类区聚类并合并。

聚类处理首先将被选的分类用一个扩大操作合并到一起,然后用参数对话框中指定了大小的变换核对分类图像进行侵蚀操作,具体操作步骤如下:

在ENVI主菜单栏中选择“Classification> Post Classification> Clump Classes”,在“Classification Input File”对话框中,选择分类结果图像,单击【OK】按钮,打开“Clump Parameters”对话框,如图17-13所示。Clump Parameters对话框参数设置如下。

(1)选择分类类别(Select Classes):单击【Select All Items】按钮选择所有类别;

(2)输入形态学算子大小(Rows和Cols):默认为3,3;

(3)选择输出路径及文件名,单击【OK】按钮,完成聚类处理。

3.分类统计

分类统计可以基于分类结果计算相关输入文件的统计信息,包括类别中的像元数、最大值、最小值、平均值以及类中每个波段的标准差等,还可以记录每类的直方图以及计算协方差矩阵、相关矩阵、特征值和特征向量,并显示所有分类的总结记录。

(1)在ENVI主菜单栏中,选择“Classification> Post Classification > Class Statistics”,在“Classification Input File”对话框中,选择分类结果图像,单击【OK】按钮。

(2)在“Statistics Input File”对话框中,选择一个用于计算统计信息的输入文件,点击【OK】按钮,打开“Class Selection”对话框(图17-14),在“Select Classes”列表中,选择想计算统计的类别名称,点击【OK】按钮,打开“Compute Statistics Parameters”对话框(图17-15),选择需要的统计项,包括以下统计类型。

图17-13 “Clump Parameters”对话框

图17-14 选择分类对话框

基本统计(Basic Stats):包括所有波段的最小值、最大值、均值和标准差,若该文件为多波段,还包括特征值。

直方图统计(Histograms):生成一个关于频率分布的统计直方图。

协方差统计(Covariance):包括协方差矩阵和相关矩阵以及特征值和特征向量。

(3)输出结果的方式包括3种:可以输出到屏幕显示、生成统计文件(.sta)和生成文本文件,其中生成的统计文件可以通过“Classification>Post Classification>View Statistics File”命令打开,选择输出路径及文件名,单击【OK】按钮,完成分类统计。

4.分类结果转矢量

(1)在ENVI主菜单栏中,选择“Classification>Post Classification>Classification to Vector”,在“Rasterto VectorInput Band”对话框中,选择分类结果图像,单击【OK】按钮,打开“Raster to Vector Parameters”对话框,如图17-16所示。

(2)选择需要被转换成矢量文件的类别,在“Output”标签中,使用箭头切换按钮选择“Single Layer”,把所有分类都输出到一个矢量层中;或者选择“One Layer per Class”,将每个所选分类输出到单独的矢量层。

(3)选择输出路径及文件名,单击【OK】按钮,完成分类结果转矢量文件。

图17-15 计算统计参数设置对话框

图17-16 栅格转为矢量参数设置

完成遥感影像监督分类后,分别利用平行六面体、最小距离、马氏距离、最大似然、神经网络和支持向量机这六种分类器对灌阳地区QuickBird遥感影像进行监督分类处理,利用混淆矩阵对六种分类结果进行评价,得出总体分类精度和Kappa系数。比较六种分类结果,用WORD文件记录,取名为《灌阳地区QuickBird遥感影像六种监督分类方法分类结果评价》,存入自己的工作文件夹

六、实验报告

(1)简述实验过程。

(2)回答问题:①根据实验操作步骤及各步骤之间的关系,分析所做的监督分类方法在模型设计思想或算法上的共同特点。②通过目视解译,定性比较所获得的监督分类图像的图像识别效果优缺点。

实验报告格式见附录一。

3. C语言 混淆算法

要这么复杂干什么?直接 if('0')
恒唯1. 知道为什么?
或者
void main(int _)
{
if(_)
{
printf("dsds");
}
}

4. CV算法:金字塔(Image Pyramid)

参考资料:
Image Pyramid
斯坦福CS131-1718作业7
CS486-Lecture 11:LoG and DoG Filters

图像通常在空间域上来进行表示,在空间域上我们可以进行很多滤波操作,滤波一般是操作点及其附近的信息。但是图片包含很多复杂的信息,通常很难在空间域上就处理好。

我们还可以在频域上对图像进行操作。但频域主要的问题会混合从图片其他地方的频率信息,这叫做“局部性的损失”(loss of locality),大部分情况下,我们不想在我们面部细节上混淆一些背景中草的信息。

为了利用空间域和频域的信息,我们发明了空频域(spatial-frequency),可以既分离频率成分,又可以保留局部信息。

图像金字塔实际上将图片表示为一系列不同频率的图像,这些图像保留了不同的细节信息,因为这个特性,又叫多分辨率或者多尺度。

上一步的金字塔相减得到,注意右边黑黑的才是。因为G1是要比G0小的,所以G0要扩大后再相减。L0实际上就是被滤掉的高频信息,现在回来啦。L0更细节,更高频。

金字塔就是另外一种表示图片的方式,结合了空间域和频域的优点。

冈萨雷斯书上说,在模式是被中,高分辨率的图像用来识别一些细节,低分辨率的图像用来识别一些大的结构。
在HOG识别人脸中,人脸因为大小不同可能跟计算出来错误,所以这里缩放多张图片,依次计算,得到分数最大的才是。

5. 使用java如何运用混淆算法生成二维码

需要的jar: qrcode.jar和 qrcode_swetake.jar,以及一个工具类,下面有。
package com.sbm.wll.image;
/**
* Java 生成二维码,解析二维码
*/
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import com.swetake.util.Qrcode;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.exception.DecodingFailedException;
public class Image {
/**
* 生成二维码图片文件
*
* @param content
* 存储内容
* @param imgPath
* 图片路径
* @param imgType
* 图片类型
* @param size
* 二维码尺寸
*/
public void encoderQRCode(String content, String imgPath, String imgType, int size) {
try {
BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);
File imgFile = new File(imgPath);
// 生成二维码QRCode图片
ImageIO.write(bufImg, imgType, imgFile);
System.out.println("二维码生成成功,路径:" + imgPath);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 生成二维码,流输出
*/
public void encoderQRCode(String content, OutputStream output, String imgType, int size) {
try {
BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);
// 生成二维码QRCode图片
ImageIO.write(bufImg, imgType, output);
System.out.println("二维码生成成功,流输出");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 生成二维码(QRCode)图片的基本方法
*/
private BufferedImage qRCodeCommon(String content, String imgType, int size) {
BufferedImage bufImg = null;
try {
Qrcode qrcodeHandler = new Qrcode();
// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
qrcodeHandler.setQrcodeVersion(size);
// 获得内容的字节数组,设置编码格式
byte[] contentBytes = content.getBytes("utf-8");
// 图片尺寸
int imgSize = 67 + 12 * (size - 1);
bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
// 设置背景颜色
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, imgSize, imgSize);
// 设定图像颜色> BLACK
gs.setColor(Color.BLACK);
// 设置偏移量,不设置可能导致解析出错
int pixoff = 2;
// 输出内容> 二维码

6. 资源图片如何混淆

xor大法,最简单的加密方式。然后放在raw目录,重写inputstream

7. 二分类评估,从混淆矩阵说起

在 《理解交叉验证》 一文中,我们谈到了使用 AUC 来对比不同模型的好坏,那么 AUC 是什么?它是如何衡量一个模型的好坏的呢?除了 AUC 以外,还有其他评估手段吗?本文我们就来探讨下这几个问题。

要了解 AUC,我们需要从另外一个概念——混淆矩阵(Confusion Matrix)说起,混淆矩阵是一个 2 维方阵,它主要用于评估二分类问题(例如:预测患或未患心脏病、股票涨或跌等这种只有两类情况的问题)的好坏。你可能会问多分类问题怎么办?实际上,多分类问题依然可以转换为二分类问题进行处理。下图是一个用于评烂昌键判是否患有心脏病的混淆矩阵:

纵向看混淆矩阵,它体现了真实情况下,患病和未患病的人数,上图中,真实患心脏病的人数为 True Positive + False Negative,未患心脏病的人数为 False Positive + True Negative;类似的,横向看混淆矩阵,它体现了模型预测出来患心脏病的人数为 True Positive + False Positive,而预饥巧测未患心脏病的人数为 False Negative + True Negative。

两个方向一起看,预测患病且实际也患病,我们称它为真阳性 (True Positive),预测未患病且实际也未患病,被称为真阴性 (True Negative),这两个区域是模型预测正确的部分;模型预测错误也分两种情况,假阳性 (False Positive) 表示预测患病,但实际却未患病,假阴性 (False Negative) 表示预测未患病,但实际却患了病的情况。

概念有点多,但并不难记,可以看到,这些名词都是围绕着预测来命名的——预测患病时被称为“True/False Positive”迅缓,预测未患病时被称为 “True/False Negative”。

上图中,模型预测正确的部分用绿色填充,它所占的比例又被称为准确率 (Accuracy):

单靠准确率这一项,并不足以评估模型的好坏,例如下面这种情况,虽然准确率可以达到 80%,但在实际患病的人群中,该模型的预测成功率只有 50%,很明显它不是一个好模型。

所以,我们需要引入更多的衡量指标,Sensitivity (或 Recall) 表示实际患者中,预测患病成功的概率,同时 Sensitivity 这个词也有"过敏"的意思,和患病对应,这样关联起来比较好记:

既然有衡量患病(正样例)的指标,那肯定也有衡量未患病(负样例)的指标,Specificity 就是用来表示实际未患病的人群中,预测未患病成功的概率,即

Specificity 这个词有"免疫"的意思,能和未患病相关联,所以也很好记。

这两个指标的出现,能更好的帮你比较模型间的差异,并在其中做出取舍。例如当两个模型的 Accuracy 相近时,如果你更看重于预测患病的效果,你应该选 Sensitivity 值较高的;相反,如果你更看重于预测未患病的效果,你就应该选择 Specificity 较高的。

更进一步,我们还可以通过将这些指标图形化,以获得更直观的评估结果,ROC (Receiver Operating Characteristic) 曲线就是其中常用的一种。

我们知道,分类模型(例如"逻辑回归”)的结果是一个大于 0 且小于 1 的概率,此时我们还需要一个阈值,才能界定是否患病,通常我们把阈值设为 0.5,这样当结果大于 0.5 时可判定为患病,否则判定为未患病。

而阈值可以取 0 到 1 之间的任意一个值,对每一个阈值,都有一个混淆矩阵与之对应,有了混淆矩阵,我们就可以求出一对 Sensitivity 和 Specificity,通过这两个数,我们就可以在一个以 1-Specificity 为横坐标,Sensitivity 为纵坐标的坐标系上画一个点,把所有可能的阈值所产出的点连起来,就是 ROC 曲线。

下面我们来看一个具体的例子,假设我们对老鼠做研究,希望通过老鼠的体重来预测其患心脏病的概率,我们采用逻辑回归算法来建模,下图是预测结果,图中有 10 个老鼠样本点,其中红色点代表实际健康的老鼠,蓝色点代表实际患病的老鼠,这些点用一条逻辑回归曲线拟合,图中还有一条 P=0.5 的直线用来表示阈值为 0.5,可以看出,高于 P=0.5 的 5 只老鼠被预测为患病,而其他 5 只老鼠被预测为健康,预测成功率(Accuracy)为 80%:

下面我们通过以上数据,来画一条 ROC 曲线。首先取阈值为 1,此时所有的老鼠都被预测为未患病,根据样本真实患病情况,我们可以得到如下混淆矩阵

根据上述混淆矩阵,我们就可以算出一组 Sensitivity 和 Specificity 的值。接着我们不断调整阈值,以获得所有的 Sensitivity 和 Specificity 对,因为这里我们的样本点较少,所以让阈值根据样本点来采样即可,依然用横线表示阈值,则所有阈值的采样情况如下:

我们把这些阈值对应的混淆矩阵都列出来:

然后,计算这些混淆矩阵对应的 Sensitivity 和 1-Specificity:

根据该表格,以 1-Specificity 为横轴,Sensitivity 为纵轴作图,通常,在画 ROC 曲线时,我们把 1-Specificity 对应的坐标轴记为 FPR (False Positive Rate),把 Sensitivity 对应的坐标轴记为 TPR (True Positive Rate),如下:

ROC 曲线有以下特点:

根据 ROC 曲线的第 1 个特点:“曲线越靠近左上角,模型的效果越好”,意味着一个更好模型,其曲线下方的面积更大,我们把 ROC 曲线下方的面积称为 AUC (Area Under Curve),有了这个概念后,只需一个数值就可以衡量模型的好坏了,上面示例模型的 AUC 如下:

通常情况下我们都使用 AUC 来评估模型,既然是”通常”,那肯定就有例外:当患病率 (或正样本占比) 非常小时,Ture Negative 就会非常大,这个值就会使影响 FPR,使 FPR 较小,为了避免这种影响,我们可以将 FPR 用另一个指标代替:Precision

Precision 的含义是预测患病的样本中,实际也患病的比例;这样,将 Precision 和 Sensitivity 结合起来,会让我们更专注于患病 (正样本) 的预测效果,而机器学习中的另一个效果指标: F1 Score ,就是专门负责这件事儿的

上面的公式中,Recall 等价于 Sensitivity,和 AUC 一样,两个模型互相比较,F1 Score 越大者,预测效果越好,而且 F1 Score 能更好的衡量正样本的预测效果。

本文通过一个医学例子——是否患心脏病——来讲述什么是混淆矩阵、ROC 曲线、AUC 及 F1 Score,其中,我们还一起学习了 ROC 曲线是如何画出来的,最后,我们还谈到了 AUC 和 F1 Score 以及它们之间细微的差别。

需要注意的是,二分类评估并不限于对患病及未患病这两种情况的分类,考虑到通用性,你完全可以将本文中的患心脏病替换为正样本、把未患心脏病替换为负样本。

8. “数据分类”15支持向量机(SVM)及混淆矩阵

1.支持向量机(SVM)概述

(1)支持向量机(Support Vector Machines,SVM)是一种二元分类模型,它是一类模型的统称,其中包括:

①线性可分支持向量机;

②线性支持向量机;

③非线性支持向量机。

(如滚2)核心思想:

    训练阶段在特征空间中寻找一个超平面,它能(或尽量能)将训练样本中的正例和负例分离在它的两侧,预测时以该超平面作为决策边界判断输入实例的类别。寻找超平面的原则是,在可分离的情况下使超平面与数据集间隔最大化。

(3)支持向量机的分类示意图为:

简单来说,SVM的原理就是在平面内找到一条直线,使得这两类不同的样本点分开,并且保证能够尽可能远的远离这条直线。用向量表示两类样本点之间的分类间隔(Margin)为:

支持向量机的目的是使r最大,等价于使||w||/2最小。而几何向量使分类间隔最大问题可以转化为运筹学上的约束优化问题。因为涉及太多复杂公式,此处省略。

只要理解了SVM的原理,并且学会利用sklearn库调用SVM模块,就达到了数据分析的目的。

2.SVM算法实现

(1)重要参数说明:

①kernel :核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ 。

·kernel='linear'时为线性核,C越大分类效果越好,但有可能会过拟合(defaul C=1);

·kernel='poly'时为多项式核函数;

·kernel='rbf'时(default)为高斯核,gamma值越小,分类界面越连续;gamma值越大,分类界面越“散”,分类效果越好,但有可能会过拟合。

②decision_function_shape:

·decision_function_shape='ovr'时,为one v rest,即一个类别与其他类别进行划分;

·decision_function_shape='ovo'时,为one v one,即将类别两两之间进行划分,用二分类的方法模拟多分类的结果。

(2)程序实现过程:

【注】

在分类型模型评判的指标中,常见的方法有如下三种:

①混淆矩阵(也称误差矩阵,Confusion Matrix)

    混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外袭御,混淆矩阵多用于判断分类器(Classifier)的优渣禅余劣,适用于分类型的数据模型,如分类树(Classification Tree)、逻辑回归(Logistic Regression)、线性判别分析(Linear Discriminant Analysis)等方法。

混淆矩阵的一级指标:

通过混淆矩阵可以计算出评估模型的几个指标(二级指标):

三级指标:F1-score

其中,P代表Precision,R代表Recall。

F1-Score指标综合了Precision与Recall的产出的结果。F1-Score的取值范围从0到1的,1代表模型的输出最好,0代表模型的输出结果最差。

Ps:当分类结果多于两种时,需要将结果转化为上面的类型。

详细内容参考博文https://blog.csdn.net/Orange_Spotty_Cat/article/details/80520839

②ROC曲线

③AUC面积

9. envi监督分类后,进行混淆矩阵精度验证,除了总体精度和kappa系数,怎么看各分类的精度大小

如下,还有生产者精度和用户精度

Class Reference Classified Number Procers Users

Name Totals Totals Correct AccuracyAccuracy

-------------------- ---------- ------- --------- -----

Unclassified 0 0 0 --- 纤御 ---

forest 3 1 1 33.33%100.00%

grass 5 4 3 60.00% 75.00%

yanshi 22 22 20 90.91% 90.91%

ruotu 9 8 5 55.56% 62.50%

nongzuowu 11 15 10 90.91% 66.67%

river 0 0 0 --- ---

Totals 50 50 39

Overall Classification Accuracy = 78.00%

生产则精度=正确分类数/某类别总数

用户精度=正确分类数/(正确分类数+错分到某类别总数)

当然是生产则精度和用户精度都大最好

当然是最大似然法最好,马氏距离、最小距离法都是最大似然法的简化。平行管道法也不如最大似然法。

10. 我这里有一个C#的代码混淆器的源码,但是看不懂是怎么实现的,程序的算法是什么也不知道怎么找,求帮助

能力有限,只能说说我看到的东西。

代码混淆的触发是在函数btnGenerate_Click里面

//这里声明了一个混淆器
Obfuscatorobfuscator=newObfuscator(txtBuildPath.Text,
chkObfuscateTypes.Checked,
chkObfuscateMethods.Checked,
chkObfuscateNamespaces.Checked,
宏蚂chkObfuscateProperties.Checked,
chkObfuscateFields.Checked);
//这里把窗口的数据写入混淆器
foreach(TreeNodenodeintvAssemblies.Nodes[0].Nodes)
{
obfuscator.AddAssembly(node.Text,node.Checked);

//Exclusions
foreach困绝贺(TreeNodetypeNodeinnode.Nodes)
if(!typeNode.Checked)
obfuscator.ExcludeType(((Type)typeNode.Tag).FullName);
}
//这一句开始汪派执行混淆算法,并保存
obfuscator.StartObfuscation();

而具体的混淆算法在文件Obfuscation2Obfuscator.cs中。

详细在函数AsyncStartObfuscation中。

publicvoidStartObfuscation()
{
Threadthread=newThread(newThreadStart(AsyncStartObfuscation));
thread.Start();
}

(){...}

在这个函数里面,执行ObfuscateType、ObfuscateNamespace、ObfuscateResource等方法。而在ObfuscateType里面又分别执行ObfuscateMethod、ObfuscateProperty、ObfuscateField等方法。


具体算法怎么实现的,详细看看上面这些方法里面的代码吧。

热点内容
网盘存储文件 发布:2025-05-20 05:32:05 浏览:243
linux网卡的mac 发布:2025-05-20 05:31:13 浏览:5
手机照相机文件夹 发布:2025-05-20 05:29:49 浏览:847
数控车床电脑编程软件 发布:2025-05-20 05:29:42 浏览:964
智能pos如何下载安卓 发布:2025-05-20 05:29:08 浏览:341
防病毒源码 发布:2025-05-20 05:25:00 浏览:925
小米自动上传 发布:2025-05-20 05:06:06 浏览:624
王者荣耀引流脚本 发布:2025-05-20 05:06:03 浏览:485
无人深空pc需要什么配置 发布:2025-05-20 04:55:17 浏览:614
可编程式恒温恒湿试验箱 发布:2025-05-20 04:54:34 浏览:367