3

刚才,我查找了 SIFT 算法来处理我的图像..

如果您曾经使用过来自http://www.cs.ubc.ca/~lowe/keypoints/的 SIFT,则有一个名为“match”的可执行文件可以将一个图像与另一个图像相关联。

这是例子..

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

所以..

我意识到我需要使用 bash 脚本加速我的过程.. 关联两个以上的图像,即使默认的“匹配”只接受 2 个图像和与该图像相关的 2 个键.. 然后..

这是我的代码..

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

如果任何*.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 回答
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 回答
0

在我检查第 32 行的文件 match.c 中的“匹配”代码后,直到 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 回答