PIE SDK主成分變換

1.算法功能簡介

?? ? 主成分變換(Principal Component Analysis,PCA)又稱K-L(Karhunen-Loeve)變換或霍特林(Hotelling)變換,是基于變量之間的相關關系,在盡量不丟失信息前提下的一種線性變換的方法,主要用于數據壓縮和信息增強。

  主成分正變換,一般意義的K-L變換就是指正變換,該過程通過對圖像進行統計,在波段協方差矩陣的基礎上計算特征值,構造主成分。根據主成分與特征值的關系,可以選擇少數的主成分作為輸出結果。

  主成分逆變換,如果在正變換中選擇的主成分數目與波段/變量數目相同,那么逆變換結果將完全等同于原始影像。如果選擇的主成分數目少于波段數逆變換結果相當于壓抑了圖像中的噪聲。受選擇的主成分數目的影響,逆變換結果圖像的各個“波段”與原始圖像波段可能會有較大的差異而不再具有原始圖像波段的物理意義。

  PIESDK提供了正變換和逆變換的算法,只需要設置對應的參數條件就可以執行,下面介紹下兩種算法使用方法。

? ? ? 下面的示例代碼需要安裝DevExpress三方界面庫

2.算法功能實現說明

2.1. 實現步驟

第一步

算法參數設置

第二步

算法執行

第三步

結果顯示

2.2. 算法參數

算法名稱

主成分正變換

C#算法DLL

PIE.CommonAlgo.dll

C#算法名稱

PIE.CommonAlgo.TransformForwardPCAAlgo

參數結構體

ForwardPCA_Exchange_Info

參數說明

?m_strInputFile

String

輸入文件

m_strOutputResultFile

String

輸出影像路徑

m_strOutputStatsFile

String

輸出統計文件

m_strFileTypeCode

String

輸出文件類型

m_nPCBands

int

輸出波段數量

m_nOutDataType

int

輸出文件類型

0、字節型(8位);

1、無符號整形(16位);

2、整形(16位);

3、無符號長整形(32位);

4、長整形(32位);

5、浮點型(32位);

6、雙精度浮點型(64位)

m_eigenvalues

IList<string>

特征值 -返回

m_bPCBandsFromEigenvalus

bool

根據特征值排序選擇PCA波段

m_bOutputLikeEnvi

bool

零均值處理

m_bCovariance

bool

統計使用矩陣 -true- 使用協方差矩陣 -false- 使用相關系數矩陣

m_accumulate_contribute

IList<string>

百分比 -返回

?

算法名稱

主成分逆變換

C#算法DLL

PIE.CommonAlgo.dll

C#算法名稱

PIE.CommonAlgo.TransformInversePCAAlgo

參數結構體

InversePCA_Exchange_Info

參數說明

?m_m_nOutDataType

int

輸出文件字節類型

0、字節型(8位);

1、無符號整形(16位);

2、整形(16位);

3、無符號長整形(32位);

4、長整形(32位);

5、浮點型(32位);

6、雙精度浮點型(64位)

m_strFileTypeCode

String

輸出文件格式

m_strInputPcaFile

String

輸入PCA結果文件

m_strInputStatsFile

String

輸入PCA結果統計文件

m_strOutputResultFile

String

輸出文件路徑

2.3. 示例代碼

項目路徑

百度云盤地址下/PIE示例程序/10.算法調用/圖像處理/ImageTransform

數據路徑

百度云盤地址下/PIE示例數據/柵格數據/04.World/World.tif

視頻路徑

百度云盤地址下/PIE視頻教程/10.算法調用/圖像處理/主成分變換.avi

示例代碼

 1 /// <summary>
 2 /// 主成分正變換
 3 /// </summary>
 4 /// <param name="sender"></param>
 5 /// <param name="e"></param>
 6 private void toolStripButton1_Click(object sender, EventArgs e)
 7 {
 8     //1、參數設置
 9     PIE.CommonAlgo.ForwardPCA_Exchange_Info info = new ForwardPCA_Exchange_Info();
10     info.m_strInputFile = @"D:\data\02.測試數據\World\World.tif";
11     info.m_nOutDataType = 5;//float32
12     info.m_strOutputResultFile = @"D:\PCPT.tif";//輸出文件
13     info.m_strOutputStatsFile = @"D:\PCPT.pcasta";//輸出統計文件
14     info.m_nPCBands = 3;//輸出的主成分波段數
15     info.m_strFileTypeCode = "GTiff";//文件格式類型        
16     info.m_bOutputLikeEnvi = true;//零均值處理
17     info.m_bPCBandsFromEigenvalus = false;//是否根據特征值排序PCA波段(如果為true,m_nPCBands 為0個波段)
18     info.m_bCovariance = true;//統計使用矩陣 true 協方差矩陣 false 使用相關系矩陣  前提是
19 bPCBandsFromEigenvalus為true,設置的才有效
20     //2、創建算法對象
21     ISystemAlgo algo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.TransformForwardPCAAlgo");
22     if (algo == null) return;
23     algo.Params = info;
24 
25     //3、執行算法
26     bool result = AlgoFactory.Instance().ExecuteAlgo(algo);
27    if (result)
28     {
29         if (info.m_nPCBands == 0 && info.m_bPCBandsFromEigenvalus)
30         {
31             PIE.CommonAlgo.ForwardPCA_Exchange_Info info1 = algo.Params as PIE.CommonAlgo.ForwardPCA_Exchange_Info;
32             PIE.Plugin.FrmPCABandSelect frm = new PIE.Plugin.FrmPCABandSelect();
33             frm.Init(info1.m_eigenvalues, info1.m_accumulate_contribute);
34             if (frm.ShowDialog() != DialogResult.OK) return;
35             info1.m_nPCBands = frm.nOutBandCount;//選擇輸出的波段號
36             algo.Params = info1;
37             result = AlgoFactory.Instance().ExecuteAlgo(algo);
38         }
39     }
40     if (result == false) return;   
41     mapControlMain.AddLayerFromFile(info.m_strOutputResultFile, 0);
42     mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
43 } 
44 
45 
46 /// <summary>
47 /// 主成分逆變換 (對主成分正變換的結果做逆變換,得到正變換之前的影像數據)
48 /// </summary>
49 /// <param name="sender"></param>
50 /// <param name="e"></param>
51 private void toolStripButton2_Click(object sender, EventArgs e)
52 {
53     //1、參數設置
54     PIE.CommonAlgo.InversePCA_Exchange_Info info = new InversePCA_Exchange_Info();
55     info.m_strInputPcaFile = @"D:\PCPT.tif";//輸入文件 主成分正變換結果
56     info.m_strInputStatsFile = @"D:\PCPT.pcasta";//pac統計文件
57     info.m_strOutputResultFile = @"D:\InversePC.tif";//逆變換結果
58     info.m_strFileTypeCode = "GTiff";//輸出結果
59     info.m_nOutDataType = 5;//float32
60 
61     //2、創建算法對象
62     ISystemAlgo algo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.TransformInversePCAAlgo");
63     if (algo == null) return;
64     algo.Params = info;
65 
66     //3、執行算法并加載結果圖層
67     bool result = AlgoFactory.Instance().ExecuteAlgo(algo);
68     if (result != true) return;
69     ILayer layer = LayerFactory.CreateDefaultLayer(info.m_strOutputResultFile);
70     mapControlMain.ActiveView.FocusMap.AddLayer(layer);
71     mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);      
72 }
View Code

2.4. 示例截圖

?

圖一、主成分正變換

?

圖二:主成分逆變換

轉載于:https://www.cnblogs.com/PIESat/p/11202621.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡優化軟件apk,金九銀十怎么從中小企業擠進一線大廠?我先收藏為敬

前言 從畢業到現在面試也就那么幾家公司&#xff0c;單前幾次都比較順利&#xff0c;在面到第三家時都給到了我offer&#xff01;前面兩次找工作&#xff0c;沒考慮到以后需要什么&#xff0c;自己的對未來的規劃是什么&#xff0c;只要有份工作&#xff0c;工資符合自己的要求…

Infragistics NetAdvantage

NetAdvantage是目前為止最為完整的表示層組件集&#xff0c;它所提供的組件集可用于構建基于Windows應用程序、XML web services、和web解決方案的界面。無論是創建Microsoft環境下精美、強壯的GUI&#xff08;圖形用戶界面&#xff09;還是在COM、.NET或是ASP.NET環境下開發&a…

渣本畢業兩年經驗,大廠面試題匯總

開頭 最近有個老鐵&#xff0c;告訴我說&#xff0c;上班一個月&#xff0c;后悔當初著急入職現在公司了。他之前在美圖做手機研發&#xff0c;今年美圖那邊今年也有一波組織優化調整&#xff0c;他是其中一個&#xff0c;在協商離職后&#xff0c;當時捉急找工作上班&#xf…

1040 有幾個PAT (25 分)

字符串 APPAPT 中包含了兩個單詞 PAT&#xff0c;其中第一個 PAT 是第 2 位(P)&#xff0c;第 4 位(A)&#xff0c;第 6 位(T)&#xff1b;第二個 PAT 是第 3 位(P)&#xff0c;第 4 位(A)&#xff0c;第 6 位(T)。 現給定字符串&#xff0c;問一共可以形成多少個 PAT&#xff…

渣本畢業兩年經驗,看這一篇就夠了!

最近跟我的一些讀者交流&#xff0c;有一位讀者的經歷讓我記憶深刻&#xff1a; “有一次和大學同學聚會&#xff0c;和幾個在BAT的同學聊了聊技術&#xff0c;發現自己在創業公司這幾年&#xff0c;完全是吃老本的狀態&#xff0c;沒有什么機會精進技術&#xff0c;同樣是工作…

正式踏入24歲了……

逃避已久的生日終于又是來了……年少不再阿……何時能有些起色&#xff1f; 轉載于:https://www.cnblogs.com/dflying/archive/2006/09/05/494813.html

溫故而知新!微信小程序的事件處理,吊打面試官系列!

前言 現實就是&#xff0c;99%的職業&#xff0c;年齡增大后都沒前途。沒前途是絕大多數普通人的宿命&#xff0c;有前途的人也用不著等到老。有沒有前途已然不重要&#xff0c;無論做哪一行&#xff0c;健康的心態永遠是首位。 從我個人的角度寫寫30多歲碼工的感受&#xff…

這幾天微軟發布的一些好玩的東西(順祝女性程序員朋友們節日快樂!)

[1] Technical Case Study - Infrastructure Management at Microsoft 這是一篇文檔&#xff0c;其中描述了微軟公司是如何管理其企業內部電子信息系統的&#xff0c;當然用到的都是微軟技術。雖然有廣告的嫌疑&#xff0c;但是看個新鮮也好&#xff0c;況且文章篇幅也不大。 […

溫故而知新!這篇文章可以滿足你80%日常工作!面試真題解析

前言 程序員這個行業&#xff0c;日新月異&#xff0c;技術體系更新速度快&#xff0c;新技術新框架層出不窮&#xff0c;所有的技術都像是一個無底洞&#xff0c;當你學得越多就會發現不懂的越多&#xff0c;不懂的越多&#xff0c;需要學習的就更多。 因此&#xff0c;一旦…

我的MarkDown入門

目錄 0.前言1.軟件準備2.基本語法2.1斜體&加粗2.2分級標題2.3分割線2.4超鏈接2.5列表2.6引用2.7插入代碼2.8插入圖像2.9插入表格2.10目錄2.11注腳2.12LaTex公式3.Tepora主題4.結語0.前言 最近學習了最基礎的MarkDown的使用&#xff0c;MarkDown真的很好上手&#xff0c;大概…

漫談MySQL權限安全,威力加強版

緣起 經過近十年的發展&#xff0c;Android技術優化日新月異&#xff0c;如今Android 10.0 已經發布&#xff0c;Android系統性能也已經非常流暢&#xff0c;可以在體驗上完全媲美iOS。到了各大廠商手里&#xff0c;改源碼、自定義系統&#xff0c;使得Android原生系統變得魚龍…

Visual Studio Code 快捷鍵的設置

https://jingyan.baidu.com/article/6181c3e0d72eaa152ef153d2.html轉載于:https://www.cnblogs.com/JonaLin/p/11211527.html

漫談MySQL權限安全,跳槽薪資翻倍

前言 很多公司在招人這件事情上都會面臨一個問題&#xff1b; “我們的招聘要求又不高&#xff0c;能做項目就行&#xff0c;但為什么就是招不到人&#xff1f;” 很多公司還面臨一個問題&#xff0c;招聘的時候這人各方面都不錯&#xff0c;但上崗了就是不出活&#xff0c;績…

靈魂一問-如何徹底防止APK反編譯?成功定級騰訊T3-2

前言 這次去騰訊面試的是我大學同學&#xff0c;我們大學都是一學習&#xff0c;一起吃飯&#xff0c;一起洗腳&#xff0c;一起。。。 他們公司最近也裁員了&#xff0c;不過他是裁員前去的騰訊&#xff0c;不知道誰撈到他簡歷了&#xff0c;莫名就走了流程&#xff0c;他莫…

asp.net core 系列 6 MVC框架路由(下)

一.URL 生成 接著上篇講MVC的路由&#xff0c;MVC 應用程序可以使用路由的 URL 生成功能&#xff0c;生成指向操作的 URL 鏈接。 生成 URL 可消除硬編碼 URL&#xff0c;使代碼更穩定、更易維護。 此部分重點介紹 MVC 提供的 URL 生成功能&#xff0c;并且僅涵蓋 URL 生成工作原…

爆贊!Android崗大廠面試官常問的那些問題,論程序員成長的正確姿勢

開頭 昨天去面了一家公司&#xff0c;價值觀有受到沖擊。 面試官技術方面沒的說&#xff0c;他可能是個完美主義的人&#xff0c;無論什么事情到了他那里好像都有解決的方案&#xff0c;我被說的無所適從&#xff0c;感覺他很厲害。 但我不能認可的是&#xff0c;面試官覺得…

Jenkins 中定時任務構建

一般&#xff0c;在Jenkins中搭建項目完成后&#xff0c;項目可正常運行&#xff0c;基本都會進行定時任務的構建。特別是重要的接口&#xff0c;進行關鍵接口自動化的日常巡檢 時&#xff0c;基本都會設置成定時任務&#xff0c;以方便每天&#xff0c;接口的自動化&#xff0…

爆贊!Jetpack-MVVM-高頻提問和解答,滿滿干貨指導

前言 今天我給大家再次分享一下&#xff0c;我最近的一些讀書的感想&#xff0c;思考起來&#xff0c;確實能夠給自己帶來一些真實的幫助和啟發&#xff0c;希望大家在平時的工作學習中&#xff0c;也能夠認清楚學習的一些本質。 如果我們的學習是在不斷掌握應對具體工作場景…

多線程控制不同的線程取不同的數據的問題

做項目的時候需要分析數據&#xff0c;數據量比較大用到多線程&#xff0c;剛開始接觸線程&#xff0c;想著線程應該平分數據&#xff0c;不應該取重復數據&#xff0c;采用了比較笨的方法&#xff0c;將數據的count取出&#xff0c;然后根據線程數平分&#xff0c;但是因為數據…

牛筆了!Android面試真題解析火爆全網,面試必備

開頭 最近有粉絲反應&#xff0c;不想做安卓了&#xff0c;有朋友轉到前端了&#xff0c;安卓不行了&#xff0c;問我怎么辦&#xff1f; 自從RN&#xff0c;Weex這種跨平臺編程語言出來以后&#xff0c;安卓將死的言論總是不絕于耳。隨著頗有摧枯拉朽之勢Flutter的出現&…