0
本文作者: skura | 2018-12-29 16:53 |
雷鋒網(wǎng) AI 科技評論按,ImagePy 是一款 python 開源圖像處理框架,其 UI 界面支持開放插件。在 github:https://github.com/Image-Py/imagepy 上,不僅有關(guān)于這款圖像處理軟件的詳細(xì)介紹,還有一些使用示例,雷鋒網(wǎng) AI 科技評論接下來將詳細(xì)介紹這一開源圖像處理框架。
ImagePy 是一款基于 imagej 等插件的圖像處理框架,它可以與 scipy.ndimage、scikit-image、opencv、simpleitk、mayavi 以及任何基于 numpy 的庫進(jìn)行組合使用,其地址為 http://imagepy.org。
簡介
ImagePy 是用 python 編寫的開源圖像處理框架。它的 UI 接口、圖像數(shù)據(jù)結(jié)構(gòu)和表數(shù)據(jù)結(jié)構(gòu)分別是基于 wxpython、numpy 和 pandas 的。此外,它支持任何基于 numpy 和 pandas 的插件,這些插件可以輕松地在 scipy.ndimage、scikit-image、simpleitk、opencv 和其他圖像處理庫之間進(jìn)行通信。
概覽,鼠標(biāo)測量,幾何變換,過濾,分割,計數(shù)等
如果你更喜歡 IJ 樣式,請嘗試使用「 Windows -> Windows Style 」來切換
ImagePy:
具有用戶友好的界面;
可以讀取/保存各種格式的圖像數(shù)據(jù);
支持 ROI 設(shè)置、繪圖、測量和其他鼠標(biāo)操作;
可以執(zhí)行圖像濾波、形態(tài)學(xué)操作和其他常規(guī)操作;
可以進(jìn)行圖像分割、區(qū)域計數(shù)、幾何測量和密度分析;
能夠?qū)膱D像中提取的參數(shù)進(jìn)行相關(guān)的數(shù)據(jù)分析、濾波、統(tǒng)計分析等。
這個項目的長期目標(biāo)是成為 ImageJ 和 SPSS 的聯(lián)合體。
地址:
https://academic.oup.com/bioinformatics/article-abstract/34/18/3238/4989871?redirectedFrom=fulltext
安裝:
支持的系統(tǒng):帶有 python2.7 和 python3 及以上版本的 windows、linux、mac 系統(tǒng)。
ImagePy 是一個基于 wxpython 的 ui 框架,它不能在 linux 上用 pip 進(jìn)行安裝。你需要下載和你的 linux 系統(tǒng)相匹配的 whl文件。
因為 ImagePy 會編寫一些配置信息,因此,在 linux 和 mac 系統(tǒng)上,可能會存在權(quán)限問題,所以請從 sudo 命令開始。如果使用 pip 安裝,請按照下面的方法來添加用戶參數(shù):pipsinstall--user imagepy。
如果在 anaconda 虛擬環(huán)境中安裝 ImagePy,那么你可能會遇到這樣的錯誤:這個程序需要屏幕訪問權(quán)限。請使用 python 構(gòu)建的框架來運行,并且只有在你已經(jīng)登錄到主顯示器上時才這樣做,如果遇到這個問題,請從 pythonw-m 鏡像開始。
基本操作:
ImagePy 有一組非常豐富的特性,在這里,我們使用一個具體的示例向你展示 ImagePy 的這些特性。我們選擇官方使用 scikit-image 來分割硬幣的例子,因為這個例子簡單而全面。
打開圖像
菜單打開:file -> local samples -> coins,來打開 ImagePy 中的示例圖像。ps:ImagePy 支持 bmp、jpg、png、gif、tif 和其他常用的文件格式。通過安裝 ITK 插件,還可以讀取/保存 dicom、nii 和其他格式的醫(yī)學(xué)圖像。如果安裝了 opencv,還可以讀/寫 wmv、avi 和其他格式的視頻。
硬幣
過濾與分割
選擇一個復(fù)合濾波器對圖像進(jìn)行 sobel 梯度提取,然后使用上下閾值作為標(biāo)記,最后在梯度圖上進(jìn)行 watersheds 分割。濾波和分割是圖像處理工具包中的關(guān)鍵技術(shù),也是最終測量成敗的關(guān)鍵。還支持諸如自適應(yīng)閾值、watersheds 等分割方法。
Up And Down Watershed 分割
掩模
二值化
菜單打開:process -> binary -> binary fill holes
分割后得到的掩模圖像比較干凈,但仍存在一些空洞和雜質(zhì),干擾了計數(shù)和測量。ImagePy 支持二進(jìn)制操作,如腐蝕、膨脹、開環(huán)和閉環(huán),以及輪廓提取、中心軸提取和距離轉(zhuǎn)換。
填洞
幾何濾波
菜單打開:analysis -> region analysis -> geometry filter
ImagePy 可以根據(jù)面積、周長、拓?fù)?、穩(wěn)定性和離心率等參數(shù)進(jìn)行幾何濾波。還可以使用多個條件進(jìn)行篩選。每個數(shù)字可以是正的(或者負(fù)的),這表示所保存的對象的相應(yīng)參數(shù)分別大于(或者小于)相對值。保存的對象將被設(shè)置為前色,拒絕的對象將被設(shè)置為背景色。在這個演示中,背景顏色設(shè)置為 100,以便查看有哪些對象被過濾掉了。一旦對結(jié)果滿意,就將背景色設(shè)置為 0。此外,ImagePy 還支持灰度密度濾波、顏色濾波、顏色聚類等功能。
幾何濾波
幾何分析
菜單打開:process -> region analysis -> geometry analysis count,計算面積并分析參數(shù)。通過選擇 cov 選項,ImagePy 使用通過協(xié)方差計算的橢圓擬合每個區(qū)域。這里計算前面步驟中所示的參數(shù),如面積、周長、離心率和穩(wěn)定性。事實上,前一步的濾波正是對這一步的準(zhǔn)備。
幾何分析
生成結(jié)果表(背景是黑色,以強調(diào)橢圓)
按區(qū)域?qū)Ρ磉M(jìn)行排序
菜單打開:table -> statistic -> table sort by key
選擇主鍵作為區(qū)域,并選擇 descend,表將按面積的降序排序。表是除了圖像之外的另一項重要數(shù)據(jù)。從某種意義上來說,很多時候我們需要獲得圖像的相關(guān)信息,然后以表的形式對數(shù)據(jù)進(jìn)行后續(xù)處理。ImagePy 支持表 I/O(xls、xlsx、csv)、過濾、切片、統(tǒng)計分析、排序等等(右鍵單擊列標(biāo)題來設(shè)置文本顏色、小數(shù)精度、行樣式等)。
表
圖表
菜單打開:table -> chart -> hist chart
我們經(jīng)常需要利用表格數(shù)據(jù)來繪制一個圖表。這里,我們繪制了某個區(qū)域和其周邊列的直方圖。ImagePy 的表可以用于繪制常見的圖表,如柱狀圖、餅圖、直方圖和散點圖(基于 matplotlib)。該圖表帶有縮放、移動和其他功能,并可以保存為圖像。
直方圖
3D 表格
菜單打開:kit3d -> viewer 3d -> 2d surface
圖像的表面重建。這幅圖像顯示了三種方式的重建結(jié)果,包括:sobel 梯度圖、高閾值和低閾值。它顯示了 Up And Down Watershed 是如何工作的:
計算梯度;
通過高低閾值標(biāo)記硬幣和背景;
在 dem 圖表上模擬上升 water 來形成分割線。
ImagePy 可以完成圖像的 3d 濾波、3d 輪廓構(gòu)建、3d 拓?fù)浞治觥?d 表面重建和 3d 表面可視化。3d 視圖可以被自由拖動、旋轉(zhuǎn),其結(jié)果可以保存為.stl 文件。
3d 可視化
宏記錄和執(zhí)行
菜單打開:window -> develop tool suite
宏記錄器顯示在開發(fā)工具面板中。我們已經(jīng)手動完成了一個圖像的分割。然而,用這種方式一下子處理超過 10 幅圖像是非常乏味的。因此,假設(shè)在處理這些問題的時候,這些步驟具有高度的可重復(fù)性和健壯性,我們可以記錄一個宏,以便將幾個處理過程組合成一個單擊程序。宏記錄器與無線電記錄器相似。打開后,它將記錄操作的每個步驟。我們可以點擊暫停按鈕停止錄制,也可以點擊播放按鈕開始錄制。當(dāng)宏運行時,所記錄的命令將按照順序執(zhí)行,因此它具有簡單性和可再現(xiàn)性。
宏被保存到 .mc 文件中。將文件拖放到 ImagePy 底部的狀態(tài)欄中,宏將自動執(zhí)行。我們還可以將 .mc 文件復(fù)制到 ImagePy 文件目錄下的菜單的子菜單中。當(dāng)啟動 ImagePy 時,宏文件將被解析為相應(yīng)位置的菜單項。通過單擊菜單,宏將被執(zhí)行。
宏記錄
Workflow
宏是一系列預(yù)定義的命令。通過將一系列固定操作記錄到宏中,可以提高工作效率。然而,宏缺乏靈活性。例如,有時主要步驟是固定的,但是參數(shù)調(diào)優(yōu)需要人工參與。在這種情況下,workflow 就可以解決這個問題。ImagePy 中的 workflow 是可視化的流程圖,分為兩個層次:章節(jié)和部分。本章對應(yīng)于 workflow 中的矩形區(qū)域,并且該部分是矩形區(qū)域中的按鈕,也是命令,并附有圖形說明。右邊的消息窗口將顯示相應(yīng)的功能描述,同時鼠標(biāo)懸停在上面。單擊右上角的“詳細(xì)文檔”,查看整個過程的說明文檔。
workflow 實際上是用 MarkDown(一種標(biāo)記語言)編寫的,但是在編寫時你需要遵守以下規(guī)范:
Title
=====## Chapter1
1. Section1
some coment for section1 ...2. ...
## Chapter 2
...
workflow
濾波器插件
在最后一節(jié)中,我們介紹了宏和 workflow,使用宏和 workflow 連接現(xiàn)有功能很方便。但有時我們需要創(chuàng)建新的特性。在本節(jié)中,我們將嘗試向 ImagePy 添加一個新特性。ImagePy 可以輕松訪問任何基于 numpy 的函數(shù)。讓我們以 scikit-image 的 canny 操作符為例。
示例代碼如下:
from skimage import feature
from imagepy.core.engine import Filter
class Plugin( Filter ):
title = 'Canny'
note = [ 'all' , 'auto_msk' , 'auto_snap' , 'preview' ]
para = { 'sigma' : 1.0 , 'low_threshold' : 10 , 'high_threshold' : 20 }
view = [ ( float , 'sigma' , ( 0 , 10 ) , 1 , 'sigma' , 'pix' ) ,
( 'slide' , 'low_threshold' , ( 0, 50 ) , 4 , 'low_threshold' ) ,
('slide' , 'high_threshold' , ( 0 , 50 ) , 4 , 'high_threshold' ) ]
def run ( self , ips , snap , img , para = None ) :
return feature.canny (snap , para[ 'sigma' ] , para[ 'low_threshold' ] ,
para[ 'high_threshold' ] , mask = ips.get_msk () ) * 255
Canny 濾波器示例
創(chuàng)建自己的濾波器的步驟:
導(dǎo)入對應(yīng)的庫,通常是第三方庫。
繼承 filter 類。
標(biāo)題將用作菜單的名稱和參數(shù)對話框的標(biāo)題,也用作宏記錄的命令。
在 note 中告訴框架它需要為你做什么,是否進(jìn)行類型檢查、是否支持選擇、是否支持 UNDO 等等。
para 是一個參數(shù)字典,包含函數(shù)所需的參數(shù)。
為視圖中的每個參數(shù)定義交互方法,框架將通過讀取這些信息自動生成用于參數(shù)調(diào)優(yōu)的對話框。
編寫主函數(shù) run。img 是當(dāng)前圖像,para 是用戶的輸入?yún)?shù)。如果在 note 中設(shè)置了 auto_snap,snap 將是 img 的一個副本。我們可以處理這個副本,將結(jié)果存儲在 img 中。如果函數(shù)不支持指定的輸出,我們還可以返回結(jié)果,框架將幫助我們將結(jié)果復(fù)制到 img 并顯示它。
將文件保存為 xxx_plg.py,然后復(fù)制到菜單文件夾,重新啟動 ImagePy。它將被作為菜單項加載。
這個框架為我們做了什么?
該框架以正式的方式把復(fù)雜的任務(wù)融合在一起,并幫助我們執(zhí)行了:
類型檢查。如果當(dāng)前圖像類型不滿足注釋中的要求,則終止分析;
根據(jù)參數(shù),自動生成對話框以并檢測輸入的合法性;
實時預(yù)覽;
自動 ROI 支持;
撤消支持;
并行化支持;
圖像堆棧支持;
其它。
表
如前所述,表是除了圖像之外的另一種非常重要的數(shù)據(jù)類型。類似地,ImagePy 也支持表的擴(kuò)展。這里我們給出在前面描述中使用的按鍵排序的示例。
代碼為:
from imagepy.core.engine import Table
import pandas as pd
class Plugin( Table ) :
title = 'Table Sort By Key'
para = { 'major':None , 'minor' : None , 'descend' : False }
view = [ ( 'field' , 'major' , 'major' , 'key' ) ,
( 'field' , 'minor' , 'minor' , 'key' ) ,
( bool , 'descend' , 'descend' ) ]
def run( self , tps , data , snap , para = None ) :
by = [ para[ 'major' ] , para[ 'minor' ] ]
data.sort_values( by = [ i for i in by if i ! = 'None' ],axis = 0 , ascending = not para[ 'descend' ] , inplace = True )
表排序示例
表是如何工作的
與濾波器相同,表中還有標(biāo)題(title)、注釋(note)、參數(shù)(para)、視圖(view)等參數(shù)。當(dāng)插件運行時,框架將根據(jù)和視圖生成一個對話框。在選擇 para 之后,將它們與當(dāng)前表一起傳遞給 run 函數(shù)處理。表數(shù)據(jù)是當(dāng)前表中的一個 pandas.DataFrame 對象,存儲在 tps 中。還可以從 tps 檢索其他信息,例如 tps.rowmsk、tps.colmsk,以獲得當(dāng)前選定表的行和列掩碼。
其他類型的插件
上述的濾波器和表是兩個最重要的插件,但是 ImagePy 也支持一些其他類型的插件擴(kuò)展。目前它支持的插件有九個,它們是:
濾波器:主要用于圖像處理;
simple:類似于濾波器,但關(guān)注圖像的整體特性,如 ROI 的操作、假彩色的操作、面積的測量、或整個圖像的三維分析、可視化等;
free:獨立于圖像的操作。用于打開圖像、關(guān)閉軟件等;
tool:使用鼠標(biāo)在圖表上進(jìn)行交互,并在工具欄上顯示小圖標(biāo),如畫筆;
table:對表進(jìn)行操作,如統(tǒng)計分析、排序、繪圖等;
widget:顯示在面板中的小部件,如右側(cè)的導(dǎo)航欄、宏記錄器等;
markdown:標(biāo)記語言,單擊時,將彈出一個單獨的窗口來顯示文檔;
macros:用于串行固定操作過程的命令序列文件;
workflow:結(jié)合宏和 markdown 創(chuàng)建交互式指導(dǎo)過程。
動機(jī)與目標(biāo)
python 是一種簡單、優(yōu)雅、強大的語言,并且具有非常豐富的科學(xué)計算相關(guān)的第三方庫。一方面,基于通用矩陣結(jié)構(gòu)和相應(yīng)的規(guī)則,基于 numpy 的 scipy、scikit-image、scikit-learning 等科學(xué)計算庫給科學(xué)研究帶來了極大的便利。另一方面,通過科學(xué)計算、圖像處理,可以高效準(zhǔn)確地解決生物學(xué)、材料科學(xué)等科學(xué)研究中越來越多的問題。
然而,仍然有許多研究人員缺乏編程技巧。因此,讓更多的研究人員能夠使用基于 numpy 的科學(xué)計算庫是至關(guān)重要的。ImagePy 使不是程序員研究人員也能使用計算機(jī)進(jìn)行科學(xué)計算,因此他們不需要關(guān)注 UI 和交互設(shè)計,只需要關(guān)注算法本身,最終加速開源工具構(gòu)建甚至商業(yè)產(chǎn)品的孵化。同時,這些工具可以讓更多不善于編程的人獲取、推廣和普及圖像處理、統(tǒng)計學(xué)等科學(xué)知識。
來源:https://github.com/Image-Py/imagepy
雷鋒網(wǎng)
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。