Displaying Data Starting IPython 啟動 SPy使用IPython提供GUI窗口而不會阻塞交互式Python解釋器。 要啟用它,你必須以“pylab”模式啟動IPython。 如果您已經在matplotlibrc文件中將matplotlib后端設置為“WX”或“WXAgg”(請參閱下面的注釋),您應該可以像這樣啟動IPython for SPy: ipython --pylab 您也可以通過這種方式啟動IPython時顯式設置后端: ipython --pylab=wx 注意:如果不調用GUI函數(調用save_rgb不算作GUI函數),則不需要運行IPython - 您可以運行標準的Python解釋器。 注意:如果你不能在你的系統上運行WX后端,你仍然可以使用不同的后端(例如Qt4Agg或TkAgg)。 但是你將無法調用view_cube或view_nd函數。 Raster Displays柵格數據顯示 SPy 的imshow()函數是一個名字相同的matplotlib函數的包裝。 主要區別在于,SPy版本可以很容易地顯示來自多光譜/高光譜圖像的波段,它呈現分類圖像,并支持多種其他類型的交互性。 Image Data Display 的imshow函數產生與np.ndarray或SpyFile對象相關聯的數據的一個光柵顯示。 In [1]: from spectral import * In [2]: img = open_image('92AV3C.lan') In [3]: view = imshow(img, (29, 19, 9)) 當以交互方式顯示圖像時,matplotlib按鈕控件可用于平移和縮放顯示的圖像。 如果您按下“z”鍵盤鍵,將會打開一個縮放窗口,其中顯示圖像的放大視圖。 通過按住CONTROL鍵并左鍵單擊原始窗口,縮放窗口將平移到原始窗口中單擊的像素。 在版本0.16.0中更改:默認情況下,imshow函數應用RGB顯示數據的線性直方圖拉伸。 顏色拉伸可以通過關于imshow函數的stretch,bounds和stretch_all關鍵字來控制(有關這些關鍵字的含義,請參閱get_rgb)。 要調整顯示圖像的顏色延伸,可以調用ImageView對象的set_rgb_options方法。 顯示圖像的RGB數據限制可以從ImageView對象的__str__方法打印: In [4]: print view ImageView object: Display bands : (29, 19, 9) Interpolation : <default> RGB data limits : R: [2054.0, 6317.0] G: [2775.0, 7307.0] B: [3560.0, 7928.0] Class Map Display分類地圖顯示 要使用imshow顯示地面實況圖像,請在imshow函數中設置classes參數: In [5]: gt = open_image('92AV3GT.GIS').read_band(0) In [6]: view = imshow(classes=gt) 也可以在顯示圖像帶和分類顏色之間切換,以及顯示覆蓋在圖像數據顯示器上的分類顏色掩模。 為此,請在調用imshow時指定數據和類的值: In [7]: view = imshow(img, (30, 20, 10), classes=gt) 默認的顯示模式是顯示圖像的波段。 按“d”,“c”或“C”(焦點位于圖像窗口上),將顯示切換為數據,類別或類別疊加。 設置顯示參數也可以通過編程來完成。 例如,要顯示覆蓋類掩碼的圖像,使用0.5的alpha透明度,在調用imshow之后鍵入以下命令 In [8]: view = imshow(img, (30, 20, 10), classes=gt) In [9]: view.set_display_mode('overlay') In [10]: view.class_alpha = 0.5 Interactive Class Labeling交互式類標簽 ImageView窗口提供了通過選擇圖像中的矩形區域并分配新的類ID來交互地修改像素類ID的功能。 將類ID應用于矩形區域使用以下步驟完成: 調用imshow,為類參數提供一個初始數組。 這必須是一個非負的,整數值的數組。 類ID值為零表示一個未標記的像素,以便從完全未標記的圖像開始,為類參數傳遞一個全零的數組。 按住SHIFT鍵的同時,用鼠標左鍵點擊要選擇的矩形左上角。 拖動鼠標光標,松開矩形區域右下角的鼠標按鈕。 請注意釋放鼠標按鈕之前釋放SHIFT鍵將導致取消選擇操作。 焦點仍在ImageView窗口上,輸入數字類ID以應用于區域。 班級ID可以包含多個數字。 數字不會在命令行中回顯。 按ENTER鍵應用班級ID。 命令行將要求確認操作。 再次按ENTER鍵應用班級ID或按任何其他鍵取消操作。 類可以從主ImageView窗口或關聯的縮放窗口分配。 雖然選擇工具只生成矩形區域,但您可以將類分配給非矩形區域,方法是首先將類ID分配給覆蓋所有感興趣像素的超級矩形,然后將子矩形重新分配回0級(或其他任何 原始課程ID)。 Additional Capabilities附加功能 要獲得有關ImageView鍵盤和鼠標功能的幫助,請在焦點位于圖像窗口上時按下“h”鍵以顯示所有的鍵控和鼠標功能: Mouse Functions: ---------------- ctrl+left-click -> pan zoom window to pixel shift+left-click&drag -> select rectangular image region left-dblclick -> plot pixel spectrum Keybinds: --------- 0-9 -> enter class ID for image pixel labeling ENTER -> apply specified class ID to selected rectangular region a/A -> decrease/increase class overlay alpha value c -> set display mode to "classes" (if classes set) C -> set display mode to "overlay" (if data and classes set) d -> set display mode to "data" (if data set) h -> print help message i -> toggle pixel interpolation between "nearest" and SPy default. z -> open zoom window See matplotlib imshow documentation for addition key binds. 要自定義超出imshow函數提供的圖像顯示的行為,可以直接創建一個ImageView對象并在調用其show方法之前對其進行自定義。 您還可以從imshow返回的ImageView對象的axes屬性中訪問matplotlib圖形和畫布屬性。 最后,您可以通過修改模塊的SpySettings對象的成員來自定義圖像顯示的一些默認行為 Saving RGB Image Files保存RGB圖像文件 要將圖像顯示保存到文件,請使用save_rgb函數,該函數使用與imshow相同的參數,但保存的圖像文件名稱作為第一個參數。 In [11]: save_rgb('rgb.jpg', img, [29, 19, 9]) 保存索引的彩色圖像與保存RGB圖像相似; 但是,save_rgb無法確定要保存的圖像是單色(灰度)圖像還是索引彩色圖像。 因此,要保存為索引的彩色圖像,調色板必須作為關鍵字參數顯式傳遞: In [12]: save_rgb('gt.jpg', gt, colors=spy_colors) Spectrum Plots光譜圖 圖像顯示窗口提供了一些交互功能。 如果使用imshow(或view)創建圖像顯示,然后雙擊窗口中的特定位置,將會為點擊的像素創建一個帶有二維光譜圖的新窗口。 它應該看起來像這樣: 請注意,雙擊像素的行/列被打印在命令提示符處。 由于在我們的示例圖像文件中沒有光譜波段元數據,所以光譜圖的軸是未標記的,并且像素波段值相對于波段數而不是波長繪制。 為了將數據繪制成波長,我們必須首先將光譜帶信息與圖像相關聯。 In [13]: import spectral.io.aviris as aviris In [14]: img.bands = aviris.read_aviris_bands('92AV3C.spc') 現在,關閉圖像和光譜圖窗口,再次調用視圖并單擊圖像顯示中的幾個位置。 您會注意到x軸現在顯示了與每個波段相關的波長。 請注意,光譜現在是針對它們相關的波長繪制的。 光譜圖旨在方便用戶快速查看圖像中的光譜。 如果您想要更漂亮的相同數據的繪圖,可以使用SPy從圖像中讀取光譜,并直接使用matplotlib創建自定義繪圖。 Hypercube Display光譜立方體顯示 在高光譜圖像的情況下,3D超立方體是高光譜圖像的三維表示,其中x和y維度是圖像的空間維度,第三維度是光譜維度。 超立方體顯示器的分析實用性是有爭議的,但是沒有爭議的是它們看起來非常酷。 調用view_cube后,將打開一個新窗口,并顯示3D超立方體。 將命令焦點移到新創建的窗口之后,可以使用鍵盤輸入來更改超立方體的視圖。 使用關鍵字參數,可以更改多維數據集頂部顯示的圖像以及多維數據集邊上使用的色彩比例。 In [15]: view_cube(img, bands=[29, 19, 9]) Mouse Functions: ---------------- left-click & drag -> Rotate cube CTRL+left-click & drag -> Zoom in/out SHIFT+left-click & drag -> Pan Keybinds: --------- l -> toggle light t/g -> stretch/compress z-dimension h -> print help message q -> close window 注意如果view_cube打開的窗口生成空白畫布(不顯示多維數據集),則可能是由于顯示適配器不支持32位深度緩沖區。 您可以通過發出以下命令將view_cube和view_nd使用的深度緩沖區的大小減小到較小的值(例如16) In [16]: import spectral In [17]: spectral.settings.WX_GL_DEPTH_SIZE = 16 N-Dimensional Feature DisplayN維特征顯示 由于高光譜圖像包含數百個窄的連續帶,因此頻帶(特別是相鄰頻帶)之間通常具有強相關性。 為了增加所顯示的信息量,通常將圖像的維度降低到具有較高信息密度的較小的一組特征(例如,通過主分量轉換)。 盡管如此,在轉換的圖像中通常仍然存在多于三個的特征,因此分析者必須確定哪些是要顯示數據集的某些方面(例如,光譜類別的可分離性)的“最佳”三個特征。 希望能夠快速切換顯示的特征以在短時間跨度內檢查許多特征的組合。 在大多數情況下,通過在查看數據之前首先執行降維(例如通過選擇一定數量的主成分),顯示將更加有用。 In [18]: data = open_image('92AV3C.lan').load() In [19]: gt = open_image('92AV3GT.GIS').read_band(0) In [20]: pc = principal_components(data) Covariance.....done In [21]: xdata = pc.transform(data) In [22]: w = view_nd(xdata[:,:,:15], classes=gt) 一個新的窗口應該打開并顯示如下 N維窗口的初始視圖 python提示符將顯示ND窗口所接受的一組鍵盤和鼠標命令: Mouse functions: --------------- Left-click & drag --> Rotate viewing geometry (or pan) CTRL+Left-click & drag --> Zoom viewing geometry CTRL+SHIFT+Left-click --> Print image row/col and class of selected pixel SHIFT+Left-click & drag --> Define selection box in the window Right-click --> Open GLUT menu for pixel reassignment Keyboard functions: ------------------- a --> Toggle axis display c --> View dynamic raster image of class values d --> Cycle display mode between single-quadrant, mirrored octants, and independent octants (display will not change until features are randomzed again) f --> Randomize features displayed h --> Print this help message m --> Toggle mouse function between rotate/zoom and pan modes p/P --> Increase/Decrease the size of displayed points q --> Exit the application r --> Reset viewing geometry u --> Toggle display of unassigned points (points with class == 0) 下圖顯示了旋轉顯示后的同一窗口,未標記的像素(白色)被抑制,顯示的像素尺寸增加: N-Dimensinal窗口的修改視圖 Display Modes顯示模式 為了促進高維圖像的交互式可視化分析,view_nd函數提供了多種模式來在三維顯示窗口中顯示高維數據: 單八度模式 - 在此模式下,圖像中的三個要素被選中并映射到三維窗口中的x,y和z軸。數據被翻譯和縮放,使得顯示的點填充3D空間的正x / y / z八分度。用戶可以選擇隨機選擇一組新的三個功能來顯示。通過這種隨機化能力,用戶可以快速循環各種特征組合,以確定合意的投影。 鏡像十進制模式 - 在這種模式下,三個特征映射到x軸,y軸和z軸,如單八度模式。然而,另外三個特征被選擇并且映射x,y和z軸的負部分。然后,圖像像素被顯示在3D顯示的八個八分區中的每一個八分區中,使用與特定八分圓的三個半軸相關聯的任何特征。在這種模式下,由兩個半軸定義的每個部分平面可以被認為是一面鏡子,兩個垂直的半軸代表不同的特征。例如,如果x,y,z,-x,-y和-z半軸分別與特征1至6相關聯,則x / y / z和x / y / z象限將在x / y平面上具有共同的投影。但是,由于z和-z被映射到不同的特征,所以數據點將沿著z和-z軸具有不同的投影。與單卦模式一樣,用戶可以隨機顯示6個特征。 獨立八分模式 - 在此模式下,三維空間的每個八分區代表3個獨立的功能,最多可顯示24個功能。 與其他兩種模式一樣,數據點被平移和縮放,使得整組圖像像素完全填充每個八分圓。 一個特定的特征可能會被用于多個八分圓。 用戶可以選擇切換顯示模式。 哪種顯示模式最好取決于與所使用的數據集或運行應用程序的系統有關的許多因素。 對于像素數量足夠大的圖像,系統的顯示刷新率可能開始受鏡像八分體或獨立八分體模式的影響,因為每個圖像像素必須呈現8次。 當性能不成問題時,后兩種模式提供了更多的數據同步預測,可以使用戶更快地探索數據集。 User Interaction用戶交互 渲染的圖像數據的初始3D視圖幾乎肯定不會是理想的3D觀看幾何體; 因此,該窗口允許用戶通過使用鼠標輸入來縮放,平移和旋轉查看幾何圖形來操縱視圖。 用戶還可以增加/減小顯示圖像像素的大小,并切換未標記(0級)像素的顯示。 雖然像素顏色允許用戶區分顯示像素的類別,但是給定顏色與哪個類別相關聯可能并不明顯。 為了識別特定像素的類別,用戶可以點擊一個像素,python命令行將打印圖像中的像素位置(行和列值)和像素類別的編號(ID)。 由于點擊單個屏幕像素是困難的,因此用戶可以首先增加顯示的圖像像素的尺寸,使得可以用鼠標容易地選擇圖像像素。 Data Manipulation數據操作 分析師通常要檢查無監督分類的結果,然后合并像素類或將像素重新分配給新的或不同的類。類似地,分析師可能想要評估地面實況數據,并可能重新分配在地面真實圖像開發時錯誤地包括在類中的像素。為了支持這種功能,N-D窗口允許用戶用鼠標點擊并拖動以選擇矩形區域,然后重新分配位于定義框內的所有像素。該應用程序不僅可以重新分配選擇框內可見的像素,而且還可以通過3D空間重新分配框內投影的所有像素。 當調用view_nd時,它將返回一個代理對象,該代理對象具有一個類成員,該成員表示與ND顯示關聯的當前類值的數組。通過ND窗口重新分配圖像像素后,代理對象可用于訪問更新的類數組。代理對象也有一個set_features方法來指定在3D窗口中顯示的一組功能 提示在重新分配像素類值之前,按“c”鍵打開第二個窗口,顯示當前圖像像素類值的柵格視圖。 然后,當您在ND窗口中重新分配像素類時,類柵格視圖將自動更新,提供并指示源圖像中哪些像素被修改。 ———————————————— |
|
來自: 昵稱QAb6ICvc > 《地圖制圖》