3

少し前に、画像を処理するためにSIFTアルゴリズムを調べました。

http://www.cs.ubc.ca/~lowe/keypoints/からSIFTを使用したことがある場合は、「match」という名前の実行可能ファイルがあり、1つの画像と別の画像の相関関係を取得します。

これが例です。

./match -im1 book.pgm -k1 book.key -im2 scene.pgm -k2 scene.key > out.pgm

それで..

デフォルトの「一致」が2つの画像とその画像に関連する2つのキーしか受け入れなかったとしても、bashスクリプトを使用してプロセスを高速化する必要があることに気付きました。

これは私のコードです。

i = 1 
s = ""

for item in *.key
do
    s += "-im$((i)) ${item%.*}.pgm -k$((i++)) $item"
done

./match s > out.pgm

そして今、シナリオ、

私のコードに基づいて、

6行目でechoを使用した場合

echo "-im$((i)) ${item%.*}.pgm -k$((i++)) $item"

そして最後の行にコメントしました

#! ./match s > out.pgm

それから私は私が欲しかったリストを手に入れました。

しかし..

{コメントした回答に基づいて}コードを正確に実行すると、ターミナルウィンドウで問題が発生します。

Error: Invalid command line argument: -im3

助けてくれませんか?^^

英語が下手だったらごめんなさい。

4

3 に答える 3

2

変数の割り当てにはスペースを使用できないため、次のようになります。

i=1 
s=

for item in *.key
do
    s+="-im$i ${item%.*}.pgm -k$((i++)) $item"
done

./match "$s" > out.pgm
于 2013-03-26T11:41:17.830 に答える
2

いずれかの*.keyファイルの名前にスペースが含まれていると、コマンドオプションを単一の文字列に累積するというアプローチは失敗します。ではbash、配列を使用することをお勧めします。

i=1 
s=()

for item in *.key
do
    s+=( "-im$i" "${item%.*}.pgm" "-k$i" "$item" )
    ((i++))
done

./match "${s[@]}" > out.pgm
于 2013-03-26T12:22:05.970 に答える
0

32行目のファイルmatch.cの「match」コードを52までチェックした後

/* Parse command line arguments and read given files.  The command
   line must specify two input images and two files of keypoints
   using command line arguments as follows:
      match -im1 i1.pgm -k1 k1.key -im2 i2.pgm -k2 k2.key > result.v
*/
while (++arg < argc) {
  if (! strcmp(argv[arg], "-im1")) 
im1 = ReadPGMFile(argv[++arg]);
  else if (! strcmp(argv[arg], "-im2")) 
im2 = ReadPGMFile(argv[++arg]);
  else if (! strcmp(argv[arg], "-k1"))
k1 = ReadKeyFile(argv[++arg]);
  else if (! strcmp(argv[arg], "-k2"))
k2 = ReadKeyFile(argv[++arg]);
  else
FatalError("Invalid command line argument: %s", argv[arg]);
}
if (im1 == NULL || im2 == NULL || k1 == NULL || k2 == NULL)
  FatalError("Command line does not specify all images and keys.");
FindMatches(im1, k1, im2, k2);
exit(0);

http://www.cs.ubc.ca/~lowe/keypoints/siftDemoV4.zip

そのコードにいくつかの変数を追加するか、コレクションを使用してすべての変数を補完する必要があります。実際のコードはJavaであるためです。(^^)9

とにかく..bashスクリプトでの回答に感謝します..すべての回答が役に立ちます..(^^)v

于 2013-03-27T06:33:26.100 に答える