数ヶ月前、JMPのお客様からJMPテクニカルサポートに連絡して、画像の機能について問い合わせました。 JMP 9 。特に、顧客は、2つの画像を混ぜ合わせる機能があるかどうかを尋ねました。技術サポートは私にその質問を転送しました。
私はJMP 9にいくつかの画像機能を追加しました。それには単一の画像を操作する多数の機能が含まれています。しかし、私は複数の画像を一緒に操作する機能を追加していませんでした。私はこの要求について考えました、そして、私はこれが既存の機能を使用してJSL(JMP Scripting Language)でするのがかなり簡単であるだろうことに気づきました。

2つの画像を混ぜ合わせるための簡単なJSLスクリプトをすぐにまとめました。GUIを使用すると、ユーザーは2つの画像を指定して、Image1とImage2の比率を制御できます。それはまた、得られた混合画像をユーザに表示する。
Image1とImage2というラベルの付いたボタンは、ファイルセレクタをポップアップ表示し、ユーザーがブレンドする画像に移動できるようにします。画像が選択されると、ユーザはその画像の小さな画像を見ることができます。スライダーは、Image2とImage2の比率を定義します。スライダーの左側にある親指で、結果は100%Image1です。スライダーの中央にある親指は、50%Image1と50%Image2になります。
上部の大きな表示領域は、2つの合成画像の結果を表示するためのものです。ブレンドされた画像は元の画像と同じサイズになり、表示領域はそれに応じてサイズ変更されます。現在、ブレンドする2つの画像は同じサイズであると思います。最終的には、異なる場合を処理するためのロジックを追加します。それとも多分私はちょうどあなたのための練習としてそれを残します!
もともとこの機能が欲しいという動機は、竜巻の前後に撮った写真を比較することでした。致命的なEF5竜巻がミズーリ州ジョプリンを襲い、JMPユーザはこれらの画像を混ぜ合わせて比較したいと考えました。私はインターネットをグーグルして、竜巻の前後両方でジョプリン周辺で撮られたいくつかの画像を見つけました。写真は正確に並んでいませんでした、しかし、彼らは仕事をするのに十分近くにありました。私はJMPの外でそれらをより良く並べるためにいくつかの画像の操作をしました、そして私はそれらを同じサイズになるようにトリミングしました。これは、50%ブレンドの前後の画像の1セットの例です。

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")は、各画像を3つの行列(赤、緑、青の各色成分に対して1つ)のコレクションとして返します。画像をブレンドするには、Image2にパーセントを掛けてから、Image1に1を引いたパーセントを引いたものに加算します。それを結果画像Image3とします。それだけです。getPixels()やその他の画像機能の詳細については、私のブログ記事をチェックしてください。 JMP 9であなたのイメージを向上させましょう 。
あなたがJMPに参加した場合ディスカバリーサミット2011 、これはすべてあなたによく知られているように見えるかもしれません。私はプレゼンテーションの一部としてそれをデモしました、画像はすべてではありませんが、JMP 9のものであることは確かですあなたは私がインターフェースをわずかに変更することにしたことをあなたが認識するかもしれませんが。
いつものように、私はあなたがどう思うか教えてください。