日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PIE SDK主成分变换

發布時間:2023/11/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的PIE SDK主成分变换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。