如果你參加了JMP 2011年探索峰會在九月份的科羅拉多州丹佛市,你可能已經參與了我的演講,圖像不是一切,但肯定是JMP 9中的東西 。我談到了添加的圖像功能 JMP 對於版本9,我演示了JMP用戶如何利用圖像功能提取其圖像中包含的數據的一些現實示例。我分享了一些JMP腳本語言(JSL)腳本,希望它可能會啟動(雙關語)使用圖像功能。出於同樣的原因,我決定整理一個代碼片段的JSL文件,該文件還演示了圖像功能。 那個文件叫做 ImageExamples.jsl ,可以在JMP中找到文件交換 。讓我們從該文件中提取一些示例,並進一步討論它們。
您可能想要做的第一件事是將現有圖像放入JMP。為此,只需使用“新建圖像”命令即可。
IMG = 新圖片 ( “C:\用戶\ sasjvp \圖片\ Yellowstone08 \ IMG_0262.JPG” ) ;
新窗戶 ( “原始圖像” , IMG ) ;

此示例讀入JPEG圖像並將其作為圖像對象存儲在JSL中,稱為img。NewImage()可以讀取JPG,PNG,BMP,GIF和TIF文件。
當我第一次這樣做時,由於圖像太大,所以窗口非常大。我想知道圖像的尺寸究竟是什麼,所以我這樣做了:
{ w ^ , H } = IMG << 的getSize () ;
這個命令給了我圖像的寬度和高度,它是3264 x 2448,一個相當大的圖像。因此,為了以更合理的尺寸顯示它,我通過為圖像指定新的寬度和高度來縮小它。
IMG << 的setSize ( { w ^ / 4 , H / 4 } ) ;
現在圖像為816 x 612,或每個維度的原始大小的四分之一。請注意,寬度和高度作為列表傳遞,方法是將它們用大括號括起來。
現在我想操縱圖像,但我想保留原始版本。所以我將使用NewImage()創建一個圖像副本。
IMG2 = 新圖片 ( IMG ) ;
這會將我原始圖像的副本創建為第二個圖像,稱為img2。
我想做的下一件事是獲取圖像的像素值。由於我的圖像是彩色圖像,因此每個像素都是根據三種顏色分量定義的:紅色,綠色和藍色。像素數據作為我要求的每個顏色分量的矩陣返回。
{ [R , G , b } = IMG2 << 的getPixels ( “RGB” ) ;
在這種情況下,我將得到三個矩陣。如果我的圖像中有透明度,我可以通過指定“rgba”來請求四個矩陣。我還可以簡單地通過指定我想要的組件來詢問一個顏色組件,例如綠色組件的“g”。每個矩陣表示歸一化顏色空間中的像素顏色值,意味著值在0.0和1.0之間(包括0.0和1.0)。
將像素值作為矩陣的好處是我現在可以對像素進行矩陣數學運算。如果我想創建一個灰度版本的圖像,我可以使用以下公式非常簡單地完成。
一世 = 0.30 * [R + 0.59 * G + 0.11 * b ;
這與電視用於將彩色顯示轉換為黑白的公式相同。如果你和我一樣年紀,你可能還記得黑白電視,它不僅僅是黑白兩色,而是包括黑白之間的一系列灰色。這個配方結合了我的紅色成分的30%和我的綠色成分的59%以及我的藍色成分的11%。這會計算我的灰度的強度值。現在我可以用灰度強度值替換紅色,綠色和藍色的原始顏色分量,以產生灰度圖像。
IMG2 << 的setPixels。 ( “RGB” , { 一世 ,一世 ,一世 } ) ;
這是結果。

由於JMP支持JSL中的矩陣數學,因此我們不必遍歷圖像並單獨操作每個像素。我們可以同時將這個公式應用於整個圖像,既方便又有效。

當然,JMP的真正優勢在於它能夠進行統計分析和數據發現。為此,我們需要數據採用數據表的形式。因此,讓我們讀取圖像,提取像素數據並從中創建數據表。
讓我們看一下從MRI拍攝的圖像。我們可以像以前一樣使用NewImage()命令將圖像讀入JMP。我們也可以像以前一樣使用getPixels()命令,除了這個圖像已經是灰度圖像,所以我們只需要一個顏色分量。第一個組件仍稱為“r”組件。一旦我們得到像素值,我們就可以創建數據表。
IMG = 新圖片 ( “C:\ JMP \ mri.jpg” ) ;
{ PIX } = IMG << 的getPixels ( “R” ) ;
DT = 新表 ( “像素數據” ,
newColumn ( “值” ,設定值 ( PIX ))) ;
分配 ( 持續分配 ( 柱 ( : 值 ) ,異鳥盒
情節 ( 0 ) ) ) ;
新窗戶 ( “分析圖像數據” , IMG ) ;
像讀取到JMP中的任何其他數據一樣,像素值現在位於數據表中。這意味著我們現在可以使用JMP中的統計分析功能來分析數據。此時使用的內容取決於您的數據是什麼以及您嘗試回答的問題。在這個例子中,我做了一個簡單的分發來向我展示我的數據的範圍和頻率。

我希望到目前為止,我已經給了你足夠的例子讓你開始在JMP中使用圖像。別忘了下載示例腳本, ImageExamples.jsl ,來自JMP 文件交換 。它顯示了比我在這裡提到的更多的例子。它包括旋轉命令,透明度和過濾器等。讓我知道你的想法。
使用JSL在JMP中進行圖像處理中寫道:
[...]命令getPixels(“rgb”)將每個圖像作為三個矩陣的集合返回 - 每個顏色分量一個,紅色,綠色和藍色。要混合圖像,我們將Image2乘以百分比,然後將其添加到Image1乘以1減去百分比。然後我們將其設置為結果圖像Image3。這裡的所有都是它的。有關getPixels()以及其他圖像功能的進一步說明,請查看我的另一篇博文,使用JMP 9改進您的圖像。[...]