画像 (jpg) ファイルを開き、分析を実行して次の画像に移動しますJMP を使用して自動画像処理と分析を行うことに非常に興味があり、スクリプト (主に John Pontes アドインに基づいており、彼の優れたブログから収集した情報) があります。 John Ponte、JMP ブログの著者) イメージで一度に 1 つのイメージで実行できることを確認しましたが、次に本当にやりたいことは、次のことを行う「ループ」スクリプトを作成することです
- ディレクトリ内の .jpg ファイルの数をカウントします。
- 画像を 1 つずつ開き、利用可能な情報 (私は John Pontes の画像解析アドインとスクリプトを使用しています) をデータ テーブルに入れます。
- 基本的な分析を行います(列と行の平均など)
- これをjpgファイル名で保存します
- ファイルを閉じて、次の画像に移動します。
これにはいくつかの小さな問題がありますが、主なものは次のものを使用する場合です
為に(私= 1 、私<= Nアイテム(ファイル) 、私++、
もしも(で終わる(ファイル[私] 、 「.jpg」 ) 、
開ける(ファイル[私] ) ;
);
開いている ( ファイル);別のプログラム(変更したくないデフォルトのプログラム)でjpgファイルを開きます。 以下を使用してJMPで開くようにするにはどうすればよいですか(または、それがより良い場合は他の何か)
画像=新しいイメージ( 「.jpgのファイル名」 ) ;
w =新しい窓( "画像" 、画像) ;
その後、分析を実行し、これをすべて閉じて、すべての画像が分析されるまでループバックします。
[* スタッフ sseligman による元の投稿への編集。 ユーザーの質問の 2 番目の部分が元の投稿に追加されました。]
申し訳ありませんが、元の投稿では十分に明確ではありませんでした。 私がやりたいことは、元の画像自体ではなく、ピクセル情報をデータ テーブルに入れることです。
これは、事実上、 ImageToDatatable JSLスクリプトは既に作成されていますが、フォルダー内の各画像を処理し、結果のデータ テーブルを同じフォルダー内のピクセルの結果分析と共に保存します。
x & y 座標と RGB、I、および HSL は、必要な分析を実行するのに十分です。 分析を実行できるサンプルデータテーブルを添付しました。このデータが取得された元の画像も添付しました。これらは数千あるので、一度に1つずつ実行する必要がありますほとんど不可能です。
元の投稿の不適切な表現と明確さの欠如について、再度お詫び申し上げます。
よろしく
デビッド
Re: 画像 (jpg) ファイルを開き、分析を実行して次の画像に移動します解決策として、この投稿への 2 つの返信を統合します。
スタッフからのパート1 @Craige_Hales :
path = "$desktop/temp/";
files = Files In Directory( path );
For( ifile = 1, ifile <= N Items( files ), ifile++,
filename = files[ifile];
If( Right( filename, 4 ) == ".jpg",
pic = Open( path || filename, "jpg" );
jslcolor = pic << getpixels();
{red, green, blue} = Color To RGB( jslcolor );
{hue, lightness, saturation} = Color To HLS( jslcolor );
nr = N Rows( jslcolor );
nc = N Cols( jslcolor );
dt = New Table( Substr( filename, 1, Length( filename ) - 4 ),
addrows( nr * nc ),
New Column( "x" ),
New Column( "y" ),
New Column( "red", setvalues( red ) ),
New Column( "green", setvalues( green ) ),
New Column( "blue", setvalues( blue ) ),
New Column( "hue", setvalues( hue ) ),
New Column( "lightness", setvalues( lightness ) ),
New Column( "saturation", setvalues( saturation ) ),
);
irow = 0;
For( iy = 1, iy <= nr, iy++,
For( ix = 1, ix <= nc, ix++,
irow++;
dt:y[irow] = iy;
dt:x[irow] = ix;
)
);
// do something with dt
Wait( 1 );
Close( dt, "nosave" );
);
);
スタッフからのパート2 @ジョンポンテ:
私が提案することの 1 つは、画像ファイルに Open() の代わりに NewImage() を使用できることです。 Open() は、何を開いているかを把握する必要がある、より一般的な関数です。 そのプロセスでは、別のプログラムでイメージを開くなど、OS の機能を使用します。 img = NewImage("ファイル名.jpg");画像ファイルを開いてJSL画像を作成し、そのハンドルを返します。
もう 1 つの提案は、File Exchange で (Image Analyzer の前に) 私が行った別のスクリプトを使用できるということです。 ImageToDatatable . イメージ アナライザーと同様に、イメージをデータ テーブルに変換しますが、イメージ アナライザーが行うことの残りのすべてを取得することはできません。
それをループでラップします@Craige_Hales (上) が表示され、準備ができているはずです。
Re: 画像 (jpg) ファイルを開き、分析を実行して次の画像に移動します<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />この投稿に出くわしたばかりで、まだ役立つ場合に備えて、いくつかのポイントを追加すると思いました.
私が提案することの 1 つは、画像ファイルに Open() の代わりに NewImage() を使用できることです。 Open() は、何を開いているかを把握する必要がある、より一般的な関数です。 そのプロセスでは、別のプログラムでイメージを開くなど、OS の機能を使用します。 img = NewImage("ファイル名.jpg");画像ファイルを開いてJSL画像を作成し、そのハンドルを返します。
もう 1 つの提案は、File Exchange で (Image Analyzer の前に) 私が行った別のスクリプトを使用できるということです。 ImageToDatatable . イメージ アナライザーと同様に、イメージをデータ テーブルに変換しますが、イメージ アナライザーが行うことの残りのすべてを取得することはできません。
それをループでラップしますクレイジ@JMP (上図) が表示され、準備完了です。
Re: 画像 (jpg) ファイルを開き、分析を実行して次の画像に移動しますpath = "$desktop/temp/";files = Files In Directory( path );For( ifile = 1, ifile <= N Items( files ), ifile++, filename = files[ifile]; If( Right( filename, 4 ) == ".jpg", pic = Open( path || filename, "jpg" ); jslcolor = pic << getpixels(); {red, green, blue} = Color To RGB( jslcolor ); {hue, lightness, saturation} = Color To HLS( jslcolor ); nr = N Rows( jslcolor ); nc = N Cols( jslcolor ); dt = New Table( Substr( filename, 1, Length( filename ) - 4 ), addrows( nr * nc ), New Column( "x" ), New Column( "y" ), New Column( "red", setvalues( red ) ), New Column( "green", setvalues( green ) ), New Column( "blue", setvalues( blue ) ), New Column( "hue", setvalues( hue ) ), New Column( "lightness", setvalues( lightness ) ), New Column( "saturation", setvalues( saturation ) ), ); irow = 0; For( iy = 1, iy <= nr, iy++, For( ix = 1, ix <= nc, ix++, irow++; dt:y[irow] = iy; dt:x[irow] = ix; ) ); // do something with dt Wait( 1 ); Close( dt, "nosave" ); ););Re: 画像 (jpg) ファイルを開き、分析を実行して次の画像に移動します申し訳ありませんが、元の投稿では十分に明確ではありませんでした。 私がやりたいのは、元の画像自体ではなく、ピクセル情報をデータ テーブルに入れることです。
これは、事実上、 ImageToDatatable JSLスクリプトは既に作成されていますが、フォルダー内の各画像を処理し、結果のデータ テーブルを同じフォルダー内のピクセルの結果分析と共に保存します。
x & y 座標と RGB、I、および HSL は、必要な分析を実行するのに十分です。 分析を実行できるサンプルデータテーブルを添付しました。このデータが取得された元の画像も添付しました。これらは数千あるので、一度に1つずつ実行する必要がありますほとんど不可能です。
元の投稿の不適切な表現と明確さの欠如について、再度お詫び申し上げます。
デビッド。
Re: 画像 (jpg) ファイルを開き、分析を実行して次の画像に移動しますファイル タイプ パラメータを追加します。戻り値は画像オブジェクトになります。PNG、JPG、GIF を組み合わせても機能する可能性があります。拡張機能の OS デフォルト プログラムにフォールバックするのではなく、画像を返すように JMP に指示します。
open("$desktop/setFont.PNG","PNG")
新しいイメージ(
Char から Blob(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKLyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
または newimage を使用して画像オブジェクトを取得します。
newimage("$desktop/setFont.PNG")
新しいイメージ(
Char から Blob(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKLyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
newimage の方が簡単です。画像が URL または Blob の場合、open が必要になることがあります。
Re: 画像 (jpg) ファイルを開き、分析を実行して次の画像に移動しますこれにより、フォルダー内の画像ファイルが JMP テーブルに配置されます。
/// ian.cox@jmp.com :2014年6月23日
名前のデフォルトはここ( 1 ) ;
dir =ディレクトリを選択( 「画像ファイルを含むディレクトリを選択してください:」 ) ;
fリスト= FilesInDirectory ( dir ) ;
もしも( Nアイテム( fリスト) < 1 、印刷する( 「フォルダにファイルが見つかりません」 || dir || 「。」 ) ;ビープ() ;投げる()) ;
dt =新しいテーブル( 「からの画像」 || dir 、
新しい列( "ファイルパス" 、キャラクター、公称) 、
新しい列( "画像" 、表現) 、 AddRows ( Nアイテム( fリスト)))
) ;
為に(へ= 1 、へ<=ニテム( fリスト) 、へ++、
fp = dir || "/" || fリスト[へ] ;
桁( dt 、 "ファイルパス" )[へ] = fp ;
試す(桁( dt 、 "画像" )[へ] =新しいイメージ( fp ))) ; // 画像ファイルでない場合は 'Try()' を使用
) ;