2013-03-26 86 views
3

在上SIFT“匹配”串联环路超过4串刚才,我抬头SIFT算法来处理我的图片..通过庆典

如果你曾经使用SIFT从http://www.cs.ubc.ca/~lowe/keypoints/有一个名为可执行文件“比赛”中获得一个到另一个图像的相关性..

这就是例子..

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

所以..

我意识到我需要加快ü p我的过程中使用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 "-im$((i)) ${item%.*}.pgm -k$((i++)) $item" 

和评论的最后一行

#! ./match s > out.pgm 

然后我得到了我想要的清单..

但..

,如果我正好我的代码运行{在此基础上我评论的答案}有一个问题,在我的终端窗口面临

Error: Invalid command line argument: -im3 

有没有可以帮助我? ^^

我很抱歉,如果我的英语不好..

+0

这是一个SIFT问题?这只是一个使用SIFT程序输出的bash和concatenation问题。 – 2013-04-05 21:11:10

+0

我的讲师说,SIFT可以用来从多个图像中提供关于一个物体的信息(不只是比较2个图像和它们相关的键),所以我为什么想知道如何去做。 有关这方面的进展,你可以看到我的答案.. ^^ ..感谢评论.. – 2013-04-08 04:20:04

+0

也许你可以为我的问题的客人权利..无论如何..谢谢.. – 2013-04-08 04:22:18

回答

0

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

2

空间不变量幽会允许的,所以:

i=1 
s= 

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

./match "$s" > out.pgm 
+0

谢谢..但是..有在我的终端窗口显示另一个问题..这是说: 错误:无效的命令行参数:■ – 2013-03-26 11:45:30

+0

其中{S}在这种情况下,是所有在“比赛”中使用的参数 – 2013-03-26 11:55:22

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 
+0

等待..我来试试.. – 2013-03-26 12:26:28

+0

它的作品,并具有同样的错误太多..但是谢谢你的帮助.. – 2013-03-26 12:29:34

+0

如果你在'-im'和'3'之间加一个空格,它会工作吗? – chepner 2013-03-26 12:56:14