當前位置:首頁 » 操作系統 » 圖像混淆演算法

圖像混淆演算法

發布時間: 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等方法。


具體演算法怎麼實現的,詳細看看上面這些方法裡面的代碼吧。

熱點內容
n皇後演算法 發布:2025-05-20 01:49:15 瀏覽:65
如何配置圖形電腦 發布:2025-05-20 01:47:51 瀏覽:391
及解壓 發布:2025-05-20 01:44:49 瀏覽:415
如何用計算器刷安卓 發布:2025-05-20 01:09:29 瀏覽:576
移動寬頻密碼重置後怎麼辦 發布:2025-05-20 01:02:04 瀏覽:808
php不是內部命令 發布:2025-05-20 00:41:09 瀏覽:97
淘寶圖片上傳用什麼軟體 發布:2025-05-20 00:40:55 瀏覽:346
mysql64位forlinux 發布:2025-05-20 00:37:25 瀏覽:345
工傷輔助器如何配置 發布:2025-05-20 00:25:13 瀏覽:602
opencv存儲圖片 發布:2025-05-20 00:16:10 瀏覽:953