幾個月前,JMP客戶聯繫了JMP技術支持部門,詢問有關圖像功能的信息 JMP 9 。特別是,客戶詢問是否有任何功能可以將兩個圖像混合在一起。技術支持向我轉發了這個問題。
我在JMP 9中添加了一些圖像功能,包括許多可以操作單個圖像的功能。但我沒有添加任何可以同時處理多個圖像的功能。我考慮過這個請求,並且我意識到使用現有功能在JSL(JMP腳本語言)中這很容易做到。

我快速整理了一個簡單的JSL腳本,將兩個圖像混合在一起。GUI允許用戶指定兩個圖像並控制Image1與Image2的比率。它還將結果混合圖像顯示給用戶。
標記為Image1和Image2的按鈕彈出文件選擇器,允許用戶導航到要混合的圖像。一旦選擇了圖像,用戶就可以獲得圖像的小視圖。滑塊定義Image1到Image2的比例。使用滑塊左側的拇指,結果為100%Image1。滑塊上的中心拇指將產生50%Image1和50%Image2。
頂部的大觀察區域是顯示兩個混合圖像的結果。混合圖像將與原始圖像大小相同,並且查看區域將相應地調整大小。目前,我假設要混合的兩個圖像大小相同。最後,也許我會添加一些邏輯來處理它們不同的情況。或者也許我會把它作為鍛煉給你!
最初想要這個功能的動機是比較龍捲風之前和之後拍攝的照片。一場致命的EF5龍捲風襲擊了密蘇里州的喬普林,JMP用戶希望以混合的方式比較這些圖像。我用Google搜索了互聯網,並在龍捲風之前和之後發現了一些在喬普林周圍拍攝的照片。這些照片並沒有準確排列,但它們足夠接近。我確實對JMP外部的圖像進行了一些操作以使它們更好地排列,並且我將它們裁剪為相同的尺寸。以下是具有50%混合的一組前後圖像的示例。

您可以從中下載整個JSL腳本 JMP文件交換 。該腳本被調用 ImageBlend.jsl 。但是腳本中最有趣的代碼是實際的混合功能:
doBlend = EXPR (
{mat1R,mat1G,mat1B} = IMG1 << 的getPixels( “RGB” );
{mat2R,mat2G,mat2B} = IMG2 << 的getPixels( “RGB” );
mat3R = mat2R * 每 + mat1R * ( 1.0 - 每);
mat3G = mat2G * 每 + mat1G * ( 1.0 - 每);
mat3B = mat2B * 每 + mat1B * ( 1.0 - 每);
IMG3 << 的setPixels( “RGB” ,{mat3R,mat3G,mat3B});
imgBlendBox << 重新顯示;
);
命令getPixels(“rgb”)將每個圖像作為三個矩陣的集合返回 - 每個顏色分量一個,紅色,綠色和藍色。要混合圖像,我們將Image2乘以百分比,然後將其添加到Image1乘以1減去百分比。然後我們將其設置為結果圖像Image3。這裡的所有都是它的。有關getPixels()以及其他圖像功能的進一步說明,請查看我的另一篇博文,使用JMP 9改善您的形象 。
如果你參加了JMP 2011年探索峰會 ,這對你來說可能都很熟悉。我把它作為演示文稿的一部分進行了演示,圖像不是一切,但肯定是JMP 9中的東西 ,雖然您可能認識到我決定稍微更改界面。
一如既往,讓我知道你的想法。